【问题标题】:increasing depth of extent tree in ext4在 ext4 中增加范围树的深度
【发布时间】:2013-01-17 16:02:52
【问题描述】:

如何增加范围树的深度?应该分配多少空间?更准确地说,我只需要深度大于 1。

【问题讨论】:

    标签: linux filesystems ext4


    【解决方案1】:

    在 ext4 中,inode 默认使用 60 字节来寻址 4 个扩展区(12 字节用于标头 + 4*12 字节用于扩展区)。每个范围最多可以容纳 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 的典型幻数,接下来的两个字节应指示扩展区的数量。 (在这种情况下=6,这是有道理的,因为 700/128 = 6)。 接下来的 2 个字节 0154 应指示最大范围数(根据标头信息),在我的情况下为 340。

    -> 那为什么是 340?如果我们查看 ext4 的实际 fs-block 大小,默认值为 4096 字节。 每个索引由 12 个字节组成。 340*12 = 4080 + 12 for header = 4092 所以它是可以放入这个 fs-block 的最大 extent-info 数。

    如果我的解释正确,您可以在这个 fs 块中保存多达 340 个其他指针/叶子/索引。这 340 个中的每一个都指一个范围(最多可容纳 128MiB) -> 所以它是:340*128MiB ~ 43,5 GiB

    此外,每个 inode 最多可以容纳 4 个扩展区。所以我猜这个数字需要乘以 4。

        -> so I think your file should be > 4*340*128MiB ~ 174GiB to reach depth=2
    

    我还没有测试这个假设,但我会尽快尝试。同时,如果有人能证明我错了,我也很高兴。 :)

    【讨论】:

    • 谢谢,如果真的是这样(我不明白为什么不应该这样),那真是太可悲了 :)) 无论如何,再次感谢,如果你在我做之前尝试过,让我知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2018-03-15
    • 2018-07-21
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    相关资源
    最近更新 更多