云服务器在运行过程中,偶尔会出现“文件系统变为只读模式”的情况,常伴随无法写入文件、无法启动服务、应用日志无法更新、容器无法映射目录等现象。对许多用户而言,这类问题往往令人困惑,因为表面看起来服务器一切正常,CPU、内存、网络都没问题,但只要执行一次写操作,就会收到 “Read-only file system” 的报错。
只读模式最常见的触发点,是服务器的文件系统出现潜在错误,触发 Linux 内核的保护机制。当磁盘 I/O 报错、文件系统元数据异常或者磁盘硬件行为异常时,系统会将根目录或挂载点切换为只读,以避免继续写入导致更大程度的数据破坏。这种保护逻辑通常由内核日志提示,比如你会在系统中看到类似信息:
EXT4-fs error (device vda1): ext4_journal_check_start:56: Detected aborted journal
EXT4-fs (vda1): Remounting filesystem read-only
一旦触发只读模式,大部分写操作都会立即失败,比如创建文件:
touch test.log
touch: cannot touch 'test.log': Read-only file system
此时继续尝试写入没有意义,因为系统层面已经锁定了写权限。要恢复正常写入,关键在于找到问题根源:是磁盘挂载异常、文件系统损坏、磁盘空间耗尽还是虚拟化环境错误。
在大多数情况下,只读模式来自于文件系统损坏,这是由断电、强制关机、I/O 设备丢失、磁盘不稳定等因素引起。修复第一步通常是卸载文件系统并执行 fsck:
umount /dev/vda1
fsck -y /dev/vda1
对于根目录(/)无法卸载的情况,需要进入单用户模式或在控制台下执行:
fsck -y /
修复完成后,重启服务器即可恢复读写权限。很多用户不知道 fsck 是离线修复文件系统的关键工具,而只依靠重启往往无法解决根源。
有一种更隐蔽的原因是磁盘空间耗尽。许多云服务器在日志暴涨、容器层叠加过多、应用生成大量缓存后,会把根分区挤满。当磁盘空间不足时,EXT4 等文件系统也可能以只读方式保护数据。当你执行 df -h 时会发现:
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 40G 0 100% /
这种情况只需清理文件即可恢复正常写入。常见的清理方式包括:
journalctl --vacuum-size=200M
rm -rf /var/log/xxx.log
docker system prune -af
清理后无需 fsck,只需重新挂载:
mount -o remount,rw /
服务器的挂载参数配置错误,也可能导致系统在重启后以只读方式挂载。例如 /etc/fstab 中语法错误、UUID 不匹配、使用了错误的文件系统类型等,都会让系统无法正常挂载,从而进入只读模式。你可以检查 fstab 是否有错误:
nano /etc/fstab
当存在错误挂载项时,可以在系统启动时按住救援模式,并手动修改后重新挂载。
如果云服务器底层出现磁盘硬件问题,如 SSD 坏块、节点异常、虚拟化底层故障等,也会导致文件系统被强制只读。此类情况通常伴随 dmesg 中大量 I/O 错误:
dmesg | grep -i error
如果你看到磁盘 I/O error、blk_update_request 等报错,并非系统层面能够自行修复,必须提交云服务商工单处理,技术团队可帮你检查宿主机状态或迁移数据。
部分用户会在 Docker 环境中遇到容器挂载目录无法写入,也表现为只读问题。这通常不是容器问题,而是宿主机本身已变成 Read-only。当你在容器内执行:
touch /data/test.txt
报错只读,说明主机目录早已进入只读模式。修复必须从主机层面处理,而不是尝试修改容器配置。
如果你使用的是只读文件系统,例如某些镜像采用 overlay 或 squashfs,那么即使系统正常也无法写入。此类场景主要出现在容器镜像、LiveCD 环境或自定义镜像中。你可以通过检查挂载机制确认:
mount | grep overlay
若类型为 overlayfs,那么底层确实不支持写入,解决方案是创建持久化存储卷或挂载额外的可写目录。
为了避免业务中断,提前监控文件系统健康和磁盘使用至关重要。你可以通过以下机制防止只读模式再次发生:
- 定期执行 SMART 检测(适用于物理机或支持 SMART 的云盘)
- 配置日志轮转,避免日志无限膨胀
- 监控 df、inode 使用情况
- 避免硬关机或异常断电
- 为生产系统准备快照或备份
简单配置如:
logrotate -f /etc/logrotate.conf
能够有效避免磁盘被日志撑满。
云服务器进入只读模式是一个多因一果的综合问题,但本质都是为了保护数据。理解背后的机制,可以帮助快速定位故障并安全修复。无论是普通站长、运维人员还是开发者,都应该掌握 fsck 修复方法、磁盘清理方法以及 fstab 检查方法。同时,在使用容器环境时,更要注意底层存储的健康状态,因为容器的数据写入最终都依托于宿主机文件系统。
推荐文章
