Unix/Linux 一般使用工具 fsck (意思为 filesystem check 或 filesystem consistency check) 来检查档案系统是否有问题和进行修复工作 (和 Windows/MSDOS 的磁盘扫瞄工具 SCANDISK/CHKDISK 类似),您可以使用系统管理员帐户 (即 root) 身份打「fsck 储存装置」来检查特定的储存装置。
Ext2/Ext3/Ext4 (e2fsck)
大部份档案系统的 fsck 都会用多重步骤 (multi-pass) 来进行检查工作。e2fsck 就有五重步骤[2]:
第一步:检查所有 inode 的一致性- 检查所有 inode 所表示档案和目录的 mode (包括档案类型和使用权限) 是否有效,所有区块 (block) 指标中的区块编号是否有效,inode 中的档案大小 (size count) 和区块数目 (block count) 栏是否正确以及多于一个 inode 使用同一个区块。在检查过程中,fsck 同时收集档案系统以下资料以方便进行往后的步骤:
记录那个 inode 确实正在使用,表示档案还是目录。
记录那个区块确实正在使用,和有没有多于一个 inode 使用同一个区块。
识别表示目录的 inode 所使用的资料区块 (data block)
第二步:检查所有目录- 使用第一步建立的纪录检查所有目录中资料,并在过程中同时同时收集各目录的父目录 inode:
每个目录项目的长度和档案/目录名称是否有效
目录中 inode 编号是否有效 (大于 1 和小于档案系统的 inode 总数)
目录中 inode 编号所指的 inode 是否正使用
第一个项目是 “.” 而且 inode 编号指向目录自己
第二个项目是 “..”
第三步:检查目录结构 - 先将根目录 (/) 标记为 “done”,并追踪所有目录 inode 的父目录 inode 直至一个已标记为 “done”的目录 inode。如果不成功或追踪过程访问同一目录 inode 多于一次 (表示为循环目录),e2fsck 会把目录移至lost+found 中。
第四步:检查所有 inode 的连结数目 (link count/reference counter) - 比较在第一步计算出来的连结数目和第二、三步的结果,把连结数目 0 的 inode 移至lost+found 中。
第五步:检查超级区块 (superblock) 的资料 - 比较超级区块的资料和前四步所计算的资料包括区块对应表 (block bitmaps) 和 inode 对应表 (inode bitmaps) 。如果不一样,将使用前四步所计算的资料修正超级区块的资料。
e2fsck 如检查有档案系统有问题,会尝试自动修复。修复出来的档案将存放在目录 lost+found 中。
# e2fsck -f /dev/sda7 e2fsck 1.41.3 (12-Oct-2008) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/sda7: 254995/720896 files (1.2%non-contiguous), 2814327/2879643 blocks