有时不好的事情会发生在好的系统上。
幸运的是,您是 Linux 用户,并且您拥有 fsck (文件系统检查)以帮助处理可能损坏的文件系统。 此实用程序用于检查和(可选)修复文件系统。
在几种情况下,您可能想要使用 fsck。 通常,如果您的系统无法启动、设备(外部驱动器或存储介质)无法正常运行,或者您已经看到文件损坏的证据,您可能需要运行此命令。
fsck 实际上是许多文件系统特定检查器(如 fsck.vfat、fsck.ext2 等)的“前端”。这些不需要指定,但您可以在 man 中找到更高级的选项这些更精确的命令的页面。
fsck 命令简介
fsck 命令遵循与大多数 Linux 命令类似的模式。
fsck [options] [filesystem]
如果你没有指定文件系统,系统会分析你的 fstab 文件 (/etc/fstab
) 用于扫描设备。
您将需要以 root 用户身份运行该命令或将其与 sudo.
您可以使用 fdisk 或 df 命令列出 Linux 中的硬盘驱动器。 这样,您可以使用 fsck 命令指定要检查的设备。
Disk /dev/nvme0n1: 238.49 GiB, 256060514304 bytes, 500118192 sectors
Disk model: THNSN5256GPUK NVMe TOSHIBA 256GB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 014A45DC-22A2-4FC0-BEEA-25A6F2406380
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 1050623 1048576 512M EFI System
/dev/nvme0n1p2 1050624 98563270 97512647 46.5G Linux filesystem
/dev/nvme0n1p3 98564096 500117503 401553408 191.5G Linux filesystem
在运行 fsck 之前卸载设备
不要在已挂载的设备上运行 fsck,您需要先卸载目标以避免损坏文件。
如果您尝试在已安装的设备上运行 fsck,您应该会看到如下错误:
[email protected]:~$ sudo fsck /dev/sda3
fsck from util-linux 2.34
e2fsck 1.45.5 (07-Jan-2020)
/dev/sda3 is mounted.
e2fsck: Cannot continue, aborting.
在正常、健康的驱动器上运行 fsck 如下所示:
[email protected]:~$ sudo fsck /dev/sda2
fsck from util-linux 2.34
fsck.fat 4.1 (2017-01-24)
/dev/sda2: 5 files, 1967/1972 clusters
虽然 fsck 接受设备名称,例如 /dev/sda
,您可以选择输入 UUID 以避免与安装和卸载设备混淆。 UUID 是分配给您的设备的固定值,不会受到这些系统更改的影响。
了解 fsck 命令的退出代码
这是检查磁盘后可能从 fsck 返回的代码列表。 如果您分析一个磁盘,您的退出代码将是这些代码的总和。 如果您在多个设备上使用 fsck,它将返回 按位或 的两个总和。
- 0 – 没有错误
- 1 – 文件系统错误已更正
- 2 – 系统应该重新启动
- 4 – 文件系统错误未得到纠正
- 8 – 操作错误
- 16 – 用法或语法错误
- 32 – 用户请求取消 Fsck
- 128 – 共享库错误
您可以使用检查上次运行命令的退出代码 echo $?
命令。
fsck 命令的实际使用
现在您对 fsck 命令有点熟悉了,让我们看看这个命令的实际用例。
修复 U 盘和其他可移动设备
出于我们的目的,我们假设您已经确定了有问题的设备 /dev/sdb
.
首先,您需要确保驱动器已被卸载:
sudo umount /dev/sdb
现在运行 fsck 命令:
sudo fsck /dev/sdb
检查输出是否有任何错误。 如果没有显示,请检查退出代码 echo $?
.
我们还可以添加一些选项标志以允许进行一些自动更正。 但是这些命令不是标准化的,您应该验证文件系统类型并比较该特定手册页中的文档。
尽管如此,通常您可以使用 -p
允许 fsck 自动应用修复。
sudo fsck -p /dev/sdb
相似地, -y
将对任何检测到的文件系统损坏应用更正。
修复根文件系统
当系统处于活动状态时,您无法卸载根分区。 如果您怀疑您的主文件系统已损坏,您必须在此处使用不同的方法。
实际上,您可以使用几个不同的选项。 您可以在引导时、在救援模式下运行 fsck,或使用以恢复为主题的 live cd。
许多 Linux 发行版会在启动尝试失败一定次数后自动强制 fsck。 如果您更愿意自己动手,您可以安排系统自行执行此操作。
大多数现代 Linux 版本都有一个名为 tune2fs 的工具。
sudo tune2fs -c 1 /dev/sda
假设您的根设备是 dev/sda
,这是您要输入的命令。
现在,实际发生的是您正在更改系统设置,以便每次运行 fsck n
靴子数量(1 在 example)。 您也可以将其设置为标准时间间隔。 选项是 d是的, weeks,或 米等等。
假设如果一周内没有检查,您希望 fsck 在您启动的任何时候运行。 你可以使用 -i
指定时间间隔,命令看起来像这样。
sudo tune2fs -i 1w /dev/sda
如果您使用的是 systemd,您可以在下次启动时强制运行 fsck,方法是输入以下内容:
fsck.mode=force
fsck.repair=yes
结论
您可以随时查看手册页以获取更多信息。 只需使用 man fsck
在终端。
我希望您对 fsck 命令有所了解。 如果您有任何意见或问题,请在下方留言。