在 Kubernetes 集群环境中使用哪一个来创建资源?
2024年3月17日在 Linux 命令行中查找最大的文件和文件夹
2024年3月17日有时,好的系统也会发生坏事。
幸运的是,您是 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,您应该会看到如下错误:
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 - 没有错误
- 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,或使用恢复主题的 live CD。
许多 Linux 发行版在启动尝试失败一定次数后会自动强制执行 fsck。如果您愿意自己处理事情,您可以安排系统自行完成此操作。
大多数现代 Linux 版本都具有一个名为une2fs 的工具。
sudo tune2fs -c 1 /dev/sda
假设您的根设备是dev/sda
,这是您要输入的命令。
现在,实际发生的情况是您正在更改系统设置,以便每次n
启动时都会运行 fsck(示例中为 1)。您还可以将其设置为标准时间间隔。选项有天、周或月。
假设如果一周内没有检查,您希望 fsck 在启动时随时运行。您可以用来-i
指定间隔,命令如下所示。
sudo tune2fs -i 1w /dev/sda
如果您使用的是 systemd,则可以通过输入以下命令在下次启动时强制运行 fsck:
fsck.mode=force
fsck.repair=yes
结论
您可以随时查阅手册页以获取更多信息。man fsck
只需在终端中使用即可。
我希望您了解有关 fsck 命令的新知识。如果您有任何意见或问题,请在下面留言。