Was macht die Funktion "Extents" im ext4-Dateisystem unter Linux?

8

Ich habe über das ext4-Dateisystem gelesen, dass es Komprimierung, Verschlüsselung und eine Funktion namens extents unterstützt, mit der Speicherplatz gespart wird. Was sind Extents und wie können sie Speicherplatz sparen?

Prateek Joshi
quelle
„Extents zuweisen Speicherplatz auf einem Speichergerät in Blöcken und speichern nur die Startblockposition in der Inode - Tabelle. Dies hilft , Platz sparend in der Inode - Tabelle , indem nicht alle die Datenblöcke zum Speichern von Daten aus der Datei zur Liste mit“ . Siehe auch ext4 faq und IBMs ext4 Artikel
don_crissti

Antworten:

5

Durch das Ausmaß wird die Menge an Metadaten reduziert, die erforderlich sind, um die Datenblöcke für große Dateien zu verfolgen. Anstatt eine Liste jedes einzelnen Blocks zu speichern, aus dem die Datei besteht, besteht die Idee darin, nur die Adresse des ersten und letzten Blocks jedes fortlaufenden Blockbereichs zu speichern. Diese kontinuierlichen Bereiche von Datenblöcken (und die Zahlenpaare, die sie darstellen) werden als Extents bezeichnet .

Die Adressen der ersten Datenblöcke einer Datei werden im Inode gespeichert. Da der Inode jedoch eine feste Größe hat, funktioniert dies nur für kleine Dateien. In ext2 oder ext3 erfordern große Dateien die Verwendung indirekter Blöcke , um den Rest der Liste der Blockadressen zu speichern, die nicht in den Inode selbst passen. Das heißt, der Inode enthält die Adresse eines Blocks, der selbst eine Liste von Blöcken enthält. Diese werden als indirekte Blöcke bezeichnet . Diese zusätzlichen Blöcke werden normalerweise nicht benötigt, wenn Extents verwendet werden, da das Speichern eines Extents unabhängig von der Größe des beschriebenen Blockbereichs einen konstanten Speicherplatz beansprucht.

Eine sehr fragmentierte Datei benötigt möglicherweise noch zusätzliche Metadatenblöcke (die ext4 Extent-Knoten aufruft ), um eine lange Liste von Extents zu speichern, aber normalerweise immer noch viel weniger, als sonst benötigt würde.

Die Reduzierung der Metadatengröße ist jedoch im Verhältnis zur Dateigröße normalerweise recht gering. Die Hauptmotivation für Extents besteht darin, die Leistung zu verbessern (indem die Fragmentierung verringert wird und weniger Metadatenblöcke zum Lesen und Schreiben vorhanden sind), anstatt an sich Platz zu sparen.

Sengi
quelle
Nicht genau, denke ich. Normalerweise benötigen Sie noch indirekte Blöcke, aber die Anzahl der Metadaten (in Inode- und indirekten Blöcken zusammen) ist viel geringer (wenn das Dateisystem nicht extrem fragmentiert ist).
Philippos
1
Der Inode kann immer noch auf zusätzliche Blöcke verweisen, wenn zu viele Bereiche vorhanden sind, um in den Inode selbst zu passen. Sie werden jedoch eher als Ausdehnungsknoten als als indirekte Blöcke bezeichnet. Siehe ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Extent_Tree
sengi
1
@sengi - Ist der Zweck von Extents, nur die Anzahl der indirekten Blöcke zu reduzieren, die großen Dateien zugeordnet sind? Worauf beziehen sich Offset-Extents?
Motiviert
@Philippos - Wenn man die Antwort von sengi liest, deutet dies darauf hin, dass es keine indirekten Blöcke mehr gibt? Ist das dein Verständnis?
Motiviert
0

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

Frühere Ext2 und Ext3 hatten die Beschränkung der Größe der Datei. Es wurde eine 32-Bit-Blocknummer verwendet, um auf die Datenblöcke zuzugreifen. Damit wurde die maximale Dateigröße auf 2 ^ 32 * Blockgröße (z. B. 4k **) = 16 TB * begrenzt. Auch die Zugriffszeit für große Dateien war langsam, da in viel Indirektion durchlaufen werden musste. Das Ext4-Dateisystem kann sehr große Dateien unterstützen, es hat 48 Bit, um einen Block zu adressieren. Außerdem werden Extents zum Speichern von Daten verwendet, sodass die Zugriffszeit für große Dateien schneller ist.

Die Informationen für die Datenblöcke werden in den i_data der Inode-Struktur gespeichert. In einem System ohne Extents enthalten die ersten 12 Einträge die Blocknummern der ersten 12 Datenblöcke. Dann enthält es die Blocknummer für die indirekten Blöcke. Dieser Block enthält das Array von Blocknummern, die auf die Daten verweisen. Ebenso gibt es einen doppelten indirekten Block und einen dreifachen indirekten Block. Wenn wir also die Daten aus einer sehr großen Datei abrufen möchten, müssen wir diese Indirektion durchlaufen.

VaTo
quelle
4
Sie sollten Ihre Quellen zuordnen; in diesem Fall ext2read.blogspot.fr/2010/03/… anscheinend ...
Stephen Kitt