今天升级之后,开机发现有下面这个警告:
********************** WARNING **********************
* *
* The root device is not configured to be mounted *
* read-write! It may be fsck'd again later. *
* *
*****************************************************
和fsck相关的配置都是半年之前设置的,我快都忘记是为什么了:
- mkinitcpio.conf的HOOKS里没有fsck,但是BINARIES有fsck和fsck.ext4
- fstab里的passno全是0
- systemd的fsck设置都是默认的
- 没有设置fsck.mode(默认auto)
效果是每次启动都fsck一次root分区。
现在启动时fsck流程是这样的:
- 执行initramfs里的init
- init里会调用init_functions里的
fsck_root
函数 fsck_root
会调用fsck_device
函数,因为我的BINARIES里有fsck,所以会对根分区进行一次fsck。- 回到
fsck_root
,因为之前fsck成功了,而且不是用rw挂载,所以显示个警告要我改设置,免得systemd再fsck一次。
也就是说现在只要在bootloader里加上rw就可以干掉警告了,而且现在grub默认就有加rw,所以我重新grub.cfg设置就搞定了:
sudo grub-mkconfig -o /boot/grub/grub.cfg
fsck和fstab的关系
fstab的第六栏fs_passno和fsck是什么关系呢?以前我以为只要设成0那fsck就不会检查,但是我上面全都设置成0了,还是会检查根分区啊。
原来fstab只有在fsck没有参数指定分区时才会有效,fsck_device
里执行fsck的时候是指定了分区的,所以fstab的设置在这是没效的。
如果像这样运行fsck,fsck就会根据fstab里的设置来检查分区:
sudo fsck
参考
- 论坛上的讨论,见6楼开发者解答
- init_function
ps: 现在大部分系统设置都是在半年之前弄的,当时也没记录下设置的原因,就是觉得有用就加上,现在很多都忘了原因了,找一天要重新整理一下。