- 출처 / 참고: 리눅스 파일시스템 마운트 관리 및 스토리지 복구 가이드
명령어:
mount,dmesg,fsck,lsof,fuser,findmnt
키워드:Read-only file system,remount,rw,dmesg I/O error,errors=remount-ro,fsck
사용처: 운영 중인 리눅스 서버에서 특정 파티션이 갑작스럽게 읽기 전용(ro)으로 전환되어 쓰기/수정이 불가능할 때, 서비스 중단(재부팅) 없이 마운트 상태를 복구하고 원인을 진단할 때
실행예제
파일 생성, 로그 기록, 패키지 설치 등 쓰기 작업을 시도할 때 커널 레벨에서 쓰기 거부 에러(Read-only file system)가 발생하며 서비스 데몬이 비정상 종료되거나 파일 수정이 차단되는 상황입니다.
$ touch /data/test.txt
touch: cannot touch '/data/test.txt': Read-only file system
$ findmnt -no TARGET,FSTYPE,OPTIONS /data
/data ext4 ro,relatime,errors=remount-ro
$ dmesg -T | grep -E -i 'ext4|error|remount-ro' | tail -n 5
[Tue Sep 15 10:12:04 2026] EXT4-fs error (device sdb1): ext4_lookup:1842: inode #262145: comm mysqld: deleted inode referenced: 262150
[Tue Sep 15 10:12:04 2026] Aborting journal on device sdb1-8.
[Tue Sep 15 10:12:04 2026] EXT4-fs (sdb1): Remounting filesystem read-only
스크립트
마운트된 파일시스템 중 읽기 전용(ro) 플래그가 걸린 파티션을 식별하고, 커널 링 버퍼(dmesg)에서 스토리지/파일시스템 에러를 탐색한 뒤 안전하게 읽기/쓰기(rw) 재마운트를 시도하는 셸 스크립트입니다.
#!/bin/bash
# Read-only 마운트 파티션 감지 및 점검/복구 스크립트
echo "[*] Checking Read-Only (ro) Mounted Filesystems..."
echo "--------------------------------------------------"
printf "%-20s %-25s %-10s %s\n" "DEVICE" "MOUNT_POINT" "FSTYPE" "OPTIONS"
read_only_mounts=$(findmnt -rn -o SOURCE,TARGET,FSTYPE,OPTIONS | awk '$4 ~ /(^\vert{},)ro($|,)/ && $3 !~ /squashfs|iso9660/')
if [ -z "$read_only_mounts" ]; then
echo "No unexpected read-only filesystems found."
else
echo "$read_only_mounts" | while read -r src tgt fstype opts; do
printf "%-20s %-25s %-10s %s\n" "$src" "$tgt" "$fstype" "$opts"
done
fi
echo ""
echo "[*] Recent Kernel Filesystem / I/O Errors (dmesg)..."
echo "--------------------------------------------------"
dmesg -T --level=err,crit,alert | grep -E -i 'EXT[234]|XFS|Btrfs|I/O error|remount-ro' | tail -n 10
echo ""
echo "[*] Read-Only Remount Guide:"
echo "--------------------------------------------------"
echo "If no severe hardware I/O error occurred, run:"
echo " sudo mount -o remount,rw <MOUNT_POINT>"
해설
리눅스 파일시스템이 예기치 않게 읽기 전용(Read-only)으로 전환되는 주원인은 커널의 데이터 보호 메커니즘입니다.
/etc/fstab에 명시된 errors=remount-ro 옵션(ext4 기본 동작)에 의해, 디스크 I/O 장애, 저널링 블록 손상, 메타데이터 불일치 발생 시 커널이 파일시스템 무결성을 지키기 위해 추가 쓰기를 차단하고 읽기 전용으로 자동 격리합니다.
1. 원인 파악 (dmesg 및 스마트 디스크 진단)
단순한 파일시스템 메타데이터 불일치인지, 물리 디스크/SAN 연결 단절인지 커널 로그를 확인합니다.
# 파일시스템 및 스토리지 관련 커널 에러 로그 확인
$ sudo dmesg -T | grep -E -i 'error|I/O|buffer|journal' | tail -n 20
# 스마트 디스크 상태 및 하드웨어 이상 점검 (SATA/NVMe)
$ sudo smartctl -H /dev/sdb
-
Buffer I/O error또는blk_update_request: I/O error가 연속 출력된다면 물리 케이블 불량, 컨트롤러 장애, 스토리지 볼륨 언마운트 가능성이 큽니다. -
EXT4-fs error (device ...): Remounting filesystem read-only만 단발성으로 나타난다면 저널 손상이나 일시적 메타데이터 불일치일 확률이 높습니다.
2. 읽기/쓰기(rw) 재마운트 시도
스토리지 하드웨어가 정상화되었거나 일시적 오류인 경우, 시스템 재부팅 없이 마운트 옵션을 갱신하여 쓰기 가능 상태로 복귀시킵니다.
# 대상 마운트 경로 재마운트 (예: /data)
$ sudo mount -o remount,rw /data
# 루트(/) 파일시스템이 ro로 잠겼을 경우
$ sudo mount -o remount,rw /
- 재마운트 성공 후 touch /data/.test && rm -f /data/.test로 쓰기 테스트를 수행합니다.
3. 디바이스 사용 중(Device is busy) 잠금 프로세스 해제
재마운트나 오프라인 fsck가 필요할 때 프로세스가 파일/디렉토리를 쥐고 있으면 작업이 실패합니다.
# 특정 마운트 경로를 사용 중인 프로세스 목록 확인
$ sudo lsof +f -- /data
# 또는
$ sudo fuser -vm /data
# 프로세스 안전 종료 후 강제 종료 (필요 시)
$ sudo fuser -km /data
4. 주요 원인 및 조치 방안
| 원인 유형 | 세부 상황 | 조치 방안 |
| 파일시스템 메타데이터 불일치 | 비정상 종료 또는 저널 손상 감지로 errors=remount-ro 발동 | mount -o remount,rw 시도, 점검 시간에 언마운트 후 fsck 수행 |
| 물리 스토리지 I/O 타임아웃 | 케이블 불량, SAN/NFS 네트워크 일시 단절, 디스크 배드섹터 | 스토리지 경로 복구 확인 후 remount,rw, 지속 시 디스크 교체 |
| RAID 볼륨 강등(Degraded) | 하드웨어 RAID 컨트롤러의 드라이브 페일오버 중 일시 잠금 | RAID 컨트롤러 상태 확인(megacli, storcli), 핫스페어 리빌드 확인 |
| fstab 설정 오류 | 부팅 옵션에 기본값으로 ro가 명시되었거나 UUID 매핑 오류 | /etc/fstab 점검 후 defaults,rw,errors=remount-ro로 옵션 수정 |
주의사항
1. 마운트된 상태에서 fsck 직접 실행 금지
mount -o remount,rw가 실패할 때 파일시스템 정밀 복구를 위해 fsck를 사용해야 합니다.
그러나 마운트되어 있는(특히 쓰기 동작 중인) 파티션에 fsck를 강제로 실행하면 inode 구조와 메타데이터가 영구 파괴될 수 있습니다. 반드시 해당 마운트 포인트를 언마운트(umount /data)한 뒤 fsck -y /dev/sdb1을 실행해야 합니다.
# 언마운트 후 단독 fsck 실행 절차
$ sudo umount /data
$sudo fsck -y /dev/sdb1$ sudo mount -a
2. 루트(/) 파티션의 복구 불가 상태 대비
루트 파일시스템(/) 자체가 물리 디스크 불량으로 ro 상태가 되고 remount,rw가 거부되는 경우, 실시간 런타임 내 조치가 제한됩니다.
이때는 커널 메모리에 로드된 sync를 통해 최대한 잔여 버퍼를 플러시하고, 즉시 싱글 유저 모드(Rescue Target)로 진입하거나 라이브 USB/ISO로 부팅하여 오프라인 점검 및 데이터 백업을 수행해야 합니다.
# 긴급 싱글 유저 모드 전환
$ sudo systemctl rescue