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 unixartigen 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 Programm-Ebene wird zwischen Gerätetreibern und der Eingabe von oder Ausgabe in eine Datei nicht mehr 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 der 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. Das Programm df (display free disk space, Anzeige der Festplattenbelegung) zeigt den zur Verfügung stehenden Speicherplatz an.

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 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 auf diesen Inode: Mehrere, auch unterschiedliche, Dateinamen können auf denselben Inode verweisen. Erst mit dem Löschen des letzten Verweises (Zähler=0) gilt die Datei als tatsächlich gelöscht, und der Speicherplatz wird zum Überschreiben freigegeben.
  • einen oder mehrere Verweise auf die Cluster, in denen die eigentlichen Daten gespeichert sind.

Beim Anzeigen eines Verzeichnisses in Langform (Befehl ls -l) erscheint in der ersten Spalte ein entsprechender Kennbuchstabe:

$ ls -l
-rw-rw-r-- 1 user group 4569 Nov 25  2011 file
-rwxrwxr-x 1 user group 3836 Nov 25  2011 executable
drwxrwxr-x 2 user group 4096 Apr  1 02:11 directory
lrwxrwxrwx 1 user group    4 Apr  1 02:12 symlink -> ../a
prw-rw-r-- 1 user group    0 Apr  2 09:34 named-pipe

Dateien[Bearbeiten]

Bei den eigentlichen Dateien handelt es sich sowohl um Anwenderdaten als auch um 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ünnbesetzte Dateien“, sog. sparse files, unterscheidet sich die logische Größe vom durch die Datenblöcke tatsächlich belegten Festplattenplatz.

Verzeichnisse[Bearbeiten]

Die Datenblöcke eines Verzeichnis-Inodes speichern die Zuordnung eines Namens zur Inodenummer pärchenweise als flache Tabelle. Für jedes Verzeichnis existieren immer die Einträge . für das aktuelle und .. für das übergeordnete Verzeichnis.

harte und symbolische Links[Bearbeiten]

  • Harter Link
  • Symbolischer Link

Weitere Arten von Inodes[Bearbeiten]

  • Gerätedateien

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.

Die Inode-Nummer einer Datei lässt sich mittels des Befehls ls -i Dateiname anzeigen.

Literatur[Bearbeiten]

Weblinks[Bearbeiten]

Anmerkungen[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.