- 环境:VPS 上跑着 Docker + MySQL 容器,本来好好的,有天突然容器死活停不了/进不去/各种崩。
- 报错:提示 “Read-only file system”,
touch
也写不进,Docker 重启失败。 - 结论:根分区出现文件系统错误,系统为了保护数据,强行把
/dev/vda1
挂载成只读,导致一切读写操作 GG。
处理思路
1. 确认真的只读了吗?
df -h
、df -i
看磁盘容量/inode,还蛮富裕,但不能高兴太早。touch /var/lib/docker/testfile
直接跳 “Read-only file system” 错误。dmesg | tail
里清清楚楚写着:说明真的是文件系统炸了。
2. 进入救援模式 (Rescue/Recovery Mode)
因为根分区已经被系统“只读”挂载,在正常环境下无法 fsck
。
- 不同 VPS 的救援模式入口略有不同,一般在云面板上找 “Rescue Mode” 或 “Recovery Mode”。
- 重启后 SSH 登录到救援系统,根分区
/dev/vda1
此刻只作为一块数据盘/甚至可能没自动挂载。
3. fsck 修复文件系统
在救援模式里,对该分区执行:
-f
强制彻底检查。-y
遇到错误自动修复(省得你一个个按 Y 答应它)。- 如果日志里出现 “FILE SYSTEM WAS MODIFIED”,恭喜你成功治愈它了。
4. 重启回正常系统
- 在救援系统里敲
reboot
退出救援模式(或在面板里关掉“Rescue Mode”)。 - 系统正常引导以后,再次 SSH 进入。
5. 验证是否读写OK
回到正常系统后:
mount | grep '/dev/vda1'
看是否挂载了rw
而非ro
。touch /var/lib/docker/testfile
测试一下能不能写,不再报只读就成功啦。
6. 重启 Docker 并检查容器
systemctl start docker
docker ps -a
看看容器列表都还在不在。- 如果有容器停止了,就
docker start <容器名>
;如果要进容器,则docker exec -it <容器名> bash
。 - MySQL 等应用基本就能复活啦!
注意事项
-
先备份重要数据
虽然在只读状态下读取问题不大,但修复前最好把关键文件拷走,万一坏块严重,修复过程可能出现意外损坏。 -
观察磁盘健康
如果频繁出现“EXT4-fs error”之类,可能是硬盘本身真坏了,要么联系云厂商,要么升级换盘。 -
适度监控
一旦出现只读,/var/log
也写不进日志,会给系统运维带来大麻烦。可以给磁盘跑跑健康检查,比如smartctl
(硬盘支持的情况下)或者云厂商自带的体检工具。
小结
当 VPS 提示 “Read-only file system”,十有八九是分区文件系统出错,系统自动“帮”你启用只读保护。修复要点就是进救援模式下跑 fsck
,然后重启。Docker/MySQL 这类依赖写操作的家伙,才能继续愉快地蹦跶。
以上就是“VPS 文件系统只读 + Docker/MySQL 僵尸大作战”的完整经验贴啦。希望能帮到和你境况相似的小伙伴们,一起远离“读写阻塞”的阴影,恢复幸福快乐的远程运维生活!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容