服务器文件系统变成只读怎么办?Linux Read-Only故障原因排查与修复方法

一、症状:服务器"拒绝"一切写入
典型表现一串连锁反应:网站表单提交失败、数据库写操作报错、touch一个新文件提示Read-only file system、想创建目录也是同样报错——但读取完全正常,系统看起来还"活着"。
这不是黑客也不是权限问题,而是Linux文件系统的自保护机制:内核检测到底层IO错误(磁盘坏道、超时、阵列异常)后,为防止数据进一步损坏,把文件系统强制切到只读模式。它是在救你的数据,但业务已经停摆,需要按流程处理。
二、三步排查定位原因
第一步:确认哪些分区只读了
mount | grep ' ro,' # 列出只读挂载的分区
touch /data/test.txt # 确认写入失败的分区范围
只读的是数据盘还是根分区,处理策略完全不同(根分区只读连日志都写不进去,要更谨慎)。
第二步:看内核日志找原始错误
dmesg | tail -50 # 重点找 I/O error / blocked for more than 120 seconds
journalctl -k | grep -i error | tail -20
日志里的关键词指向三种根因之一:
| 日志特征 | 根因 | 危险度 |
|---|---|---|
| I/O error + 设备名(sdb等) | 磁盘/阵列硬件故障 | 高 |
| EXT4-fs error (inode...) 重试后成功 | 文件系统元数据损坏 | 中 |
| SCSI timeout / reset | 链路/阵列卡/盘异常 | 中-高 |
第三步:核实磁盘健康
SMART是硬件故障的照妖镜:
smartctl -H /dev/sdb # 整体健康结论
smartctl -A /dev/sdb # 看重分配扇区/待定扇区
SMART指标异常或dmesg明确指向磁盘的,先保护数据再谈修复——下文第四节。SMART完整解读见服务器硬盘故障排查与数据恢复完整指南:从SMART预警到RAID重建。
三、临时恢复(remount)的用法与前提
文件系统本身没坏、只是被内核切了只读(比如阵列卡短暂超时后已恢复)的情况,可以在线重挂载:
mount -o remount,rw /data
执行前提:dmesg里错误没有持续刷屏。如果remount后几分钟又变只读,说明底层错误还在,别反复折腾——继续第四节的正式修复。这种"反复切换"是磁盘加速死亡的典型行为,参照服务器硬盘咔咔响是什么故障里的处置原则处理。
四、正式修复:fsck的执行流程
文件系统损坏(ext4日志错误、元数据不一致)需要fsck修复。执行前三个动作:
- 备份数据(还能读就是好事——rsync把重要数据先拖到另一台机器/NFS,fsck有小概率加重损伤,备份是保险绳)
- 卸载分区:
umount /data(根分区则进救援模式/单用户,或用LiveCD启动) - 跑fsck:
fsck -y /dev/sdb1(-y自动应答修复项;输出关注被清掉的文件/目录报告)
修复完挂载回来,用dmesg和业务写入验证稳定。fsck修复过程中被截断的文件会进入lost+found目录,重要数据可以从那里翻找。数据备份优先的完整方法论见企业数据备份策略:3-2-1备份原则与服务器备份方案设计。
五、硬件故障场景:修盘不如换盘
排查结论指向硬盘本身(SMART报警/异响/阵列降级)时,正确顺序:
- 单盘系统盘:立即整机停机保护,用救援介质把数据拷出,然后换盘重装
- RAID阵列中的盘:确认槽位→热插拔换盘→重建,流程见服务器RAID重建与恢复操作实战手册:RAID5/6/10掉盘恢复全流程
- 阵列卡/链路问题:检查RAID卡日志和BBU状态(缓存电池异常也会引发阵列行为异常,见服务器RAID卡缓存电池(BBU)故障怎么办?)
硬件故障的系统性诊断(内存、电源、网卡全维度)参考服务器故障排查完全指南:CPU、内存、硬盘、电源、网卡常见硬件故障诊断与处理。
六、预防:三个日常习惯
- 监控磁盘错误计数:把dmesg里的IO error和SMART重分配扇区纳入告警(方案见企业服务器性能监控与告警体系搭建),在文件系统切只读之前拿到预警
- 重要分区不用单盘:数据盘至少RAID1,硬件冗余是文件系统稳定的地基(选型见服务器RAID详解)
- 常规备份不缺席:只读故障里"能读"是万幸,备份是应对"读不了"的底气
七、结语
文件系统只读是服务器在喊"底层出问题了,我先停笔保护现场"。处理心法:先看dmesg定位根因→能读就先备份数据→硬件问题走换盘重建、逻辑损坏走fsck→修复后用监控盯住复发。最忌讳两个动作:不管原因反复remount硬顶业务,以及不做备份直接fsck赌运气。

