阅读 的手册页时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