我正在使用 EXT4,但我认为我的问题涉及所有 Unix/Linux 文件系统。
2022 年对“Ext4 中片段和范围之间的差异”的回答指出:
当相关文件全部位于一个目录中且分散在整个磁盘上时,就会出现外部碎片。如果您尝试读取目录中的每个文件,这可能会导致与内部碎片一样多的性能问题。 ext4fs 算法还尝试通过尝试为同一柱面组中的文件与同一目录中的其他文件分配块来最大程度地减少外部碎片。
我想知道这是否属实,因为:
我找不到任何其他来源来证实这一点。关于“外部碎片”的网络搜索结果通常指向 RAM 碎片,而指定“ext4 外部碎片”会带来一些答案,但通常是旧的(<2010)
2009 年的 Arch Linux 论坛帖子在 FS 上下文中给出了“外部碎片”的完全不同的定义:
碎片有两种类型,即内部碎片和外部碎片。内部碎片是指文件系统使用特定大小的块,例如4KB,因此如果您有一个大小只有1KB的文件,它将存储在一个4KB的块中,因此浪费了3KB的块。这确实无法避免。
外部碎片是指文件不是连续排列的,即分布在彼此相距很远的不同块上。因此,磁头需要更多的时间来收集所有碎片并重建文件。
到目前为止我的意见是:
之前引用的 StackExchange 2022 年答案是完全错误的
第二个引用的定义是正确的:
外部碎片是指文件不是连续排列的,即分布在彼此相距很远的不同块上。
并且不存在“尝试为同一柱面组中的文件与同一目录中的其他文件分配块”之类的事情(摘自第一个引用)。基本上,如果 FS(或操作系统)尝试对磁盘上同一目录的文件进行分组,则会与通常 FS(至少在 EXT4 的情况下)尝试用大量文件包围文件的事实相冲突。可用空间,以防止将来文件扩展时出现文件碎片。
有人可以确认我的结论是正确的(因此引用的 Stack Exchange 答案是错误的)吗?
[编辑]
经过更多研究后,我得出的结论是,术语“外部”和“内部”碎片从未在文件系统上下文中正式定义。一些资料来源在所用的意义上引用了它们在这篇 2009 年的 Arch Linux 帖子中或者这个 kernel.org 维基条目,而一些(甚至更少)来源引用它们,例如在 2022 年的这篇 StackExchange 帖子中。