当前位置: 首页 > 科技观察

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

时间:2023-03-17 23:07:20 科技观察

一般来说,有几种情况可能会用到fsck命令:系统无法启动,设备(外部驱动器或存储设备)不工作fsck实际上是许多文件系统特定检查器的“前端”,例如fsck.vfat、fsck.ext2等。使用fsck时,您不需要指定使用哪个检查器。fsck命令介绍fsck命令与大多数Linux命令结构相同,用法如下:fsck[options][filesystem]如果没有指定文件系统,系统将分析你的fstab文件(/etc/fstab)以查找设备的。此外,您需要使用root用户或sudo来运行此命令。我们可以在Linux中使用fdisk或df命令列出硬盘,然后我们可以使用fsck命令指定要检查的设备。磁盘/dev/nvme0n1:238.49GiB,256060514304字节,500118192扇区磁盘型号:THNSN5256GPUKNVMeTOSHIBA256GB单位:1*512=512字节的扇区扇区大小(逻辑/物理):512字节/512字节I/O大小(最小/最佳):512bytes/512bytesDisklabeltype:gptDiskidentifier:014A45DC-22A2-4FC0-BEEA-25A6F2406380DeviceStartEndSectorsSizeType/dev/nvme0n1p1204810506231048576512MEFISystem/dev/nvme0n1p21050624985632709751264746.5GLinuxfilesystem/dev/nvme0n1p398564096500117503401553408191.5GLinux文件系统在运行fsck之前卸载设备不要在已安装或安装的设备上运行fsck,否则会损坏文件。所以你需要在运行fsck之前卸载设备。如果您尝试在挂载的设备上运行fsck,您将看到以下错误:$sudofsck/dev/sda3fsckfromutil-linux2.34e2fsck1.45.5(07-Jan-2020)/dev/sda3ismounted.e2fsck:无法继续,中止。在普通驱动器上运行fsck时,输出是这样的:$sudofsck/dev/sda2fsckfromutil-linux2.34fsck.fat4.1(2017-01-24)/dev/sda2:5files,1967/1972clusters虽然fsck命令接受设备名称(例如/dev/sda)作为参数,您可以选择输入UUID以避免混淆已安装和未安装的设备。UUID是分配给设备的固定值,不受这些系统更改的影响。fsck命令的退出代码以下是使用fsck检查磁盘后返回的代码列表。如果分析单个磁盘,则退出代码是这些代码的总和,如果在多个设备上使用fsck,则退出代码是两个总和的逻辑或(OR,||)。0-没有错误报告;1-文件系统错误更正;2-系统应该重新启动;4-未更正的文件系统错误;8-操作错误;16-用法或语法错误;32-用户请求取消fsck128-共享库错误。你可以使用echo$?检查最后一个命令运行的退出代码。fsck命令的应用上面我们对fsck做了一个基本的介绍,下面我们来看看这个命令的使用。修复USB磁盘和其他可移动设备作为演示,我们假设有问题(待检查)的设备是/dev/sdb。首先,我们需要确保驱动器已卸载:sudoumount/dev/sdb然后运行??fsck命令:sudofsck/dev/sdb检查错误输出,如果没有显示,请使用echo$?检查退出代码。我们可以添加一些允许命令进行自动更正的选项。但是这些命令并不规范,所以在使用前需要验证文件系统并对照manpage中的描述信息。但是,通常我们可以使用-p选项让fsck自动修复:sudofsck-p/dev/sdb类似地,-y选项可以纠正检测到的任何损坏的文件系统。修复根文件系统当系统处于活动状态时,我们无法卸载根分区。如果我们怀疑主文件系统已经损坏,那么我们需要使用其他方法。对于这种情况,可以使用几个选项。例如,您可以在系统启动时以救援模式运行fsck,或者使用以恢复为主题的liveCD。许多Linux发行版在几次系统引导失败后自动强制fsck重新引导。如果你喜欢自己做,你可以手动设置值“几次”。大多数现代Linux发行版都有一个名为tune2fs的工具。如果你的根设备是/dev/sda,你可以使用以下命令:sudotune2fs-c1/dev/sda上面的命令是对系统设置的更改,设置为Everyn(上面例子中的1)boots(系统启动),运行fsck。也可以设置为标准时间间隔,单位可以设置为天、周或月。假设我们希望在系统启动的任何时候运行fsck,如果它在一周内没有被检查过的话。然后你可以使用-i选项来指定时间间隔,如下所示:sudotune2fs-i1w/dev/sda如果你使用的是systemd,你可以通过输入以下命令强制fsck在下次启动时运行:fsck。mode=forcefsck.repair=yes有关fsck的更多信息,您可以参考man手册并在终端中运行manfsck。以上就是本次分享的全部内容,欢迎讨论。