fsck(file system check,文件系统检查)用于处理可能损坏的文件系统,本文对该命令做个简单介绍。
一般来说,有这么几种情况,你可能会用到 fsck 命令:系统无法启动,设备(外部驱动器或存储设备)运行不正常,或者有文件损坏的情况等。
fsck 实际上是许多文件系统特定检查器的“前端”,比如 fsck.vfat, fsck.ext2 等。使用 fsck 的时候不需要指定具体使用的是哪个检查器。
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 之前需要先卸载设备。
如果你尝试在已安装的设备上运行 fsck,会看到如下错误:
$ 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,输出是这样的:
$ 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,那么返回的是两个和的逻辑或(OR,||)。
- 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 $? 来检查退出代码。
我们可以添加一些选项,允许命令进行自动更正。但是这些命令没有进行标准化,所以在使用前需要验证文件系统并比较 man 手册中的描述信息。
尽管如此,通常我们可以使用 -p 选项来让 fsck 自动修复:
sudo fsck -p /dev/sdb
类似的,-y 选项可以对检测到的任何损坏的文件系统进行更正。
修复根文件系统
当系统处于活动(active)状态时,我们无法卸载 root 分区。如果我们怀疑主文件系统已损坏,那就需要使用其他的方法了。
对于这种情况,有几个方案可以使用。比如可以在系统启动时,在救援模式(rescue mode)下运行 fsck,或者使用恢复主题的引导盘(recovery-themed live cd)。
许多 Linux 发行版,在经过几次系统启动失败后,重新启动时会自动强制 fsck。如果你喜欢自己动手,可以手动设置“几次”这个数值。
大多数现代 Linux 版本都有一个名为 tune2fs 的工具,假如你的 root 设备为 /dev/sda,可以使用如下命令:
sudo tune2fs -c 1 /dev/sda
上述命令是对系统设置的更改,设置为每 **n **次(上述例子中为 1 )引导(系统启动),运行一次 fsck。你还可以将其设置为标准的时间间隔,单位可以设置为 天、周或月 。
假如我们希望在任何时间启动系统时,如果一周内没有检查,就运行 fsck。那么可以使用 -i 选项来指定时间间隔,如下:
sudo tune2fs -i 1w /dev/sda
如果你使用的是 systemd,则可以通过输入以下命令在下次启动时强制运行 fsck:
fsck.mode=force
fsck.repair=yes
关于 fsck 的更多信息,大家可以参考 man 手册,在终端中运行 man fsck 即可。
审核编辑:刘清
-
驱动器
+关注
关注
52文章
8232浏览量
146284 -
Linux系统
+关注
关注
4文章
593浏览量
27396 -
UUID
+关注
关注
0文章
22浏览量
8125
发布评论请先 登录
相关推荐
评论