增加ext4中的扩展树深度

时间:2013-01-17 16:02:52

标签: linux filesystems ext4

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

1 个答案:

答案 0 :(得分:1)

在ext4中,默认情况下,一个inode使用60个字节来寻址4个扩展区(标头为12字节,扩展区为4 * 12bytes)。每个范围都可以保存最高128MiB的数据(默认情况下)。 如果文件大于4 * 128MiB(> 512MiB),则ext4正在为此构建扩展树。因此,你将达到深度= 1。

现在问题是你何时达到深度= 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为什么340?如果我们查看ext4的实际fs-block大小,默认值是4096字节。 每个索引由12个字节组成。标头= 34092时,340 * 12 = 4080 + 12,因此它是可以容纳此fs块的最大范围信息数。

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

此外,每个inode最多可以容纳4个范围。所以我想这个数字需要乘以4。

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

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