我的设置如下:
- Linux 内核 2.6.28
- e2fsprogs 1.42.7
- 64 GB 10 级 SD 卡
我正在尝试加快将整个卡格式化为 ext4 文件系统所需的时间。我的研究指出 mkfs.ext4 的lazy_itable_init=1 选项。如果我理解正确的话,这些选项将大大提高格式化 SD 卡分区的速度,但是这是通过将 inode 的初始化推迟到首次安装文件系统时来实现的。然后内核将在后台执行此初始化(仅限 v2.6.27+)
手册页中有关于此选项的以下句子:
此[标志]显着加快了文件系统初始化速度,但它要求内核在首次安装文件系统时在后台完成文件系统的初始化。
我的问题是,如果内核没有在后台完成文件系统的初始化会发生什么?
我通过使用lazy_itable_init = 1选项进行格式化,安装文件系统,然后不久后移除SD卡来测试这一点。当我再次插入卡时,我可以毫无问题地挂载分区并写入多个包含零的100 MB文件。这些被读回并且是正确的。
这只是侥幸吗?在经历了一系列事件之后,我能保证看到这种行为吗?
答案1
索引节点表用零初始化的原因是为了确保之前发生的任何垃圾不会被误解为有效的索引节点e2fsck
。通常它不会有任何区别,但如果e2fsck
检测到错误,它可能会尝试通过启发式识别 inode 来恢复,无论位图是否指示它们正在使用,因此它可能会尝试恢复无效的 inode,然后您必须从中删除这些 inode /丢失+找到。