如何在 Linux 中使用 fsck 命令?

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)。 在恢复模式下,分区是 已安装.

恢复模式 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 
Nvme 乐谱NVMe SSD 分区
SATA SSD 分区SATA SSD 分区

注意:上面显示的分区(对于 2 个 SSD、一个 NVMe 和其他 SATA)可能与您系统上的不同。 fdisk 还会打印有关分区的更多信息。 但是,对于本文而言,分区的名称就足够了。

确定导致问题的分区,然后只需运行:

$ fsck /dev/<partition_name> 

这应该可以解决问题。

3. 使用 initramfs

使用 fsck 命令的另一种方法是在 intramfs 模式下。 进入 initramfs

  1. 抓住 SHIFT 启动时按 键进入 GRUB 菜单。
  2. e 编辑启动项
  3. 将内核参数添加为 ‘break‘ 如下面的截图所示
  4. Ctrl - X 保存并退出
Enter  进入 InitramfsEnter 进入 Initramfs

initramfs 提供了一种“不太诱人”的故障排除方式。

分区不是 已安装 在 initramfs 中,所以执行 fsck 会很安全。 此外,您还需要分区的名称。 然而,Initramfs 提供了最少的实用程序。 所以 fdisk 将不可用。 您可以使用 cat 命令列出分区,如下所示:

$ cat /proc/partitions 

识别分区,然后运行:

$ fsck /dev/<partition_name> 
Initramfs FschkInitramfs Fsck

注意:使用 Live USB 的 fsck 可能并不总是可用。 在这种情况下,请使用 initramfs 方法。

如何检查 fsck 是否已安排

您可能想知道上次检查分区是什么时候,或者将来什么时候检查。 在这种情况下,运行:

$ sudo tune2fs -l /dev/<partition_name> | egrep -i 'check|mount' 
检查 Fsck 1检查 Fsck
  • 最大装载数 是 fsck 将自动检查文件系统后的挂载次数。
  • 检查间隔 是两次文件系统检查之间的时间。

这两个值足以识别上次运行 fsck 命令的时间。

fsck 和 e2fsck 的区别

您可能会发现不同的答案/文章要求您运行 e2fsck 或者 fsck.ext4 而不是 fsck. 如果您运行这些工具中的任何一个而不是 fsck?

fsck 只是所有特定于文件系统的 fsck 命令的前端,例如上面显示的两个命令(如果您可以说是包装器)。 调用 fsck 自动调用正确的文件系统特定的 fsck. 让我们看看所有 fsck 我们的系统上有:

$ ls -l  /sbin/fsck* 
不同的 Fsck列出所有 fsck

跑步 fsck 在 ext2/3/4 分区上运行各自的 /sbin/fsck.ext* 可执行。 这些可执行文件反过来又是到 e2fsck 可执行。 所以,即使你跑 fsck 在 ext4 分区上它最终会运行 e2fsck.

结论

在本教程中,我们介绍了 fsck 这是恢复文件系统的有用工具。 要了解更多关于 fsck 命令,查看其手册页。