CodeGym /课程 /Docker SELF /检查和修复文件系统:命令 fsck

检查和修复文件系统:命令 fsck

Docker SELF
第 6 级 , 课程 2
可用

检查和修复文件系统:命令 fsck

1. 检查文件系统为什么重要?

Linux 的文件系统其实是操作系统里最“忙碌”的员工之一。每当你保存文件、打开程序或者只是读取数据,它都在辛勤工作。现在想象一下:在最关键的时刻,这位员工累了,突然晕倒了(也就是说:系统因为断电被关闭了)。这可能导致文件表损坏、数据丢失或者其他一堆麻烦问题。

但是可能会出什么问题呢?

  1. 突然断电 — 你的设备没来得及完成数据写入就被意外断电。
  2. 存储错误 — 硬盘或 SSD 可能有硬件故障,导致文件系统受损。
  3. 软件错误 — 驱动程序或系统工具里可能也会有 bug。

通常在这些情况下,文件系统会变得不可用,系统可能会要求你检查它的状态。这时候 fsck 就派上用场了,它的全称是 File System Check


2. 什么是fsck以及它是如何工作的?

工具的概念

fsck是一个通用工具,用于检查文件系统的完整性并修复发现的错误。它的工作方式就像医生:做测试,找问题,如果可能,就“治愈”。如果问题太严重,fsck至少可以诊断出具体出了什么问题。

什么时候使用fsck

  1. 当文件明显出问题时(例如,它们突然“消失”)。
  2. 如果系统无法启动,并提示文件系统错误。
  3. 为了定期预防,确保一切正常。

3. fsck 的基本语法

通常使用 fsck 时会用到如下命令:

fsck [选项] <设备>

主要选项:

  • -y — 自动确认修复操作。如果不想坐在那里一个一个问题按 yes 的话,这个就很方便。
  • -n — 仅检查,不修复(干跑)。如果害怕搞坏什么东西,这个选项对分析情况很有用。
  • -t — 指定文件系统类型(比如 ext4, xfs)。
  • -r — 启用交互模式(你需要确认每一个修复操作)。

4. 实践:检查文件系统

我们从简单的检查开始。假设我们有一个设备 /dev/sdb1,我们想要检查它。

步骤 1:无修改检查

首先评估文件系统的状态而不做更改:

fsck -n /dev/sdb1

执行命令后,如果有问题,你会看到问题列表。以下是示例输出:

Inodes that were part of a corrupted orphan linked list found.
Filesystem errors detected. Run fsck to repair.

步骤 2:自动修复

现在我们开启错误修复模式:

fsck -y /dev/sdb1

fsck 会尝试修复每个发现的错误并自动确认操作。如果设备较大,这可能需要一些时间。


5. 如果文件系统正在使用该怎么办?

运行 fsck 时的错误

如果你尝试在已挂载的分区上运行 fsck,会收到以下警告:

fsck: cannot check a mounted filesystem.

这是因为检查挂载的文件系统可能导致数据损坏。有几种方法可以解决这个问题。

  1. 将设备挂载为只读模式。
mount -o remount,ro /dev/sdb1
  1. 使用 LiveCD 或 LiveUSB。

通过启动光盘或U盘引导系统,以便在未挂载的设备上执行检查。

  1. 使用恢复模式。

重新启动系统进入恢复模式,通常该模式提供一个安全环境来执行检查。

检查根文件系统 / 的特殊情况

根文件系统是一个特殊的情况,因为它被系统主动使用。要在这种分区上运行 fsck,需要:

  1. 通过以下命令切换到单用户模式:
systemctl isolate rescue.target
  1. 手动运行 fsck
fsck -y /

6. 常见错误及其修复

损坏的 inodes

如果 fsck 提示有损坏的 inode(存储文件信息的结构),它会建议删除它们。这是安全的,因为损坏的 inode 已经不再与当前文件相关联。

丢失的文件

有时运行 fsck 后,丢失的文件会被放到文件系统根目录下的 lost+found 目录。你可以手动检查这个位置来恢复重要数据。

重要建议

  1. 检查前务必备份数据。 虽然 fsck 通常是安全的,但是修复可能会导致数据丢失。

  2. 不要在挂载的分区上运行 fsck 这可能会导致数据损坏。

  3. 使用标志 -n 进行初步分析。 如果不确定是否应该自动修复错误,可以先使用干运行模式进行检查。


7. 示例:模拟错误并修复

  1. 创建一个虚拟磁盘并在上面建立一个文件系统:
dd if=/dev/zero of=./disk.img bs=1M count=100
mkfs.ext4 ./disk.img
  1. 挂载磁盘:
sudo mount ./disk.img /mnt/test/
  1. 模拟损坏:
sudo dd if=/dev/zero of=/mnt/test/randomfile bs=512 count=10
  1. 卸载磁盘并检查:
sudo umount /mnt/test/
fsck ./disk.img

根据命令的输出,修复错误。

完成此步骤后,你已经能够熟练检查文件系统,正确修复错误并防止故障发生。接下来我们将学习更多用于操作文件系统的工具,但fsck将是你诊断和修复问题的可靠助手。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION