启动时触发 `fsck` 的机制

启动时触发 `fsck` 的机制

问题:哪些机制(除 中的机制之外/etc/fstab)会fsck在启动时自动触发?

细节:我的电脑目前运行的是 Ubuntu 21.04没有任何问题,它运行正常在启动时,fsck会执行磁盘检查,因为我在屏幕上看到以下几行。

Ubuntu: clean, 281400/3276800 files, 3602929/13107177 blocks

我的(根分区)Ubuntu的标签在哪里。但是,如果您检查我的文件,最后一列 (即 fsck 用于确定 fsck 是否应在挂载之前检查文件系统的列) 设置为零,因此我不希望在启动时进行任何检查。/dev/sda2/etc/fstab

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# /dev/sda1
UUID=DA59-E469  /boot/efi   vfat    defaults    0   0
# /dev/sda2
UUID=862c6f26-cbe0-4cd5-860d-fdf306f697f9 / ext4 noatime,errors=remount-ro 0 0
# /dev/sda3
UUID=70f175d4-ec37-455c-84c5-b93d1e2e8761 /mnt/Data ext4 noatime,nosuid,nodev,nofail,x-gvfs-show 0 0
# swapfile
/swapfile none swap sw 0 0

我只是好奇想知道检查是如何触发的(以及/或者我的假设是否有误)。

一些细节:

  • /etc/fstab在 Ubuntu 20.04 和 Ubuntu 20.10 中使用了相同的方法。更新到 Ubuntu 21.04 后开始出现检查:fsck20.04 和 20.10 启动时没有检查。
  • 的输出sudo tune2fs -l /dev/sda2 | grep checkedLast checked: Sun Apr 26 15:00:01 2020,那可能是我将的最后一列设置/etc/fstab为零的时候。
  • 我在根目录下没有任何/forcefsck文件。
  • 在我的/etc/default/grub那里没有fsck.mode=force设置。

答案1

systemd 服务会在启动时触发文件系统检查。根文件系统和其他分区分别有 、systemd-fsck-root.service和。这些服务继续使用传统的 passno(即 中的第六个字段的数字)来确定是否以及应按什么顺序检查已公布的文件系统。[email protected]/etc/fstab

根据man systemd-fsck

These services are started at boot if passno in /etc/fstab for the file
system is set to a value greater than zero. The file system check for
root is performed before the other file systems. Other file systems may
be checked in parallel, except when they are on the same rotating disk.

但是,root 似乎被特殊对待。它​​在启动过程的早期就在 initramfs 中被检查。如文档中所述,systemd-fsck-root.service只有当检查未在那里进行时才会启动。否则,其状态将显示为“失败”。

/etc/fstab因此,如果您对根分区以外的分区更改 passno,则可能会看到更改 passno 的效果。

您的输出tune2fs表示很久以前进行过检查,这是因为只注册了彻底的文件系统检查。默认情况下,日志记录 ext 文件系统的文件系统检查仅限于检查日志报告的内容。在以前的 Ubuntu 版本中,max-mount-count设置了 30,表示每 30 次挂载后都会强制进行一次完整的文件系统检查。目前,它设置为-1,因此除非日志报告问题,否则永远不会完全检查文件系统。

相关内容