Archlinux的fsck设置

August 7, 2013

今天升级之后,开机发现有下面这个警告:

********************** WARNING **********************
*                                                   *
*  The root device is not configured to be mounted  *
*  read-write! It may be fsck'd again later.        *
*                                                   *
*****************************************************

和fsck相关的配置都是半年之前设置的,我快都忘记是为什么了:

  1. mkinitcpio.conf的HOOKS里没有fsck,但是BINARIES有fsck和fsck.ext4
  2. fstab里的passno全是0
  3. systemd的fsck设置都是默认的
  4. 没有设置fsck.mode(默认auto)

效果是每次启动都fsck一次root分区。

现在启动时fsck流程是这样的:

  1. 执行initramfs里的init
  2. init里会调用init_functions里的fsck_root函数
  3. fsck_root会调用fsck_device函数,因为我的BINARIES里有fsck,所以会对根分区进行一次fsck。
  4. 回到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

参考

  1. 论坛上的讨论,见6楼开发者解答
  2. init_function

ps: 现在大部分系统设置都是在半年之前弄的,当时也没记录下设置的原因,就是觉得有用就加上,现在很多都忘了原因了,找一天要重新整理一下。