ext4 中片段和范围的区别

ext4 中片段和范围的区别

在例如 ext4 fs 的上下文中,我经常偶然发现“片段”和“范围”这两个词。

它们似乎都与碎片有关,例如范围的解释相当广泛(废话)这里

他们之间有什么区别?

答案1

只是为了增加混乱,有两种片段和三种碎片。

  • 碎片文件是存储在多个块(或碎片,每个碎片可能是一个盘区)中的文件,因此当顺序读取文件时,操作系统必须从磁盘上的不同位置读取所有碎片,这会减慢文件的读取速度。 ext4fs 的算法通过尽可能连续地为文件分配块来尝试防止这种情况发生。具有多个范围的文件被称为碎片文件。然而,文件也可以存储为单个片段(即,不分段),它是连续块的列表,而不是范围。这就是片段和范围的关联方式。

  • 片段还可以是小于块的文件或小于块的文件的最后一块,该块与其他片段一起作为片段存储在完整块中。当块大小很大并且有大量小文件时,在单个块中存储多个文件片段可以节省大量空间,并可能提高性能,特别是当您尝试读取共享块的所有文件时。

从文件系统的角度来看,可以有内部碎片和外部碎片。

  • 内部碎片位于单个文件内,与上面的第一种碎片类型相同。

  • 当相关文件全部位于一个目录中且分散在整个磁盘上时,就会出现外部碎片。如果您尝试读取目录中的每个文件,这可能会导致与内部碎片一样多的性能问题。 ext4fs 算法还尝试通过尝试为同一柱面组中的文件与同一目录中的其他文件分配块来最大程度地减少外部碎片。

历史注释:

Linux ext4fs 是 ext3fs、ext2fs 和 extfs 的演变。 extfs 是基于(但不是基于)UFS 的。 UFS 基于 BSD 快速文件系统 (FFS)。上述算法是 FFS 中的关键算法,并且主要存在于 ext4 中,但 FFS 中的许多其他算法(尤其是那些处理旋转延迟的算法)已经过时,并且可能被 UFS 抛弃。上面的一些术语(至少)是 Linux 的两代,术语本身可能已经发生了变化,但算法仍然存在。

FFS 中的柱面组最初与磁道和扇区相关(用于旋转延迟优化),但实际上只是连续的柱面。至少 30 年来,块都没有清晰地映射到磁道/扇区,而且可能自从软盘很常见以来就没有。但柱面组仍然是连续的块组,并且仍然有助于优化寻道时间。寻道时间可能与固态磁盘无关,但连续块分配仍然有帮助。

柱面组的优化几乎是一种副作用(但却是有意为之),因为索引节点属于柱面组,并且目录中的索引节点倾向于按顺序分配,并且会尝试为目录中的索引节点分配块。同一气缸组。

请注意,柱面组并不是用于减少碎片引起的性能问题的唯一算法。甚至 FFS 也尝试延迟块分配,以尝试在文件内获得更大的连续块分配。

在 UNIX 中,术语“碎片”的使用总是很草率,如果不仔细阅读上下文,就很少或根本不清楚所指的是哪种类型的碎片。在搜索和参考 BSD 和 Linux 的多个历史文档后,我无法找到内部或外部碎片这个词的任何正式定义,并且它们的用法似乎从未固定,并且术语“碎片”本身有时被用来引用同时两种类型。

答案2

你已经引用过来源这解释了什么是范围。

对于片段来说,它是块的细分。这个概念是在FFS中引入的,并且在UFS中仍然存在,但在EXT4中不存在。

资料来源:

片段大小(Oracle):

创建或扩展文件时,会在完整逻辑块或称为片段的逻辑块部分中为它们分配磁盘空间。当文件需要磁盘空间时,首先分配完整的块,然后为剩余部分分配块的一个或多个片段。对于小文件,分配从碎片开始。

将块的片段而不是整个块分配给文件的能力通过减少由于块中未使用的孔而产生的磁盘空间碎片来节省空间。

您可以在创建 UFS 文件系统时定义片段大小。默认片段大小为 1 KB。每个块可分为 1、2、4 或 8 个片段,这导致片段大小从 8192 字节到 512 字节(仅适用于 4 KB 文件系统)。下限实际上与磁盘扇区大小相关,通常为 512 字节。

对于多 TB 文件系统,碎片大小必须等于文件系统块大小。

https://recoverhdd.com/blog/ufs1-and-ufs2-file-systems.html

FFS 的主要目的是将目录的所有内容(数据和元数据)合并到一个柱面组中。它将大大降低由于数据在磁盘表面上的严重分布而产生的碎片水平。然而,由于磁盘大小和存储在磁盘上的文件大小的快速增加,该解决方案不再有效,因为增加了块大小以将性能保持在适当的水平。因此,存储大量小文件会占用大量空间。

它再次迫使开发人员开发文件系统,并在 FFS 的基础上创建了修订版文件系统“UFS1”,以及后来的修订版“UFS2”,其创建可以提供可靠性和速度由于将块划分为片段,这些片段用于存储文件的最终字节(之前为此分配了整个块)以及一些新技术。

同样,这个概念在 EXT3/4 中不存在:

ext3 文件系统中的片段大小是多少?

ext3fs 不支持块碎片,因此一个字节文件将使用整个 4096 块。

相反,例如 UFS 在一个块中支持四个片段,因此小文件不会像在 ext3fs 上那样快地填充文件系统。

优化 ext4 分区以容纳数百万个 1KB 文件

AFAIK,ext4 对于你正在做的事情来说根本不是一个好的选择,因为它不支持块子分配。您确实应该考虑使用 UFS2 或 BtrFS。

请注意,# dumpe2fsEXT3/4 FS 将显示片段大小等于块大小:

# dumpe2fs /dev/sde1 
(...)
Block size:               4096
Fragment size:            4096
(...)

相关内容