VPS报Read-only file system怎么办?先保留现场,别急着强制重新挂载

只读不是普通权限报错:先定位挂载点、保存内核日志,再决定是否离线修复
发布于
9

VPS提示Read-only file system,表示当前写入目标所在的文件系统以只读方式提供,应用因此无法创建、修改或删除文件。它不等于“磁盘空间满了”,也不能靠给目录加chmod 777解决。

最重要的第一步是停止反复写入和重启,保留时间、报错、挂载状态与内核日志。若文件系统因错误或存储异常转为只读,直接强制改回读写可能掩盖证据,甚至扩大数据损坏。

先确认是哪一个挂载点只读

同一台Linux VPS可以有根分区、数据盘、容器卷、网络文件系统和临时文件系统。应用报错的路径属于哪个挂载点,决定后续处理对象。可先做只读检查:

findmnt -T /出现报错的路径
findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS
lsblk -f
df -hT
df -i

findmnt -T用于定位某个路径对应的挂载;OPTIONS中出现ro说明当前是只读挂载,rw表示读写。df同时用于排除容量或inode耗尽,但空间不足通常会报告No space left on device,不是同一个错误。

先排除“本来就应该只读”的情况

并非所有ro都代表故障。镜像、安装介质、某些容器根层、安全加固挂载或显式使用ro选项的数据卷,本来就可能只读。检查/etc/fstab、容器编排配置和最近变更,确认该挂载是否设计为可写。

还要区分应用路径:程序可能写错到只读的容器层或系统目录,而真正的数据卷挂在另一个位置。此时修复方向是更正路径或卷映射,不是改变整个主机的挂载权限。

保存内核与启动日志

如果原本可写的文件系统突然只读,重点检查故障时间附近的内核信息:

journalctl -k --since "30 minutes ago"
dmesg -T
journalctl -p err..alert --since "30 minutes ago"

关注I/O error、filesystem error、buffer、reset、timeout、EXT4、XFS、NVMe、virtio或块设备相关信息。命令输出可能包含主机名、设备标识和业务路径,提交工单前应脱敏,但不要删掉时间戳和连续上下文。

dmesg缓冲区会滚动,重启也可能让现场变化;因此先保存证据,再决定是否停机或重启。若控制台同时提示宿主存储故障,应优先联系VPS服务商,并提供实例、时间和只读检查结果。

为什么不建议立刻执行remount,rw

mount -o remount,rw只是请求把挂载改回读写。若只读来自明确配置,它可能改变安全边界;若只读来自文件系统错误或底层I/O异常,命令可能失败,或者短暂成功后再次只读。根因没有解除时继续写入,不是可靠恢复。

只有在确认设备健康、文件系统状态允许、挂载本应读写且已经有可恢复备份后,才应按照对应文件系统和发行版文档执行恢复。生产环境中,先在控制台或救援系统准备回退路径。

EXT4与XFS不能套用同一条修复命令

文件系统 常见检查工具 重要边界
ext4 fsck/e2fsck 通常应对未挂载文件系统操作;根分区常需救援环境或维护启动
XFS xfs_repair 使用XFS专用工具;不要把ext4命令照搬到XFS
网络文件系统 客户端挂载、服务端导出与网络日志 只修客户端权限可能无效,需检查远端服务与连接
容器卷 宿主挂载和卷配置 先判断只读来自容器参数还是宿主文件系统

不要对仍在读写挂载的文件系统盲目运行修复工具,也不要在没有备份的情况下使用不了解的强制参数。云盘快照能提供恢复点,但快照是否应用一致、能否跨盘恢复,取决于平台能力和业务写入状态。

根分区只读时的恢复思路

  1. 通过云控制台确认实例、磁盘和近期平台事件,保留屏幕与时间;
  2. 若SSH仍可用,只执行必要的只读检查并导出关键日志;
  3. 停止数据库、容器或持续写入任务,避免错误重试淹没现场;
  4. 创建符合平台规则的快照或备份;若存储疑似损坏,先确认快照风险;
  5. 进入救援环境、维护模式或把系统盘挂到另一台授权实例;
  6. 根据实际文件系统使用对应的离线检查与修复工具;
  7. 恢复挂载后先做数据与服务校验,再逐项开放写入和流量。

若没有控制台、救援模式或离线挂载能力,不要自行尝试高风险强制修复,应把证据提交服务商处理。

恢复后不能只看“能创建文件”

写入恢复只是第一层。还应验证:

  • 挂载来源、文件系统类型和rw状态是否正确;
  • 内核日志是否继续出现I/O、超时或文件系统错误;
  • 数据库能否完成一致性检查,关键表和近期写入是否完整;
  • 容器卷、上传目录、缓存、日志和备份路径是否都指向预期磁盘;
  • 重启后/etc/fstab或卷配置能否得到相同结果;
  • 监控是否覆盖磁盘错误、容量、inode、延迟和挂载状态。

如果此前还出现dfdu不一致、inode耗尽或已删除文件未释放,可参考VPS磁盘满的分层排查方法;这些问题可能同时发生,但不能用清理大文件替代只读根因诊断。

怎样降低再次发生的影响

把数据盘、系统盘和备份目标分开规划;定期验证备份能否恢复;对内核I/O错误、磁盘延迟、只读挂载和文件系统使用率建立告警;变更fstab、卷映射或磁盘扩容前保存配置和回滚步骤。对数据库等有状态服务,应使用应用一致的备份,而不是只依赖某一时刻的磁盘快照。

结论

Read-only file system是写入路径的文件系统状态信号,不是普通目录权限问题。正确顺序是定位挂载点、确认是否本来只读、保存内核证据、判断文件系统与块设备状态,再在可回退的离线环境中修复。强制重新挂载应是有依据的恢复动作,而不是看到报错后的第一条命令。

常见问题(FAQ)

Read-only file system是权限不够吗?
通常不是普通目录权限问题。它表示写入目标所在文件系统当前为只读;chmod无法把只读挂载变成可写。
可以直接执行mount -o remount,rw吗?
不建议把它作为第一步。若只读来自文件系统错误或底层I/O异常,强制改回读写可能失败或扩大损坏。应先保存日志并确认设备和文件系统状态。
磁盘空间满会报Read-only file system吗?
空间或inode耗尽更常见的报错是No space left on device。两类问题可能同时存在,因此需要分别检查df -h、df -i和挂载选项。
fsck可以在正在挂载的根分区上运行吗?
不应盲目对正在使用的文件系统运行修复。根分区通常需要救援环境、维护启动或离线挂载,并按EXT4、XFS等实际文件系统选择对应工具。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600