HTree 索引目录

HTree 索引目录

阅读 的手册页时chattr,我发现了I的标志Indexed Directory。经调查发现,这是指 HTree 索引目录,如这张纸。它说H一棚提供了与 BTree 类似的性能,但实现起来更简单。

在我的 Ubuntu 机器上的 home 中运行后lsattr,我注意到 Downloads 目录设置了 Indexed Directory 标志,但没有其他设置。我还注意到,这stat --format "%s" Downloads告诉我它的大小是 12 KiB,而不是我家中所有其他目录的 4 KiB。我在互联网上搜索了有关该主题的更多信息,但只得到了 2001 年的这篇论文。

该系统是 Ubuntu 19.10,内核为 5.3.0-26,位于 ext4 根目录上。

我的问题是:

  • HTree 和非 HTree 目录之间的实际区别是什么?
  • 我怎样才能创建它们?它是如何创建的?
  • 为什么没有目录是 HTree 目录?

答案1

在任何现代 ext3/ext4 文件系统中,所有大于单个文件系统块(通常为 4KB)的目录都将被索引。当目录增长到超出第一个块时,这种情况会自动发生。

除了添加比一个块所能容纳的更多条目(取决于文件名长度,可能是 60-100 个文件)之外,没有任何特定的方法来“创建”htree 目录。一旦目录变大,它就永远不会被 ext4 缩小,尽管有一些补丁可能有一天会实现这一点。

答案2

目前,删除immutable(i)父目录的属性后,indexed directory(I)可以直接删除具有该属性的子目录。 (分机4)

$ cat /etc/issue
Ubuntu 20.04 LTS \n \l

相关内容