linux的ext4文件系统中的“extents”功能有什么作用?

Pra*_*shi 12 filesystems ext4

我正在阅读有关 ext4 文件系统的信息,该文件系统支持压缩、加密和称为扩展区的功能,用于节省磁盘空间。什么是盘区?它们如何有效地节省磁盘空间?

sen*_*ngi 12

范围减少了跟踪大文件数据块所需的元数据量。这个想法不是存储组成文件的每个单独块的列表,而是只存储每个连续块范围的第一个和最后一个块的地址。这些连续范围的数据块(以及代表它们的数字对)称为范围

文件的前几个数据块的地址存储在 inode 中,但由于 inode 具有固定大小,因此这只适用于小文件。在 ext2 或 ext3 中,大文件需要使用间接块来存储不适合 inode 本身的块地址列表的其余部分。也就是说,inode 包含一个块的地址,该块本身包含一个块列表。这些被称为间接块。使用范围时通常不需要这些额外的块,因为无论它描述的块范围有多大,存储范围都会占用恒定量的空间。

一个非常碎片化的文件可能仍然需要额外的元数据块(ext4 称之为extent nodes)来存储一长串范围,但通常仍然比其他情况需要的少得多。

不过,元数据大小的减少与文件大小的比例通常很小。扩展区的主要动机是提高性能(通过减少碎片和减少读写的元数据块)而不是节省空间本身。


VaT*_*aTo 2

来自http://ext2read.blogspot.ch/2010/03/how-ext4-extents-work-earlier-ext2-and.html

早期的 Ext2 和 Ext3 对文件大小有限制。它使用 32 位块号来访问数据块。因此,文件的最大大小限制为 2^32 * 块大小(例如 4k**)= 16TB*。此外,大文件的访问时间很慢,因为必须经过大量间接寻址。Ext4 文件系统可以支持非常大的文件,它有 48 位来寻址一个块。它还使用范围来存储数据,因此大文件的访问时间更快。

数据块的信息存储在inode结构的i_data中。在没有盘区的系统中,前 12 个条目包含前 12 个数据块的块号。然后它包含间接块的块号。该块包含指向数据的块号数组。类似地,还有双重间接块和三重间接块。因此,如果我们需要从一个非常大的文件中获取数据,我们需要通过这些间接的方式。

  • 您应该注明来源;在这种情况下http://ext2read.blogspot.fr/2010/03/how-ext4-extents-work-earlier-ext2-and.html显然...... (5认同)