linux - 在 ext4 中增加范围树的深度

标签 linux filesystems ext4

如何增加范围树的深度?应该分配多少空间?更准确地说,我只需要深度大于 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/

相关文章:

linux - 如何在单行pssh中运行多个命令?

linux - 如何在 ebextensions 脚本中重启 Elastic Beanstalk 实例?

python - Python 中是否有允许在单个文件中管理虚拟文件系统的库?

Python:以比一秒更高分辨率获取文件修改时间

Ext4 FS : max file size

linux - 分区的文件系统丢失 EC2 重启

php - Linux 服务器上的内部服务器错误 (500) 和 PHP max_execution_time

c++ - 如何使用 C++ 浏览目录以创建文件资源管理器

linux - ext4 文件系统上 inode 的垃圾收集

linux - 安装 2 个版本时如何选择要使用的默认 Subversion (svn) 版本