我在嵌入式设备上运行 Ubuntu 20.04。我想问一下如何在启动时强制自动 fsck?在较旧的 Ubuntu 版本中,可以通过编辑 /etc/default/rcS 并设置 FSCKFIX=yes 来实现。但是,我读到在较新的 Ubuntu 中,此文件不再使用。那么,在较新的 Ubuntu 中,如何启用启动时自动 fsck?
答案1
自从接管初始化后,创建文件以强制在重启时检查文件的老办法/forcefsck
不再起作用。systemd
更改“最大挂载数”(仅限 ext 文件系统)
最快的方法可能是暂时将您的更改Maximum mount count
为1
。这将导致内核和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,则需要遵循以下步骤。
- 用于
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:~$
- 使用 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。
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 菜单项或在启动时编辑内核字符串。