OS-Internals #2: Ext2 und Dateien in Linux
In Linux gibt es bezüglich Dingen wie Dateien, Ordnern, Geräten, Schnittstellen und Verknüpfungen eine schöne Regel: „On a UNIX system, everything is a file; if something is not a file, it is a process.“. Bei Linux ist also alles eine Datei (ja, auch Ordner sind Dateien), darum sollten wir mal einen genaueren Blick darauf werfen.
Dateisystem: ext2 und inodes
Da man Dateien nicht einfach hintereinander weg speichern kann (da sich z.B. die Größe ändern kann), greifen UNIX-Systeme meist auf das Konzept der inode (index node) zurück. Um zu verstehen, was eine inode ist, sollte man sich aber anschauen, wie z.B. das ext2
Dateisystem (welches inodes benutzt und auf dem viele weitere Dateisysteme basieren) funktioniert.
Zunächst zur Hardware: Ein Block ist eine Menge von Sektoren einer Festplatte, wobei ein Sektor die kleinste zu adressierende Einheit einer Festplatte ist. Ein Block ist normalerweise 1, 2, 4 oder 8 KiB groß (also ggf. ein Zusammenschluss von Sektoren), was bei der Formatierung der Festplatte angegeben wird. Fasst man mehrere Blöcke zusammen ist es eine block group.
Kommen wir jetzt zur inode, was im Prinzip nichts weiter als eine block group ist. Sie ist 128 bytes groß und enthält Metadaten und Referenzen auf weitere Blöcke.
Jede Datei ist eine Referenz auf genau eine inode, wobei die eigentlichen Daten eben in anderen inodes liegen und referenziert werden. Es gibt 12 direkte Referenzen und 3 weitere Referenzen, die jeweils auf cluster zeigen. Ein cluster enthält 256 Referenzen auf weitere cluster oder inodes. Dadurch kann eine Datei bis zu 2 TiB groß werden. (mehr …)