如何在 Ubuntu 20.04 重新启动时强制进行 fsck

abl*_*lan 18 boot fsck

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

van*_*ium 21

自从接管初始化以来,创建文件/forcefsck以强制重新启动时检查文件的旧的方便技巧不再起作用。systemd

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

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

首先检查您当前的设置,以防稍后想要恢复为默认设置:

sudo tune2fs -l /dev/nvme0n1p2 | grep 'Maximum mount'
Run Code Online (Sandbox Code Playgroud)

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

1使用命令将设置调整为:

sudo tune2fs -c 1 /dev/nvme0n1p2
Run Code Online (Sandbox Code Playgroud)

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

更改内核参数

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

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

  • 对某些人来说可能看起来很明显,但使用此解决方案会 fsck 自动修复错误还是只是等待用户输入“y”以防出现错误?我想自动修复以确保在发生这种情况时我仍然可以远程访问它。 (2认同)

Kun*_*hah 5

如果您想在每次重新启动时强制进行 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:~$ 

Run Code Online (Sandbox Code Playgroud)
  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

Run Code Online (Sandbox Code Playgroud)

最后一列是第 6 列,又名 fsck PASS 列,fsck 使用它来确定 fsck 是否应在安装文件系统之前检查文件系统,以及应按什么顺序检查 /etc/fstab 中的给定分区

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

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

Run Code Online (Sandbox Code Playgroud)

解释:

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

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

在步骤 3 中,您表示应在安装多少次后检查分区。参数 1 指定在安装一次后应检查分区。所以基本上它会在每次安装后(即每次重新启动后)进行检查。