最近一直在熟悉e2fsck的实现过程,为后续快速fsck在用户态的实现做点准备。源码功能细节部分暂时就不贴了,可能多数人也并不关心,将文档基本功能部分分享给大家。
2.1 工具基本结构组成
2.1.1 Pass 1:inode表的检查
检测整个文件系统中的inode, 主要检查以下内容
1) Inode的mode field是否合法;
2) Inode 记录的size和块计数(blockcount)是否正确;
3) 对于device fifo或socket其 size应该为0,如果没有记录则直接置0再写回。
4) 数据block是否有被其他的inode引用(不允许出现);
5) 收集以下信息数据,主要是方便后续其它过程不再读取inode:
inode_used_map:已使用的inode的bitmap
inode_dir_map: 记录的是目录的inode的bitmap
inode_reg_map:记录的是普通文件的inode的bitmap(reg 指regular)
inode_bad_map:记录中出现bad field的inode 的bitmap
inode_bb_map: 记录的是坏块的inode 的bitmap
inode_imagic_map:记录的是imagic的inode的bitmap
block_found_map:已使用的block的bitmap
block_dup_map:被多个inode使用的block
dir_map: 目录inode 的数据块(data block)
备注:如果后续查出不一致性ÿ