记录下服务器开机以后某个分区突然变为 ro(read-only) 状态的解决办法
这是一篇发布于 1413 天前的文章,部分信息可能已发生改变。
背景
今天在盒子里跑了个不知道什么脚本(忘了),自动重启了以后发现根目录(/dev/md2)被内核自动挂载为了ro,并且取消了其他所有的挂载参数。此外,挂载参数的 data=writeback
变 data=ordered
环境
- Ubuntu 18.04
- 内核 4.15.0-140-generic
- 没有更改过 fstab
- 就是简单的重启,没有更换内核、更改内核参数等操作
排查
1. 取消 /etc/fstab
里所有的挂载参数
将 /etc/fstab
里的内容更改为
1 | UUID=XXXX-XXXX-XXXX-XXXX-XXXX / ext4 defaults 0 1 |
成功,开机自动挂载为了 rw,但是挂载参数里的 data 依然是 ordered
2. 查看日志
1 | # dmesg | grep EXT4 |
没有提示,去 stackoverflow 寻找解决办法,最后找到了这样一个帖子。
https://askubuntu.com/questions/197459/how-to-fix-sudo-unable-to-open-read-only-file-system
里面提到了
1 | fsck.ext4 -f /dev/md2 |
将md2挂载为只读,尝试以后失败。
3. 进入 Recsue 再次尝试 fsck
继续尝试
1 | fsck.ext4 -f /dev/md2 |
等待许久,reboot
之后问题解决。
推测
在执行脚本之前或者是在执行脚本以后重启的时候文件系统损坏了,则 kernel 会将文件系统挂载为只读。
解决办法就是修复文件系统,使用 fsck.ext4
来修复 ext4 文件系统。
后续的一个小毛病
1 | root@XiaoCai-SX63 ~ # mount | grep /dev/md |
其他的分区都会显示 data=xxxxxxxx
唯独 /dev/md2
不显示。
解决
先查看文件被系统挂载为了啥模式
1 | root@XiaoCai-SX63 ~ # dmesg | grep "filesystem" |
看日志可以看出,三个分区都是 writeback
模式
查看默认模式
1 | root@XiaoCai-SX63 ~ # tune2fs -l /dev/md2 | grep "Default mount options" |
/dev/md2
的默认挂载模式是 writeback ,/dev/md1
的默认挂载模式是用户拓展模式
推测是因为默认挂载模式与现有挂载模式一致,故不在 mount
中显示挂载模式
移除 journal_data_writeback
1 | root@XiaoCai-SX63 ~ # tune2fs -o^journal_data_writeback /dev/md2 |
解决。
感谢
Telegram: @breakertt