Inode

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Dieser Artikel behandelt den Inode in der Informatik; zur österreichischen Marke Inode für Breitband-Internet siehe UPC Austria.

Ein Inode (englisch index node, gesprochen „eye-node“)[1] ist die grundlegende Datenstruktur zur Verwaltung von Dateisystemen mit unixoiden Betriebssystemen. Jeder Inode wird innerhalb einer Partition eindeutig durch seine Inode-Nummer identifiziert. Jeder Namenseintrag in einem Verzeichnis verweist auf genau einen Inode. Dieser enthält die Metadaten der Datei und verweist auf die Daten der Datei beziehungsweise die Dateiliste des Verzeichnisses.

Auf der Anwendungsebene wird dann beim Lesen oder Schreiben von Daten nicht mehr zwischen Geräten und regulären Dateien unterschieden. Durch das Inode-Konzept gilt bei den Unixvarianten alles als Datei („On UNIX systems it is reasonably safe to say that everything is a file: …“).[2] Dadurch unterscheiden sich diese Systeme von anderen wie NTFS bei Microsoft Windows, VMS oder MVS.

Grundsätzliches[Bearbeiten]

Speichert man eine Datei auf einem Computer ab, so muss nicht nur der Dateiinhalt (Nutzdaten) gespeichert werden, sondern auch Metadaten, wie zum Beispiel der Zeitpunkt der Dateierstellung oder der Besitzer der Datei. Gleichzeitig muss der Computer einem Dateinamen – inklusive Dateipfad – die entsprechenden Nutzdaten und Metadaten effizient zuordnen können. Die Spezifikation, wie diese Daten organisiert und auf einem Datenträger gespeichert werden, nennt man Dateisystem. Dabei gibt es abhängig von Einsatzbereich und Betriebssystem unterschiedliche Dateisysteme. Umgesetzt wird die Dateisystemspezifikation von einem Treiber, der wahlweise als ein Kernel-Modul des Betriebssystemkern (Kernel) oder seltener als gewöhnliches Programm im Userspace umgesetzt sein kann.

Grobe Struktur des Unix-Dateisystems

Dateisystemen unixoider Betriebssysteme – wie Linux und Mac OS X – verwenden sogenannte Inodes. Diese enthalten die Metadaten sowie Verweise darauf, wo Nutzdaten gespeichert sind. An einem speziellen Ort des Dateisystems, dem Superblock, wird wiederum die Größe, Anzahl und Lage der Inodes gespeichert. Die Inodes sind durchnummeriert und an einem Stück auf dem Datenträger gespeichert. Das Wurzelverzeichnis eines Dateisystems besitzt eine feste Inodenummer. Unterordner sind „gewöhnliche“ Dateien, welche eine Liste der darin enthaltenen Dateien mit der Zuordnung der dazu gehörenden Inodenummern als Nutzdaten enthalten.

Soll also beispielsweise die Datei /usr/bin/ls geöffnet werden, so läuft dies, vereinfacht, wie folgt ab:

  • Der Dateisystemtreiber liest den Superblock aus, dadurch erfährt er die Startposition der Inodes und deren Länge, somit kann nun jeder beliebige Inode gefunden und gelesen werden.
  • Nun wird der Inode des Wurzelverzeichnisses geöffnet werden. Da dies ein Ordner ist, befindet sich darin ein Verweis auf die Speicherstelle der Liste aller darin enthaltenen Dateien mitsamt ihren Inodenummern. Darin wird das Verzeichnis usr gesucht.
  • Nun kann der Inode des usr-Verzeichnisses gelesen werden und analog zum letzten Schritt der Inode der Datei ls gefunden werden.
  • Da es sich bei der Datei ls nicht um ein Verzeichnis, sondern eine reguläre Datei handelt, enthält ihr Inode nun einen Verweis auf die Speicherstelle der gewünschten Daten.

Aufbau[Bearbeiten]

Jedem einzelnen von einem Schrägstrich / (slash) begrenzten Namen ist genau ein Inode zugeordnet. Dieser speichert folgende Metainformationen zur Datei, aber nicht den eigentlichen Namen:

  • Die Art der Datei (reguläre Datei, Verzeichnis, Symbolischer Link, …), siehe unten;
  • die nummerische Kennung des Eigentümers (UID, user id) und der Gruppe (GID, group id);
  • die Zugriffsrechte für den Eigentümer (user), die Gruppe (group) und alle anderen (others);
    Die klassische Benutzer- und Rechteverwaltung geschieht mit den Programmen chown (change owner), chgrp (change group) und chmod (change mode). Durch Access Control Lists (ACL) wird eine feinere Rechtevergabe ermöglicht.
  • verschiedene Zeitpunkte der Datei: Erstellung, Zugriff (access time, atime) und letzte Änderung (modification time, mtime);
  • die Zeit der letzten Status-Änderung des Inodes (status, ctime);
  • die Größe der Datei;
  • den Linkzähler (siehe unten);
  • einen oder mehrere Verweise auf die Blöcke, in denen die eigentlichen Daten gespeichert sind.

Reguläre Dateien[Bearbeiten]

Reguläre Dateien (engl. regular files) sind sowohl Anwenderdaten als auch ausführbare Programme. Letztere sind durch das executable-Recht gekennzeichnet und werden beim Aufruf durch das System in einem eigenen Prozess gestartet. Als „ausführbar“ gelten nicht nur kompilierte Programme, sondern auch Skripte, bei denen der Shebang den zu verwendenden Interpreter angibt. Bei „dünnbesetzten Dateien“, sogenannten sparse files, unterscheidet sich die logische Größe vom durch die Datenblöcke tatsächlich belegten Festplattenplatz.

Verzeichnisse[Bearbeiten]

Verzeichnisse sind Dateien, deren „Dateiinhalt“ aus einer tabellarischen Liste der darin enthaltenen Dateien besteht. Die Tabelle enthält dabei eine Spalte mit den Dateinamen und eine Spalte mit den zugehörigen Inodenummern. Bei manchen Dateisystemen umfasst die Tabelle noch weitere Informationen, so speichert ext4 darin auch den Dateityp aller enthaltenen Dateien ab, so dass dieser beim Auflisten eines Verzeichnisinhalts nicht aus den Inodes aller Dateien ausgelesen werden muss. Für jedes Verzeichnis existieren immer die Einträge . als Verweise auf das aktuelle und .. für das übergeordnete Verzeichnis.

Harte und symbolische Links[Bearbeiten]

Bei symbolischen Links handelt es sich um spezielle Dateien, die anstelle von Daten einen Dateipfad enthalten, auf den der Link verweist. Je nach Dateisystem und Länge des Dateipfads wird der Link entweder direkt im Inode gespeichert oder in einem Datenblock, auf welchen der Inode verweist.

Bei Harten Links hingegen handelt es sich nicht um spezielle Dateien. Von einem Harten Link spricht man, wenn auf einen Inode mehrfach von verschiedenen Ordnern oder verschiedenen Dateinamen verwiesen wird. Alle Verweise auf den Inode sind gleichwertig, es gibt also kein Original. Im Inode gibt der Linkzähler an, wie viele Dateiennamen auf diesen verweisen, er steht nach dem Anlegen einer Datei also bei 1 und wird erhöht, sobald weitere Hardlinks für diese Datei erstellt werden. Bei einem Verzeichnis beträgt er zwei mehr, als Unterordner darin enthalten sind, da es neben dem Eintrag im Ordner darüber und dem Eintrag '.' im Ordner noch die Einträge '..' in allen Unterordnern darauf verweisen. Wird eine Datei gelöscht, so wird ihr Eintrag aus dem übergeordneten Verzeichnis entfernt und der Linkzähler um eins reduziert. Beträgt der Linkzähler dann 0, wird gegebenenfalls abgewartet, bis die Datei von keinem Programm mehr geöffnet ist, und erst anschließend der Speicherplatz freigegeben.

Weitere Arten von Dateien[Bearbeiten]

Neben diesen üblichen Dateien existieren weitere Dateitypen:

Verweis auf die Daten[Bearbeiten]

Bei älteren Dateisystemen enthält der Inode üblicherweise eine begrenzte Anzahl von Einträgen auf Datenblöcke, in welchen sich die Nutzdaten der Datei befinden. Da die Anzahl der Einträge im Inode somit die Dateigröße stark begrenzen würde, wird für größere Dateien im Inode ein Verweis auf einen Datenblock gespeichert, in welchem anstatt Nutzdaten wiederum eine Liste mit Verweisen auf Datenblöcken gespeichert ist. Dieses Prinzip kann theoretisch beliebig ineinander verschachtelt wiederholt werden.

Modernere Dateisysteme haben alternativ dazu sogenannte Extents, dabei werden im Inode nur die Nummer des ersten und die des letzten Blocks eines zusammenhängenden Bereichs an Datenblöcken gespeichert. Ist die Datei also nicht fragmentiert, so müssen unabhängig von der Dateigröße nur zwei Block-Ids gespeichert werden: die Nummer des ersten Datenblocks und die Nummer des letzten Datenblocks.

Beispiel[Bearbeiten]

Bei dem Dateisystem ext2 verweisen standardmäßig bis zu 12 Einträge im Inode einer regulären Datei auf je einen Datenblock, in dem der eigentliche Inhalt gespeichert ist. Reichen diese 12 Blöcke nicht aus, zeigt ein Eintrag im Inode auf einen Cluster, der dann die Verweise zu den eigentlichen Datenclustern enthält. Ein solcher Verweis wird als einfach indirekter Block bezeichnet. Bis zu dreifach indirekte Blöcke sind möglich, so dass die maximale Dateigröße je nach Blockgröße zwischen 16 GiB und 4 TiB liegen kann.

Beispiel einer Inode-Struktur mit 12 KiB in direkt adressierten Datenblöcken und ungefähr 16 Millionen KiB + 65536 KiB + 256 KiB in indirekt adressierten Datenblöcken/Clustern mit jeweils einem KiB Größe:

Die 256 Einträge in den Blöcken, auf die verwiesen wird, ergeben sich daraus, dass ein 1-KiB-Block genau 256 Adressen der Länge 4 Byte (32-Bit-Adressraum) enthalten kann.

Inode Struktur

Praxis[Bearbeiten]

Die Inodenummer einer Datei lässt sich mittels des Befehls ls -i Dateiname anzeigen. Das Programm find bietet die Option -inum, um nach Dateien mit einer speziellen Inodenummer zu suchen.

Die in einem Inode gespeicherten Metadaten können mit dem Befehl stat angezeigt werden. Das Tool debugfs kennt den Befehl stat <[inodenumer]>, um die im Inode gespeicherten Daten anzuzeigen.

Die Anzahl der möglichen Inodes und somit der möglichen Dateien ist bei manchen Dateisystemen beschränkt; wird die Maximalanzahl erreicht, lassen sich keine weiteren Dateien anlegen. Beim Erstellen von ext2/ext3/ext4-Dateisystemen lässt sich die Anzahl der Inodes einstellen. Bei Datenträgern mit sehr vielen kleinen Dateien muss man also beim Formatieren bereits darauf achten, die Anzahl der Inodes hoch genug zu wählen. Das Programm df (display free disk space, Anzeige der Festplattenbelegung) zeigt mit der Option -i die Anzahl der belegten und verfügbaren Inodes auf allen gemounteten Dateisystemen an.

Dateisysteme haben in der Regel ein fsck-Programm, welches unter anderem die Inodes auf Inkonsistenzen überprüft. Unter Linux besitzen diese den Namen fsck.Dateisystemname, das Programm fsck versucht den Dateisystemtyp zu ermitteln und ruft dann das entsprechende Programm auf.

Literatur[Bearbeiten]

  •  Æleen Frisch: Essential System Administration. 3. Auflage. O’Reilly Media, 2002, ISBN 978-0-596-00343-2.

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1.  Æleen Frisch: Essential System Administration. 2. Auflage. O’Reilly Verlag, 1995, ISBN 1-56592-127-5, S. 37.
  2.  Æleen Frisch: Essential System Administration. 2. Auflage. O’Reilly Verlag, 1995, ISBN 1-56592-127-5, S. 38.