Linux 磁盘变只读时,应先通过 dmesg、mount、smartctl 定位原因;若无硬件故障可 remount,rw 临时恢复;否则需卸载后 e2fsck 修复;硬件异常须更换磁盘或重构 RAID;必要时调整 fstab 中 errors 策略。

如果 Linux 系统中的磁盘突然变为只读状态,业务进程将无法写入数据,导致服务中断或数据写入失败。以下是针对该异常状态的恢复实践步骤:
一、确认只读状态及触发原因
系统进入只读模式通常由内核检测到文件系统错误(如 ext4 元数据损坏)、底层设备故障(如坏扇区、RAID 降级)或手动挂载为 ro 选项所致。需先定位根本诱因,避免盲目修复引发二次损伤。
1、执行 dmesg -T | grep -i “readonly|error|ext4|I/O” 查看内核日志中最近的 I / O 错误或强制只读提示。
2、运行 mount | grep “$(df . | tail -1 | awk ‘{print $1}’)” 确认当前挂载选项是否含 ro。
3、使用 smartctl -a /dev/sdX(替换 sdX 为对应磁盘)检查 SMART 健康状态,重点关注 Reallocated_Sector_Ct、Current_Pending_Sector 等关键属性值。
二、临时解除只读挂载(仅限紧急业务恢复)
若确认磁盘物理层无硬故障且文件系统结构完整,可尝试重新以读写方式挂载,使业务快速恢复。此操作不修复底层问题,仅作为临时规避手段。
1、执行 mount -o remount,rw /mount/point(将 /mount/point 替换为实际挂载路径)。
2、立即验证写入能力:运行 touch /mount/point/test_rw_$(date +%s) && rm /mount/point/test_rw_*。
3、若报错 “Operation not permitted” 或 “Read-only file system”,说明内核已锁定只读状态,需进入下一步。
三、强制卸载并执行文件系统检查
当 remount 失败时,必须在卸载状态下运行 fsck 修复文件系统逻辑错误。操作前确保无进程占用目标分区,且不可对已挂载的 ext 系列文件系统直接执行 - f 参数强检。
1、查找占用进程:lsof +D /mount/point 或 fuser -v /mount/point,按提示终止相关进程。
2、卸载分区:umount /mount/point;若提示“device busy”,追加 -l(lazy)参数强制分离。
3、执行检查与修复:e2fsck -y -f /dev/sdXN(sdXN 为对应分区,如 sda1);- y 自动确认所有修复,- f 强制检查即使标记为 clean。
四、处理底层存储硬件异常
若 dmesg 或 smartctl 显示磁盘存在介质错误、链路重置或 RAID 阵列异常,则文件系统修复无效,必须优先处置硬件层问题,否则重启后仍将触发只读保护。
1、对于单盘环境:替换故障磁盘,使用 ddrescue 从原盘抢救数据至新盘,命令为 ddrescue -d -r3 /dev/sdX /dev/sdY /path/to/logfile。
2、对于软 RAID(mdadm):cat /proc/mdstat 查看阵列状态;若为 degraded,用 mdadm –manage /dev/md0 –add /dev/sdZ 添加新盘并等待重构完成。
3、对于硬件 RAID 卡:登录 RAID 管理界面(如 MegaCLI 或 storcli),执行 storcli /c0/e0/s0 show 检查物理盘状态,更换 Predictive Failure 标记的硬盘。
五、禁用文件系统自动只读保护机制
ext4 默认启用 errors=remount-ro 策略,一旦检测到错误即自动切换为只读。在已排除硬件风险且需延长业务容忍窗口时,可临时修改该行为,但须同步加强监控与巡检频次。
1、编辑 /etc/fstab,找到对应分区行,将挂载选项中的 errors=remount-ro 替换为 errors=continue 或 errors=panic(后者更严格,崩溃而非静默只读)。
2、重新加载 fstab 配置:mount -o remount /mount/point。
3、验证生效:findmnt -n -o OPTIONS /mount/point | grep errors,输出应包含修改后的 errors 值。






























