系统管理指南:设备和文件系统

Inode

将按顺序从 inode 2 开始检查 inode 列表(Inode 0 和 inode 1 是保留的)。将根据以下内容检查每个 inode 是否存在不一致性问题:

Inode 的格式和类型

每个 inode 都包含模式字,用于说明 inode 的类型和状态。Inode 可以是以下九种类型之一:

Inode 可能处于以下三种状态之一:

创建文件系统时,会保留固定数目的 inode。但是,仅在需要这些 inode 时才分配它们。已分配 inode 是指向文件的 inode。未分配 inode 不指向文件,因此它应该为空。部分分配状态表示 inode 未正确格式化。例如,如果因硬件故障而将错误数据写入 inode 列表,则 inode 将变为此状态。fsck 命令可以执行的唯一更正操作是清除 inode。

链接计数检查

每个 inode 都包含与其链接的目录项数的计数。fsck 命令通过从根 (/) 目录开始检查整个目录结构并计算每个 inode 的实际链接计数,验证每个 inode 的链接计数。

存储在 inode 中的链接计数和由 fsck 命令确定的实际链接计数之间的差异可能是以下三种类型之一:

重复块检查

每个 inode 都包含由 inode 请求的所有块的列表或指向列表的指针(间接块)。由于间接块由 inode 拥有,因此间接块的不一致性问题会直接影响拥有间接块的 inode。

fsck 命令将 inode 请求的每个块编号与已分配块的列表进行比较。如果另一个 inode 已请求某个块编号,则将该块编号放置在重复块列表中。否则,会将已分配块的列表更新为包括该块编号。

如果发现重复块,则 fsck 命令再次遍历 inode 列表,以查找请求每个重复块的其他 inode。fsck 命令不能肯定哪个 inode 出现错误。因此,fsck 命令会提示您选择应保留和应清除的 inode。请注意,inode 中的大量重复块可能是由于未将间接块写入文件系统而导致的。

坏块编号检查

fsck 命令检查 inode 请求的每个块编号,以确定其值是否大于文件系统中第一个数据块的值并小于最后一个数据块的值。如果块编号超出了此范围,则认为它是坏块编号。

inode 中的坏块编号可能是由于未将间接块写入文件系统而导致的。fsck 命令会提示您清除 inode。

Inode 大小检查

每个 inode 都包含它所引用的数据块数的计数。实际数据块的数目等于已分配数据块与间接块的和。fsck 命令计算数据块数,并将该块计数与 inode 请求的块数进行比较。如果 inode 包含的计数不正确,则 fsck 命令会提示您修复它。

每个 inode 都包含一个 64 位大小的字段。此字段说明与 inode 关联的文件中的字符数(数据字节)。粗略检查 inode 的大小字段是否一致时,会使用大小字段中所示的字符数,以计算应与 inode 关联的块数,然后将该块数与 inode 请求的实际块数进行比较。