mount | grep ' ro,'
dmesg -T | grep -E 'EXT4-fs error|I/O error' | tail -20
sudo smartctl -a /dev/vdb | grep -E 'Reallocated|Health'
touch /data/t && rm /data/t

应用突然大面积写失败,报 Read-only file system,df 里那个分区还挂着,mount 输出多了 ro 标记,重启后能写但过几天又复发,说明底层一直有问题。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:ext4 遇到 IO 错误或者元数据不一致时会把文件系统重新挂成只读来保护数据,根因多半在磁盘坏道、阵列掉盘或者云盘被限流,只看应用日志没用。

这次卡住的地方就在「文件系统只读」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。同一份配置存在多处的,先确认改的是被加载的那一份。

处理上按这个顺序:在 dmesg 里搜 ext4 错误和 IO error 定位设备 第一条报错最关键 别只看结尾那条;用 smartctl 看盘的健康状态与重映射扇区数 数值异常就该换盘;先摘流量备份数据再卸载修复 不要直接 remount rw 那样只会再挂一次。

确认没问题再收工,分区不再带 ro 标记 手工写入成功 且 dmesg 没有新的 ext4 错误 观察两天 记录换盘时间。

作者 9823189