Linux服务器创建文件报Read-only file system,只读了怎么救
文件服务器跑得好好的,某天 mkdir 一个新目录,终端甩回一句 Read-only file system;想改配置、想删日志,同样写不进去。机器还在线、共享还能读,就是"只进不出"。这不是权限问题——权限只挡个别目录,这里是 Linux 内核把整个文件系统挂成了只读。先分清为什么只读,再决定怎么动手。
原因分析
一是被人主动挂成只读:/etc/fstab 里写了 ro,或某次手动挂载用了 mount -o ro。备份盘、冷数据盘常用,重启后依旧只读,属"设定如此",不算故障。
二是内核保护性降级:ext4、xfs 遇到严重错误——磁盘读写超时、日志写入失败——会把文件系统重挂为只读,dmesg 里能看到 EXT4-fs error、remounting read-only 一类记录。这是系统弃车保帅:宁可让你读数据,也不让错误状态把数据越写越坏。
三是硬件故障前兆:坏道扩散、RAID 卡电池掉电后缓存降级、数据线接触不良,都会先以只读加 I/O 错误的形式露头。这不是保护,是盘真的在坏。
三层来路,处置方向完全不同:第一层改配置,第二层恢复挂载,第三层先保数据。先诊断、后动手。
分步解决
- 定位是哪块文件系统只读。mount 输出里找选项带 ro 的那一行,或用 df -h 从写不进的路径反查挂载点;顺手翻 /etc/fstab 对应行——本来写了 ro 的,是配置问题,改掉重挂即结案。
- 查 dmesg 分层。看最近一百行里有没有 I/O error、SCSI timeout、文件系统错误记录。没有硬件报错、只有 ro 标记,大概率是误挂或旧降级残留;有一串 I/O error,按第三层硬件故障走,千万别急着改回读写。
- 无硬件报错的恢复。确认数据有备份后,mount -o remount,rw 加挂载点重新挂载为读写;fstab 里误写的 ro 同步改回 defaults。改完 touch 一个测试文件,写入正常才算恢复。
- 有 I/O error 的处置。第一时间停掉写入业务:只读状态下数据还能读,先把重要数据完整拷出去。再用 smartctl 查 SMART、翻 RAID 卡日志,判断是盘、线还是卡的问题,该换就换。反复重启碰运气是大忌——每次重启都可能让故障盘彻底掉线。
- 文件系统修复。错误日志指明文件系统本身受损的,要在卸载状态或救援模式下跑 fsck;在线业务盘不要直接修,停业务、做完整备份再动手,修复时长按盘容量预留窗口。
预防
fstab 每次变更都留一行备注,谁改的、为什么改,翻文件就有答案;监控里加上 dmesg 关键字告警,I/O error 第一次出现就有人知道。我们贵州诚鑫致达科技接手机房,习惯先给在役硬盘做一轮 SMART 底数采集,只读警报响起时手里有对照数据,是降级保护还是盘在恶化当场能分层——判断盘况这件事,有数据比有运气可靠。