根分区为什么变只读
文件系统的挂载选项里通常带有出错即重挂只读的设置,这是内核的自保机制:一旦检测到磁盘 I/O 错误、存储链路中断或文件系统元数据不一致,就立刻停止写入,避免损坏范围继续扩大。因此看到根分区变只读,要把它理解成一个症状,而不是故障本身。
处置顺序
先确认底层是否真的有问题:内核日志里的 I/O 错误、磁盘健康状态、逻辑卷与阵列状态。链路或硬件异常时,正确动作是备份数据并安排更换硬件;只有在确认底层恢复健康后,才考虑重新挂载为可读写,并观察是否再次触发。
基本信息
| 常见表现 | 所有写入报只读文件系统 |
|---|---|
| 内核线索 | dmesg 中的 I/O 错误与重挂只读记录 |
| 检查对象 | 磁盘健康、逻辑卷状态、阵列状态、存储链路 |
| 恢复动作 | 底层正常后重新挂载为读写 |
典型使用场景
- 业务突然报无法写文件,排查发现根分区已变成只读
- 机房断电或存储断链后重启,系统进入只读状态
- 虚拟机底层存储抖动,guest 触发只读保护
- 定期检查内核日志中的 I/O 错误,提前发现劣化磁盘
- 更换硬盘或修复链路后确认文件系统可正常读写
取证
取证
mount | grep ' / ' # 查看根分区挂载选项
findmnt -no OPTIONS / # 只取选项字段,看是否带 ro
dmesg -T | grep -iE 'I/O error|remount|read-only' | tail -20
smartctl -H /dev/sda 2>/dev/null # 磁盘健康
pvs; vgs; lvs # 根在逻辑卷上时看卷与卷组状态恢复
恢复
mount -o remount,rw / # 底层正常时恢复写入
touch /root/write-test && rm -f /root/write-test # 写测试验证
# 文件系统层报错时安排停机窗口离线修复:
# ext4: e2fsck -f /dev/mapper/vg0-lv_root
# XFS : xfs_repair <设备>,均需先卸载线索与含义
| 线索 | 含义 | 动作 |
|---|---|---|
| 内核报 I/O 错误 | 底层读写失败,硬件或链路异常 | 备份数据,检查磁盘与链路 |
| 出现 remount 只读记录 | 内核已触发保护机制 | 先查根因,不要急于改回读写 |
| 逻辑卷状态异常 | 卷组或卷损坏或缺失 | 检查物理卷与阵列状态 |
| 磁盘健康状态报警 | 介质劣化 | 申请更换并迁移数据 |
| 重新挂载后再次只读 | 底层问题未解决 | 停止写入,安排停机处理 |
反复执行重新挂载为读写会持续往劣化磁盘写入,加重损坏并缩短数据抢救时间。出现只读保护时,优先把重要数据备份出去,再按存储层、文件系统层的顺序处理。