在Linux中使用fsck命令检查和修复文件系统错误


原文地址:在Linux中使用fsck命令检查和修复文件系统错误

fsck(file system check)用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查。本篇文章分享了如何使用fsck命令检查和修复Linux文件系统错误。

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,应该会看到如下错误:

chris@handbook:~$ 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如下所示:

chris@handbook:~$ 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 - No errors
  • 1 - File system errors corrected
  • 2 - System should be rebooted
  • 4 - File system errors left uncorrected
  • 8 - Operational error
  • 16 - Usage or syntax error
  • 32 - Fsck canceled by user request
  • 128 - Shared library error

您可以使用echo $?command查看上次运行命令的退出代码。

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)。您也可以将其设置为标准时间间隔。选项为d AYS,瓦特eeks,或onths。

假设您希望fsck在启动后的任何时间运行,如果一周没有检查。您可以使用-i指定间隔,该命令将如下所示。

sudo tune2fs -i 1w /dev/sda	

如果您使用的是systemd,则可以通过输入以下命令在下次启动时强制运行fsck:

fsck.mode=force
fsck.repair=yes

结论

您可以随时转到手册页获取更多信息。只需man fsck在终端中使用。

评论

登录后评论

服务器优惠活动

Top