这 fsck
命令(文件系统一致性检查)是一个用于检查和修复 Linux 文件系统的实用程序。 具有日志功能的现代文件系统的设计使得像 fsck 这样的工具并不容易被需要。 然而,在少数情况下, fsck 可能是修复“坏”文件系统的唯一选择。
fsck
可以在已损坏或与文件系统的其余部分不一致的分区上运行。
可能需要 fsck 的原因
- 不洁关机 – 这是腐败的主要原因。 由于“不正常关机”,系统甚至可能无法正常启动
- 驱动器故障或损坏
您应该使用的环境 不是 使用 fsck
由于该命令直接与文件系统的扇区一起工作,因此在此处采取必要的预防措施很重要。
e2fsck 的手册页说:
请注意,通常在挂载的文件系统上运行 e2fsck 是不安全的。 唯一的例外是如果指定了 -n 选项,并且未指定 -c、-l 或 -L 选项。 但是,即使这样做是安全的,e2fsck 打印的结果 如果文件系统已挂载,则无效. 如果 e2fsck 询问您是否应该检查已挂载的文件系统,唯一正确的答案是“否”。
https://www.man7.org/linux/man-pages/man8/e2fsck.8.html
所以,你必须做 fsck
在未挂载的分区上。 如果您可以使用卸载分区 umount
,很好。 否则你需要改变你的环境:
1. 恢复模式
(对于 Ubuntu – 保持 SHIFT
在引导进入 GRUB 时,选择“Ubuntu 高级选项”,然后选择标有“恢复模式”的选项,然后选择 fsck)。 在恢复模式下,分区是 已安装.
2. 在使用 init=/bin/ 时bash 内核参数
( 抓住 SHIFT
在启动进入 GRUB 时,按 e
编辑内核参数)。 它提供了一个 bash 壳从哪里来 fsck
可以运行,但在这里,分区也是 已安装.
如何使用 fsck 命令?
了解了基础知识后,让我们转到如何在 Linux 中使用 fsck 命令的步骤。
1. 基本用法
在开始使用该命令之前,请确保您正在处理未挂载的分区。 要卸载分区然后在其上运行 fsck,请键入:
$ sudo umount /dev/<partition_name> $ fsck /dev/<partition_name>
您可能无法卸载分区。 在这种情况下,您可以选择以下方法之一。
2. 使用 live USB 运行 fsck
这可能是最好的跑步方式 fsck
. 它提供了一套丰富的熟悉的工具,如 fdisk
. 使用本教程创建实时 Ubuntu USB。 这部分假设您通过 Live USB 运行 Linux。
要列出系统上的所有分区,您可以使用 fdisk
命令。
$ sudo fdisk -l
注意:上面显示的分区(对于 2 个 SSD、一个 NVMe 和其他 SATA)可能与您系统上的不同。 fdisk 还会打印有关分区的更多信息。 但是,对于本文而言,分区的名称就足够了。
确定导致问题的分区,然后只需运行:
$ fsck /dev/<partition_name>
这应该可以解决问题。
3. 使用 initramfs
使用 fsck 命令的另一种方法是在 intramfs 模式下。 进入 initramfs
- 抓住
SHIFT
启动时按 键进入 GRUB 菜单。 - 按
e
编辑启动项 - 将内核参数添加为 ‘
break
‘ 如下面的截图所示 - 按
Ctrl - X
保存并退出
initramfs
提供了一种“不太诱人”的故障排除方式。
分区不是 已安装 在 initramfs 中,所以执行 fsck
会很安全。 此外,您还需要分区的名称。 然而,Initramfs 提供了最少的实用程序。 所以 fdisk
将不可用。 您可以使用 cat 命令列出分区,如下所示:
$ cat /proc/partitions
识别分区,然后运行:
$ fsck /dev/<partition_name>
注意:使用 Live USB 的 fsck 可能并不总是可用。 在这种情况下,请使用 initramfs 方法。
如何检查 fsck 是否已安排
您可能想知道上次检查分区是什么时候,或者将来什么时候检查。 在这种情况下,运行:
$ sudo tune2fs -l /dev/<partition_name> | egrep -i 'check|mount'
- 最大装载数 是 fsck 将自动检查文件系统后的挂载次数。
- 检查间隔 是两次文件系统检查之间的时间。
这两个值足以识别上次运行 fsck 命令的时间。
fsck 和 e2fsck 的区别
您可能会发现不同的答案/文章要求您运行 e2fsck 或者 fsck.ext4 而不是 fsck. 如果您运行这些工具中的任何一个而不是 fsck
?
fsck
只是所有特定于文件系统的 fsck 命令的前端,例如上面显示的两个命令(如果您可以说是包装器)。 调用 fsck
自动调用正确的文件系统特定的 fsck
. 让我们看看所有 fsck
我们的系统上有:
$ ls -l /sbin/fsck*
跑步 fsck
在 ext2/3/4 分区上运行各自的 /sbin/fsck.ext*
可执行。 这些可执行文件反过来又是到 e2fsck
可执行。 所以,即使你跑 fsck
在 ext4 分区上它最终会运行 e2fsck
.
结论
在本教程中,我们介绍了 fsck
这是恢复文件系统的有用工具。 要了解更多关于 fsck
命令,查看其手册页。