服务器文件系统变为“只读” (Read-Only) 的排查与解决方法
当服务器突然变成只读系统(Read-only file system)时,通常意味着操作系统检测到了文件系统损坏或硬件故障,为了防止数据进一步损坏,Linux 内核会自动将文件系统挂载为只读模式。
为什么系统会变成只读?
- 文件系统错误:由于非法关机、掉电或内核崩溃导致的文件系统元数据损坏。
- 磁盘硬件故障:硬盘出现坏道或存储控制器失效。
- 挂载配置问题:
/etc/fstab中的配置项(如errors=remount-ro)在检测到错误时触发了自动只读。 - 虚拟化问题:如果是云服务器,可能是底层存储网络波动或宿主机存储故障。
第一步:快速确认状态
在尝试修复前,首先确认当前挂载状态和错误日志。
- 确认挂载状态:
运行mount | grep " / ",检查输出中是否包含(ro,(ro 代表 read-only)。 - 查看内核日志:
运行dmesg | grep -i "error"或dmesg | tail -n 100。
重点关注:出现I/O error、EXT4-fs error或Journal commit I/O error等关键字。
第二步:尝试临时恢复(重新挂载)
如果这只是一个偶发性的软件错误,你可以尝试将文件系统重新挂载为读写模式。
- 执行命令:
mount -o remount,rw / - 注意:这只是临时方案,如果底层硬件有损坏,重新挂载后可能会在短时间内再次变回只读,甚至导致数据丢失。
第三步:深度修复(文件系统检查)
如果重新挂载失败或问题反复出现,必须进行 fsck (File System Check)
修复。
警告:绝对不能在挂载状态下对读写分区运行 fsck,否则会导致数据彻底损坏。
-
方案 A:重启进入单用户模式/救援模式
- 重启服务器,在 GRUB 引导界面进入 Single User Mode 或 Rescue Mode。
- 执行修复命令(假设根分区是
/dev/sda1):
fsck -y /dev/sda1 - 修复完成后,重启系统:
reboot
-
方案 B:强制在下次启动时检查
如果无法进入救援模式,可以尝试创建强制检查标志文件(前提是当前还能执行写操作):touch /forcefsck
然后重启服务器。
第四步:排查根本原因与预防
为了防止问题再次发生,请检查以下内容:
- 检查
/etc/fstab配置:
检查根分区的挂载选项,如果包含errors=remount-ro,这意味着系统在发现任何错误时都会立即变为只读。 - 检查磁盘健康状态 (SMART):
安装smartmontools并运行:
smartctl -a /dev/sda
重点查看 Reallocated_Sector_Ct(重映射扇区数),如果数值很高,说明硬盘物理损坏,请立即备份数据并更换硬盘。 - 检查磁盘空间:
虽然磁盘满通常不会导致只读,但在某些极端情况下,日志文件填满分区可能导致系统异常,使用df -h确认。
总结处理流程
- 查日志 $rightarrow$
dmesg确认是否为 I/O 错误。 - 试恢复 $rightarrow$
mount -o remount,rw /尝试临时恢复。 - 强修复 $rightarrow$ 卸载分区 $rightarrow$
fsck修复文件系统。 - 根治 $rightarrow$ 检查硬件 SMART 信息 $rightarrow$ 必要时更换硬盘。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/492686.html



