文件系统只读有两种:卷只读和 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 只读只能重启虚拟机恢复。