如何增加范围树的深度?应该分配多少空间?更准确地说,我只需要深度大于 1。
最佳答案
在ext4中,一个inode默认使用60字节寻址4个extents(12bytes用于header + 4*12bytes用于extents)。每个范围最多可以容纳 128MiB 的数据(默认情况下)。 如果文件大于 4*128MiB(> 512MiB),ext4 会为此构建扩展树。因此,您将达到 depth = 1。
现在的问题是你什么时候能达到 depth=2。我尝试了一个 ~700MiB 的文件并检查了范围深度为 1。然后我打开了由范围索引的 fs-block 并分析了标题。
0A F3 06 00 54 01 00 00 00 00 00 00 00
它具有 f30A 的典型魔数(Magic Number),接下来的两个字节应指示盘区数。 (在这种情况下 = 6 这是有道理的,因为 700/128 = 6)。 接下来的 2 个字节 0154 应该指示最大范围数(根据 header 信息),在我的例子中达到 340。
-> 为什么是 340?如果我们查看 ext4 的实际文件系统 block 大小,默认为 4096 字节。 每个索引由 12 个字节组成。 340*12 = 4080 + 12 用于 header = 4092 因此它是可以放入此 fs-block 的最大扩展信息数。
如果我解释正确,您可以在此 fs-block 中保存多达 340 个其他指针/叶/索引。这 340 个中的每一个都指向一个范围(最多可容纳 128MiB) -> 因此得出:340*128MiB ~ 43,5 GiB
此外,每个 inode 最多可以容纳 4 个 extents。所以我想即使这个数字需要乘以 4。
-> so I think your file should be > 4*340*128MiB ~ 174GiB to reach depth=2
我还没有测试这个假设,但我会尽快尝试。同时,如果有人能证明我是错的,我也很高兴。 :)
关于linux - 在 ext4 中增加范围树的深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14383099/