在Linux中使用fsck命令检查和修复文件系统错误
fsck(文件系统检查)可以处理可能损坏的文件系统。
该实用程序用于检查和(可选)修复文件系统。
在几种情况下,我们可能要使用fsck。
通常,如果系统无法启动,设备(外部驱动器或者存储介质)无法正常运行,或者看到文件损坏的迹象,则通常需要运行此命令。
Fsck实际上是许多文件系统特定的检查器(如fsck.vfat,fsck.ext2等)的“前端”。
不需要指定这些检查器,但是我们可以在该手册中找到更多高级选项。
这些更精确的命令的页面。
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,应该会看到如下错误:
Hyman@theitroad:~$sudo fsck /dev/sda3 fsck from util-linux 2.34 e2fsck 1.45.5 (07-Jan-2017) /dev/sda3 is mounted. e2fsck: Cannot continue, aborting.
在正常,健康的驱动器上运行fsck如下所示:
Hyman@theitroad:~$sudo fsck /dev/sda2 fsck from util-linux 2.34 fsck.fat 4.1 (2016-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命令有点熟悉,那么让我们看一下该命令的实际用例。
修复USB磁盘和其他可移动设备
为了我们的目的,假设我们已经确定了有问题的设备/dev/sdb
。
首先,我们需要确保已卸下驱动器:
sudo umount /dev/sdb
现在运行fsck命令:
sudo fsck /dev/sdb
检查输出是否有任何错误。
如果没有显示,请使用echo $?
检查退出代码。
我们还可以添加一些选项标志,以进行一些自动更正。
但是这些命令尚未标准化,我们应该验证文件系统类型并比较该特定手册页中的文档。
尽管如此,通常我们可以使用-p来允许fsck自动应用修复。
sudo fsck -p /dev/sdb
类似地,-y
将对任何检测到的文件系统损坏进行更正。
修复根文件系统
系统处于活动状态时,无法卸载根分区。
如果我们怀疑主文件系统已损坏,则必须在此处使用其他方法。
实际上,我们可以使用一些不同的选项。
我们可以在启动时,以救援模式运行fsck或者使用以恢复为主题的实时cd。
在一定数量的失败引导尝试之后,许多Linux发行版都会在启动时自动强制fsck。
如果我们希望自己处理事务,则可以安排系统自己执行此操作。
大多数现代Linux版本都具有一个称为tune2fs的工具。
sudo tune2fs -c 1 /dev/sda
假设根设备是dev/sda
,这是我们要输入的命令。
现在,实际上正在发生的是,我们正在更改系统设置,以使fsck每“ n”个引导都运行(在示例中为1)。
我们也可以将其设置为标准时间间隔。
选项是几天,几周或者几个月。
假设我们希望fsck在引导时的任何时间运行,如果一周没有检查。
我们可以使用-i指定间隔,该命令将如下所示。
sudo tune2fs -i 1w /dev/sda
如果我们使用的是systemd,则可以通过输入以下命令来在下次启动时强制运行fsck:
fsck.mode=force fsck.repair=yes