文件系统只读有两种:卷只读和 Linux 只读。卷只读是存储侧控制,能恢复;Linux 只读是存储 IO 错误触发的保护机制,remount 基本失败,只能重启。
现象
虚拟机文件系统变成只读:
root@host:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 20G 0 disk
└─vda1 253:1 0 20G 0 part /
vdb 253:16 0 4G 0 disk [SWAP]
vdc 253:32 0 100G 0 disk
root@host:~# touch test
touch: cannot touch 'test': Read-only file system
同事说另一个类型的虚拟机只读了能恢复,这个怎么恢复。
排查
先要分清是"卷只读"还是"Linux 只读",两者恢复方式完全不同。
再确认存储是否中断过,因为 Linux 只读通常由存储 IO 错误触发。
根因
同事那个能恢复,是因为不是 Linux 只读,而是卷只读。那个卷是我们公司自己的存储,能控制其读写权限。
但这里 Linux 只读,一般是存储读写有 IO error,触发了 Linux 保护机制,系统只读。
我问他是不是存储中断过,他说是的。
这种 Linux 只读没法恢复,remount 基本失败,只能重启虚拟机。
小结
- Linux 文件系统只读,通常是存储 IO 错误触发的保护机制;
- 卷只读(存储侧控制)可以恢复,Linux 只读(IO 错误触发)基本无法 remount 恢复;
- 排查时先确认是"卷只读"还是"Linux 只读",两者恢复方式完全不同;
- Linux 只读只能重启虚拟机恢复。