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?
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?
Antworten:
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.
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.