如何在 Ubuntu 20.04 重启时强制执行 fsck

如何在 Ubuntu 20.04 重启时强制执行 fsck

我在嵌入式设备上运行 Ubuntu 20.04。我想问一下如何在启动时强制自动 fsck?在较旧的 Ubuntu 版本中,可以通过编辑 /etc/default/rcS 并设置 FSCKFIX=yes 来实现。但是,我读到在较新的 Ubuntu 中,此文件不再使用。那么,在较新的 Ubuntu 中,如何启用启动时自动 fsck?

答案1

自从接管初始化后,创建文件以强制在重启时检查文件的老办法/forcefsck不再起作用。systemd

更改“最大挂载数”(仅限 ext 文件系统)

最快的方法可能是暂时将您的更改Maximum mount count1。这将导致内核和e2fsck在下次重新启动时检查文件系统。但是,这仅适用于 ext 文件系统。

首先检查您当前的设置,以便稍后恢复默认设置:

sudo tune2fs -l /dev/nvme0n1p2 | grep 'Maximum mount'

用系统分区的设备名称替换/dev/nvme0n1p2。很可能现在设置为-1禁用基于卷安装次数的检查。

1使用以下命令调整设置:

sudo tune2fs -c 1 /dev/nvme0n1p2

现在重新启动 - 应该检查卷。 重新启动后,您应该将值重置为之前的值,以避免每次都检查分区。

更改内核参数

另一种方法是传递内核参数在引导过程中控制用于文件系统检查的 systemd 服务.fsck.mode=force将强制进行文件检查。

要一次性添加内核参数,请启动到 Grub 菜单,突出显示条目并按e。移动到以 开头的行linux,按End移动到最后一行,添加空格和内核参数。按Ctrl+x关闭并继续启动。

答案2

如果您想在每次重启时强制进行 fsck,则需要遵循以下步骤。

  1. 用于blkid识别分区的 uuid。
amarcus@amarcus-desktop:~$ blkid
/dev/mapper/vgubuntu-swap_1: UUID="d24b0766-c9be-49ef-9022-8ccae4f79801" TYPE="swap"
/dev/mapper/vgubuntu-root: UUID="d414c4f9-da0d-42bf-8290-4bcb55b8d984" BLOCK_SIZE="4096" TYPE="ext4"
amarcus@amarcus-desktop:~$ 

  1. 使用 uuid 或挂载点来定位分区/etc/fstab
amarcus@amarcus-desktop:~$ cat /etc/fstab 
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/vgubuntu-root /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=0AE0-795B  /boot/efi       vfat    umask=0077      0       1
/dev/mapper/vgubuntu-swap_1 none            swap    sw              0       0

UUID=D41C-2F17 /mnt/WDElements auto umask=0022,gid=1000,uid=1000,x-gvfs-show 0 0

最后一列是第 6 列,又称为 fsck PASS 列,fsck 使用这一列来确定 fsck 是否应该在挂载之前检查文件系统,以及应该按照什么顺序检查 /etc/fstab 中给定的分区

对于根分区,确保该条目设置为 1

  1. 最后,将该分区的挂载计数器设置为 1。
root@amarcus-desktop:~# tune2fs -c 1 /dev/mapper/vgubuntu-root

解释:

基本上,在步骤 1 中,您要确定要在启动时检查哪个分区。

在步骤 2 中,您要确保它具有更高的优先级。如果您要检查多个分区,这将很有用。它决定应该首先占用哪个分区,然后是第二个分区,依此类推。

在步骤 3 中,您要说明在挂载多少次后应检查分区。参数 1 指定在一次挂载后应检查分区。因此基本上它会在每次挂载后(即每次重启后)进行检查。

答案3

在 root 权限下最高可达 20.04:

touch /forcefsck
reboot

您不必删除,/forcefsck因为系统会将其删除。

20.04 之后(感谢 systemd,它从未让你的生活变得更轻松):

将 fsck.mode=force 和 fsck.repair=yes 添加到内核启动参数中,作为新的 grub 菜单项或在启动时编辑内核字符串。

相关内容