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 so auf genau einen Inode. Dieser wiederum verweist auf genau eine Datei oder ein Verzeichnis.

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.

Einordnung[Bearbeiten]

Schon beim Erzeugen eines Dateisystems auf einer Partition wird durch den Superblock die maximale Anzahl an Inodes und die Größe der von diesen verwalteten Datenblöcke festgelegt. Bevor das Dateisystem verwendet werden kann, findet durch das Betriebssystem (oder auch manuell) mit fsck (file system check) eine Prüfung auf eventuelle Fehler statt. Beim Starten des Kernels wird mindestens die root partition im Wurzelverzeichnis / (root directory) eingehängt. Für Programme und Anwender findet ab diesem Punkt jeder Dateizugriff über den Namen innerhalb einer hierarchischen Baumstruktur statt. Bei der Bezeichnung und Einordnung grundlegender Verzeichnisse folgen inzwischen viele Systeme dem Filesystem Hierarchy Standard (FHS). Die Zuordnung von Programmen wie /bin/ls oder Verzeichnissen wie /home/user/beispiel/ zu den entsprechenden Inodes findet durch das zum jeweiligen Dateisystem passende Kernel-Modul statt.

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 letzten Status-Änderung des Inodes (status, ctime);
  • die Größe der Datei;
  • der 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 tabellarische Liste der darin enthaltenen Dateien besteht. Die Tabelle enthält dabei eine Spalte mit den Dateinamen und eine Spalte mit den zugehörigen Inodenummer. Bei manchen Dateisystemen umfasst die Tabelle noch weitere Informationen, so speichert ext4 darin auch den Dateityp aller enthaltenen Dateien ab, so dass diese 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 keinen Programm mehr geöffnet ist und erst anschließend der Speicherplatz freigegeben.

Weitere Arten von Dateien[Bearbeiten]

Neben diesen üblichen Dateien existieren weitere Dateitypen:

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

Im Betriebssystem existiert eine Tabelle mit allen aktuellen Inodes. Ferner ist es möglich, Listen aller nichtbelegten Inodes zu erstellen.

Praxis[Bearbeiten]

Die Inode-Nummer einer Datei lässt sich mittels des Befehls ls -i Dateiname anzeigen. 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 Dateisystem an. Das Programm find bietet die Option -inum um nach Dateien mit einer speziellen Inodenumer 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 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 also beim formatieren bereits darauf achten die Anzahl der Inodes hoch genug zu wählen.

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. 1. Auflage. O’Reilly Verlag, 1995, ISBN 1-56592-127-5, S. 37.
  2.  Æleen Frisch: Essential System Administration. 1. Auflage. O’Reilly Verlag, 1995, ISBN 1-56592-127-5, S. 38.