inode 可以直接或间接引用三种数据块。引用的所有块必须属于同一种类。这三种类型的数据块如下:
纯文本数据块
符号链接数据块
目录数据块
纯文本数据块包含存储在文件中的信息。符号链接数据块包含存储在符号链接中的路径名。目录数据块包含目录项。fsck 命令只能检查目录数据块的有效性。
通过 inode 的 mode 字段中的项,可以将目录与常规文件区分开。与目录关联的数据块包含目录项。检查目录数据块是否存在一致性问题涉及以下内容:
指向未分配 inode 的目录 inode 编号
大于文件系统中 inode 数的目录 inode 编号
“.” 和 “..” 目录的错误目录 inode 编号
从文件系统断开的目录
如果目录数据块中的 inode 编号指向未分配的 inode,则 fsck 命令删除该目录项。如果修改并写出包含新目录项的数据块,但未写出 inode,则可能出现此情况。如果突然关闭 CPU,则可能出现此情况。
如果目录项 inode 编号超出了 inode 列表的范围,则 fsck 命令删除该目录项。将错误数据写入目录数据块时,可能出现此情况。
“.” 的目录 inode 编号项必须是目录数据块中的第一项。目录 inode 编号必须引用自身。即,其值必须等于目录数据块的 inode 编号。
“..” 的目录 inode 编号项必须是目录数据块中的第二项。目录的 inode 编号值必须等于父目录的 inode 编号或它自己的 inode 编号(如果该目录是根 (/) 目录)。
如果 “.” 和 “..” 的目录 inode 编号不正确,则 fsck 命令将它们替换为正确值。如果有多个硬链接指向一个目录,则将找到的第一个硬链接视为 “..” 应指向的实际父级。在这种情况下,fsck 命令建议您删除其他名称。
fsck 命令检查文件系统的常规连通性。如果找到未链接到文件系统的目录,则 fsck 命令将该目录链接到文件系统的 lost+found 目录。当 inode 已写入文件系统,但是对应的目录数据块未写入时,可能出现此情况。