如何在 Linux 上系统重启后强制 fsck 检查文件系统
检查文件系统是否有错误是 Linux 系统管理的重要组成部分。当遇到读写时间性能不佳或文件系统错误时,这是一个很好的故障排除步骤。在本教程中,我们将解释如何强制 fsck 在下次系统重新启动时执行文件系统检查,或在任意所需次数的系统重新启动时强制执行文件系统检查,无论是 root 系统或非根安装点。
在本教程中您将学习:
如何查看
fsck
最后一次检查文件系统的时间如何查看和修改
/etc/fstab
文件中的PASS值如何对根分区和非根分区强制执行 fsck
查看 fsck 最后一次检查文件系统的时间
让我们首先讨论一些可用于获取文件系统信息的工具以及在系统重启后控制文件系统检查的配置。我们要讨论的工具是tune2fs 文件系统管理实用程序。使用tune2fs我们可以导出一些与文件系统健康检查相关的重要信息。
以下 Linux 命令将告诉我们最后一次检查文件系统
/dev/sdX
是什么时候:$ sudo tune2fs -l /dev/sdX | grep Last\ c Last checked: Thu May 12 20:28:34 2022
可以通过tune2fs命令检索的另一个有用信息与我们的/dev/sdX文件系统被安装的次数有关:
$ sudo tune2fs -l /dev/sdX | grep Mount Mount count: 157
最后,在强制进行文件系统检查之前允许通过多少个挂载:
$ sudo tune2fs -l /dev/sdX | grep Max Maximum mount count: -1
从上面的输出我们可以建立以下信息摘要。 /dev/sdX 文件系统上次检查时间为 2022 年 5 月 12 日星期四 20:28:34
。自上次检查以来,此文件系统已挂载 157
次,并且在下一次文件系统 fsck 检查之前达到了最大挂载量。在上述情况下,值 -1
表示 fsck 已禁用。
查看和修改/etc/fstab中的PASS值
现在我们已经了解了一些 tune2fs
基础知识,让我们讨论一下 /etc/fstab
文件中包含启动时所有内容的 PASS
系统配置选项可安装的分区及其相关的安装选项。
首先,使用 blkid 命令找出要检查的文件系统的 UUID 值。
$ blkid /dev/sda3
/dev/sda3: UUID="c020d4d8-c104-4140-aafc-24f7f89f8629" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="22ada8f4-5222-4049-b0fe-a3274516754d"
然后,在 /etc/fstab
文件中 grep
查找该 UUID。
$ grep c020d4d8-c104-4140-aafc-24f7f89f8629 /etc/fstab
UUID=c020d4d8-c104-4140-aafc-24f7f89f8629 / ext4 errors=remount-ro 0 0
最后一列(列号 6)是 fsck PASS 列。 fsck 使用它来确定 fsck 是否应在安装文件系统之前检查文件系统,以及应按什么顺序检查 /etc/fstab
中的给定分区。 fstab PASS 列的可能条目为 0、1 和 2。以下是每个数字的含义。
0
– 禁用,即不检查文件系统1
– 具有此 PASS 值的分区具有更高的优先级并首先检查。该值通常设置为根/
分区2
– 具有此 PASS 值的分区将最后检查
fstab PASS值、最后检查值、挂载次数值之间的关系如下:
在系统启动期间,检查的第一个值是 fstab PASS 值。如果该值为 0,则不会检查其他值,并且 fsck 将不会执行文件系统检查。但是,如果在 /etc/fstab
中找到的 PASS 值不是 0,即 1 或 2,则检查最大安装数和总安装数的值。
如果最大安装数的值大于或等于安装总数值,则将执行 fsck 的文件系统检查。几个例子:
FSCK DISABLED
fstab PASS: 1
Maximum mount count: -1
Mount count: 157
----
FSCK DISABLED
fstab PASS: 0
Maximum mount count: -1
Mount count: 157
----
FSCK ON NEXT REBOOT
fstab PASS: 1 or 2
Maximum mount count: 1
Mount count: 157
----
FSCK DISABLED
fstab PASS: 0
Maximum mount count: 1
Mount count: 1
----
FSCK ON NEXT REBOOT
fstab PASS: 1 or 2
Maximum mount count: 1
Mount count: 1
----
NO FSCK ON NEXT REBOOT
fstab PASS: 1 or 2
Maximum mount count: 200
Mount count: 157
强制对根分区或非根分区进行 fsck
要强制对分区进行文件系统检查,我们必须首先将 /etc/fstab
中 fsck 的 PASS 值更改为值 2
。例如:
UUID=c6e22f63-e63c-40ed-bf9b-bb4a10f2db66 /mnt ext4 errors=remount-ro 0 2
进行此更改后,请参阅下面的命令示例以完成强制 fsck 运行。
为了确保在下次重新启动时检查您的文件系统,我们需要操作文件系统的“最大安装计数”参数。以下
tune2fs
命令将确保每次 Linux 系统重新启动时检查文件系统/dev/sdX
。请注意,要发生这种情况,/etc/fstab
中的 fsck 的 PASS 值必须设置为正整数,如上所述。$ sudo tune2fs -c 1 /dev/sdX
请注意,这将在每次系统重新引导后继续强制执行 fsck,直到您恢复设置。
或者,我们可以在每 10 次重新启动后设置 fsck:
$ sudo tune2fs -c 10 /dev/sdX
或者要禁用该设置,请使用值
-1
。$ sudo tune2fs -c -1 /dev/sdX OR $ sudo tune2fs -c 0 /dev/sdX
结束语
在本教程中,我们了解了如何强制 fsck 检查 Linux 系统上根分区或非根分区的文件系统。这可以通过对 /etc/fstab
文件进行必要的编辑以及使用 tune2fs
命令来实现。建议让 fsck 偶尔检查文件系统是否有错误,这可以提醒您硬件故障、提高性能并最大程度地减少数据丢失的可能性。