rm: cannot remove 'file': Read-only file system
파일의 권한 문제가 아니라 파일시스템 전체가 읽기 전용으로 마운트된 상태다. 원인을 확인하지 않고 곧바로 재마운트하면 손상을 키울 수 있다. 커널이 I/O 오류를 보고 데이터를 지키려고 스스로 바꾼 경우가 가장 많기 때문이다.
# 해당 경로가 어느 장치에 속하는지, 옵션이 무엇인지
findmnt -T /data
mount | grep ' / '
df -h /data
/dev/sda2 on / type xfs (ro,relatime)
# 커널이 남긴 I/O 오류
sudo dmesg -T | grep -iE 'i/o error|remount|read-only|ext4-fs|xfs'
sudo journalctl -k -b | grep -iE 'error|read-only'
| 원인 | 단서 |
|---|---|
| 디스크·컨트롤러 I/O 오류 | dmesg 에 I/O error, Buffer I/O error, SCSI 오류 |
| 파일시스템 손상 | EXT4-fs error, XFS ... corruption, Remounting filesystem read-only |
fstab 에 ro 로 적혀 있음 |
dmesg 에 오류가 없고 /etc/fstab 에 ro |
| NFS 서버 쪽 문제 | 마운트 종류가 nfs. export 옵션이나 서버 디스크 상태 |
| 컨테이너의 읽기 전용 볼륨 | ConfigMap · Secret · projected 볼륨은 원래 읽기 전용 |
일시적이거나 설정 문제다. 다시 읽기 쓰기로 마운트한다.
sudo mount -o remount,rw /data
루트 파일시스템이면 영향이 크므로 서비스 상태를 확인하고 진행한다.
sudo mount -o remount,rw /
fstab 에 ro 가 적혀 있었다면 고치고 검증한다.
sudo vi /etc/fstab
sudo mount -a
findmnt --verify
remount 로 덮지 않는다. 데이터를 먼저 빼낸 뒤 점검한다.
# 장치 상태
sudo smartctl -H /dev/sda
sudo smartctl -a /dev/sda | grep -iE 'reallocated|pending|uncorrect'
# 읽을 수 있는 동안 백업
sudo rsync -aHAX --ignore-errors /data/ /backup/data/
점검은 마운트를 해제한 상태에서 한다. 마운트된 파일시스템에 검사를 돌리면 더 망가진다.
sudo umount /data
# ext4
sudo fsck.ext4 -f /dev/sdb1
# XFS — fsck 가 아니라 전용 도구를 쓴다
sudo xfs_repair /dev/sdb1
xfs_repair 는 마운트된 장치를 거부한다. 로그 재생이 필요하면 한 번 마운트했다가 해제한 뒤 다시 돌린다. 그래도 안 되면 -L 로 로그를 버릴 수 있지만 로그에 있던 변경은 사라진다. 마지막 수단이다.
루트 파일시스템이면 복구 모드나 설치 미디어의 rescue 로 부팅해 작업한다.
클라이언트에서 읽기 전용을 풀 수 없다. 서버 쪽 /etc/exports 와 디스크 상태를 본다.
mount | grep nfs
sudo exportfs -v # 서버에서
서버가 응답하지 않아 멈춘 상태면 강제로 뗀다.
sudo umount -f -l /mnt/nfs
findmnt -T /some/path -o TARGET,SOURCE,FSTYPE,OPTIONS
awk '$2=="/some/path"' /proc/mounts