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

数据块

inode 可以直接或间接引用三种数据块。引用的所有块必须属于同一种类。这三种类型的数据块如下:

纯文本数据块包含存储在文件中的信息。符号链接数据块包含存储在符号链接中的路径名。目录数据块包含目录项。fsck 命令只能检查目录数据块的有效性。

通过 inode 的 mode 字段中的项,可以将目录与常规文件区分开。与目录关联的数据块包含目录项。检查目录数据块是否存在一致性问题涉及以下内容:

未分配目录检查

如果目录数据块中的 inode 编号指向未分配的 inode,则 fsck 命令删除该目录项。如果修改并写出包含新目录项的数据块,但未写出 inode,则可能出现此情况。如果突然关闭 CPU,则可能出现此情况。

错误 Inode 编号检查

如果目录项 inode 编号超出了 inode 列表的范围,则 fsck 命令删除该目录项。将错误数据写入目录数据块时,可能出现此情况。

错误 “.” 和 “..” 项检查

.” 的目录 inode 编号项必须是目录数据块中的第一项。目录 inode 编号必须引用自身。即,其值必须等于目录数据块的 inode 编号。

..” 的目录 inode 编号项必须是目录数据块中的第二项。目录的 inode 编号值必须等于父目录的 inode 编号或它自己的 inode 编号(如果该目录是根 (/) 目录)。

如果 “.” 和 “..” 的目录 inode 编号不正确,则 fsck 命令将它们替换为正确值。如果有多个硬链接指向一个目录,则将找到的第一个硬链接视为 “..” 应指向的实际父级。在这种情况下,fsck 命令建议您删除其他名称。

断开的目录

fsck 命令检查文件系统的常规连通性。如果找到未链接到文件系统的目录,则 fsck 命令将该目录链接到文件系统的 lost+found 目录。当 inode 已写入文件系统,但是对应的目录数据块未写入时,可能出现此情况。