Loading... <div class="tip share">请注意,本文编写于 1279 天前,最后修改于 1279 天前,其中某些信息可能已经过时。</div> # 背景 今天在盒子里跑了个不知道什么脚本(忘了),自动重启了以后发现根目录(/dev/md2)被内核自动挂载为了ro,并且取消了其他所有的挂载参数。此外,挂载参数的 `data=writeback` 变 `data=ordered` 环境 - Ubuntu 18.04 - 内核 4.15.0-140-generic - 没有更改过 fstab - 没有更换内核、更改内核参数 - 就是简单的重启 # 排查 ### 1. 取消 `/etc/fstab` 里所有的挂载参数 将 `/etc/fstab` 里的内容更改为 ```bash UUID=XXXX-XXXX-XXXX-XXXX-XXXX / ext4 defaults 0 1 ``` 成功,开机自动挂载为了 rw,但是挂载参数里的 data 依然是 ordered ### 2. 查看日志 ```bash # dmesg | grep EXT4 [ 4.570900] EXT4-fs (md2): mounted filesystem with ordered data mode. Opts: (null) [ 7.113451] EXT4-fs (md2): re-mounte. Opts: nobarrier ``` 没有提示,去 stackoverflow 寻找解决办法,最后找到了这样一个帖子。 https://askubuntu.com/questions/197459/how-to-fix-sudo-unable-to-open-read-only-file-system 里面提到了 ```bash fsck.ext4 -f /dev/md2 ``` 将md2挂载为只读,尝试以后失败。 ### 3. 进入 Recsue 再次尝试 fsck 继续尝试 ```bash fsck.ext4 -f /dev/md2 ``` 等待许久,`reboot` 之后问题解决。 # 推测 在执行脚本之前或者是在执行脚本以后重启的时候文件系统损坏了,则 kernel 会将文件系统挂载为只读。 解决办法就是修复文件系统,使用 `fsck.ext4` 来修复 ext4 文件系统。 # 后续的一个小毛病 ```bash root@XiaoCai-SX63 ~ # mount | grep /dev/md /dev/md2 on / type ext4 (rw,stripe=512) /dev/md0 on /boot type ext3 (rw,stripe=512,data=writeback) /dev/md1 on /home type ext4 (rw,stripe=512,data=writeback) ``` 其他的分区都会显示 `data=xxxxxxxx` 唯独 `/dev/md2` 不显示。 ### 解决 先查看文件被系统挂载为了啥模式 ```bash root@XiaoCai-SX63 ~ # dmesg | grep "filesystem" [ 4.397600] EXT4-fs (md2): mounted filesystem with writeback data mode. Opts: (null) [ 8.930265] EXT4-fs (md0): mounted filesystem with writeback data mode. Opts:data=writeback [ 8.971793] EXT4-fs (md1): mounted filesystem with writeback data mode. Opts:data=writeback ``` 看日志可以看出,三个分区都是 `writeback` 模式 查看默认模式 ```bash root@XiaoCai-SX63 ~ # tune2fs -l /dev/md2 | grep "Default mount options" Default mount options: journal_data_writeback user_xattr acl root@XiaoCai-SX63 ~ # tune2fs -l /dev/md1 | grep "Default mount options" Default mount options: user_xattr acl ``` `/dev/md2` 的默认挂载模式是 writeback ,`/dev/md1` 的默认挂载模式是用户拓展模式 推测是因为默认挂载模式与现有挂载模式一致,故不在 `mount` 中显示挂载模式 ### 移除 journal_data_writeback ```bash root@XiaoCai-SX63 ~ # tune2fs -o^journal_data_writeback /dev/md2 tune2fs 1.44.1 (24-Mar-2018) root@XiaoCai-SX63 ~ # tune2fs -l /dev/md2 | grep "Default mount options" Default mount options: user_xattr acl ``` 解决。 # 感谢 Telegram: `@breakertt` 最后修改:2021 年 04 月 07 日 © 允许规范转载 赞 给点.jpg