Ich habe eine seltsame Frage an Sie.
Hat sich Ihr Linux-System jemals darüber beschwert, dass Sie keinen Platz mehr haben, obwohl Sie offensichtlich noch mehr als genug haben?
Es ist mir passiert, dass ich viele GB übrig hatte, aber mein Linux-System beschwerte sich, dass kein Speicherplatz mehr frei war. Dabei lernte ich Inodes kennen .
Inodes in Kürze
Inodes speichert Metadaten für jede Datei auf Ihrem System in einer tabellenartigen Struktur, die sich normalerweise am Anfang einer Partition befindet. Sie speichern alle Informationen außer dem Dateinamen und den Daten.
Jede Datei in einem bestimmten Verzeichnis ist ein Eintrag mit dem Dateinamen und der Inode-Nummer. Alle anderen Informationen über die Datei werden aus der Inode-Tabelle abgerufen, indem auf die Inode-Nummer verwiesen wird.
Inodes-Nummern sind auf Partitionsebene eindeutig. Jede Partition hat ihre eigene Inode-Tabelle.
Wenn Ihnen die Inodes ausgehen, können Sie keine neuen Dateien erstellen, selbst wenn auf der angegebenen Partition noch Speicherplatz vorhanden ist.
Was ist inode unter Linux?
Inode steht für Indexknoten. Obwohl sich die Geschichte darüber nicht ganz sicher ist, ist es die logischste und beste Vermutung, die sie sich ausgedacht haben. Früher wurde es I-node geschrieben , aber der Bindestrich ging mit der Zeit verloren.
Wie auf linfo.org beschrieben:
Ein Inode ist eine Datenstruktur … … die alle Informationen über eine Datei speichert außer seinem Namen und seinen eigentlichen Daten.
Inodes speichert Metadaten über die Datei, auf die es sich bezieht. Diese Metadaten enthalten alle Informationen über die besagte Datei.
- Größe
- Erlaubnis
- Eigentümer/Gruppe
- Speicherort der Festplatte
- Datum/Uhrzeit
- Sonstige Informationen
Jeder verwendete Inode verweist auf 1 Datei. Jede Datei hat 1 Inode. Verzeichnisse, Zeichendateien und Blockgeräte sind alle Dateien. Sie haben jeweils 1 Inode.
Für jede Datei in einem Verzeichnis gibt es einen Eintrag, der den Dateinamen und die damit verbundene Inode-Nummer enthält.
Inodes sind auf Partitionsebene eindeutig. Sie können zwei Dateien mit derselben Inode-Nummer haben, vorausgesetzt, sie befinden sich auf verschiedenen Partitionen. Inodes-Informationen werden in einer tabellenähnlichen Struktur in den strategischen Teilen jeder Partition gespeichert, die oft am Anfang zu finden sind.
Wie überprüfe ich Inode unter Linux?
Sie können die Inodes-Nummer einfach mit dem folgenden Befehl auflisten:
ls -i
Die folgenden Bilder zeigen mein Stammverzeichnis mit entsprechenden Inode-Nummern.
Die Anzahl der Inodes, die jedes Dateisystem hat, wird festgelegt, wenn Sie das Dateisystem erstellen. Für die meisten Benutzer ist die Standardanzahl von Inodes mehr als ausreichend.
Die Standardeinstellung beim Erstellen eines Dateisystems erstellt 1 Inode pro 2 KB Speicherplatz. Dies gibt viele Inodes für die meisten Systeme. Ihnen wird höchstwahrscheinlich der Speicherplatz ausgehen, bevor Ihnen die Inodes ausgehen. Bei Bedarf können Sie beim Erstellen eines Dateisystems angeben, wie viele Inodes erstellt werden sollen.
Wenn Ihnen die Inodes ausgehen, können Sie keine neuen Dateien erstellen. Auch Ihr System wird dazu nicht in der Lage sein. Dies ist eine Situation, auf die die meisten Benutzer nicht stoßen werden, aber es ist möglich.
Zum Beispiel speichert ein Mailserver eine große Menge sehr kleiner Dateien. Viele dieser Dateien werden weniger als 2 KB groß sein. Es wird auch erwartet, dass es ständig wächst. Daher besteht für einen Mailserver die Gefahr, dass ihm die Inodes ausgehen, bevor ihm der Speicherplatz ausgeht.
Einige Dateisysteme wie Btrfs, JFS, XFS haben dynamische Inodes implementiert. Sie können die Anzahl der verfügbaren Inodes bei Bedarf erhöhen.
Wie funktioniert Inode?
Wenn eine neue Datei erstellt wird, wird ihr eine Inode-Nummer und ein Dateiname zugewiesen. Eine Inode-Nummer ist eine eindeutige Nummer innerhalb dieses Dateisystems. Sowohl Name als auch Inode-Nummer werden als Einträge in einem Verzeichnis gespeichert.
Als ich den ls-Befehl „ls -li / ” Der Dateiname und die Inodes-Nummer wurden im Verzeichnis / gespeichert . Die restlichen Informationen Benutzer, Gruppe, Dateiberechtigungen, Größe usw. wurden anhand der Inode-Nummer aus der Inode-Tabelle abgerufen.
Sie können Inode-Informationen für jedes Dateisystem mit dem Befehl df unter Linux auflisten:
df -hi
Inodes &Soft/Hard-Link
Ein Softlink oder symbolischer Link ist ein bekanntes Merkmal von Linux. Aber was passiert mit Inodes, wenn Sie unter Linux einen symbolischen Link erstellen? Im nächsten Bild habe ich ein Verzeichnis namens „dir1 “, eine Datei namens „file1 “ und darin „dir1 ” Ich habe einen Softlink namens “slink1 “, was auf „../file1 zeigt „
Jetzt kann ich rekursiv auflisten und die Inode-Informationen anzeigen.
Wie erwartet haben dir1 und file1 unterschiedliche Inode-Nummern. Aber auch der Softlink. Wenn Sie einen Softlink erstellen, erstellen Sie eine neue Datei. In seinen Metadaten zeigt es auf das Ziel. Für jeden von Ihnen erstellten Softlink verwenden Sie einen Inode.
Nach dem Erstellen eines festen Links in dir1 mit dem ln-Befehl:
ln ../file1 hlink1
Die Auflistung der Inodes-Nummer gibt mir die folgenden Informationen:
Sie können diese „Datei1″ sehen und „hlink1 “ dieselbe Inode-Nummer haben. Ehrlich gesagt sind harte Links aufgrund von Inodes möglich. Ein fester Link erstellt keine neue Datei. Es bietet nur einen neuen Namen für die gleichen Daten.
In älteren Linux-Versionen war es möglich, ein Verzeichnis fest zu verknüpfen. Es war sogar möglich, ein bestimmtes Verzeichnis zu seinem eigenen übergeordneten Verzeichnis zu machen. Möglich wurde dies durch die Inode-Implementierung. Dies ist jetzt eingeschränkt, um zu verhindern, dass Benutzer eine sehr verwirrende Verzeichnisstruktur erstellen.
Andere Implikationen von Inodes
Die Art und Weise, wie Inodes funktionieren, ist auch der Grund, warum es unmöglich ist, eine feste Verbindung zwischen den verschiedenen Dateisystemen herzustellen. Das Zulassen einer solchen Aufgabe würde die Möglichkeit eröffnen, widersprüchliche Inode-Nummern zu haben. Ein Softlink hingegen kann über die verschiedenen Dateisysteme hinweg erstellt werden.
Da ein Hardlink dieselbe Inode-Nummer wie die Originaldatei hat, können Sie die Originaldatei löschen und die Daten sind weiterhin über den Hardlink verfügbar. In diesem Fall haben Sie lediglich einen der Namen entfernt, die auf diese Inode-Nummer verweisen. Die mit dieser Inode-Nummer verknüpften Daten bleiben verfügbar, bis alle damit verknüpften Namen gelöscht werden.
Inodes sind auch ein wichtiger Grund, warum ein Linux-System ohne Neustart aktualisiert werden kann. Dies liegt daran, dass ein Prozess eine Bibliotheksdatei verwenden kann, während ein anderer Prozess diese Datei durch eine neue Version ersetzt. Erstellen Sie daher einen neuen Inode für die neue Datei. Der bereits laufende Prozess wird weiterhin die alte Datei verwenden, während jeder neue Aufruf dazu führt, dass die neue Version verwendet wird.
Ein weiteres interessantes Feature von Inodes ist die Möglichkeit, die Daten im Inode selbst zu speichern. Dies wird als Inlining bezeichnet . Diese Speichermethode hat den Vorteil, Platz zu sparen, da kein Datenblock benötigt wird. Es erhöht auch die Suchzeit, indem mehr Festplattenzugriff zum Abrufen der Daten vermieden wird.
Einige Dateisysteme wie ext4 haben eine Option namens inline_data. Wenn es aktiviert ist, erlaubt es dem Betriebssystem, Daten auf diese Weise zu speichern. Aufgrund von Größenbeschränkungen funktioniert Inlining nur bei sehr kleinen Dateien. Ext2 und höher speichern häufig Softlink-Informationen auf diese Weise. Das heißt, wenn die Größe nicht mehr als 60 Bytes beträgt.
Fazit
Inodes sind nicht etwas, mit dem Sie direkt interagieren, aber sie spielen eine wichtige Rolle. Wenn eine Partition viele sehr kleine Dateien enthalten soll, wie ein Mail-Server, kann Ihnen das Wissen, was sie sind und wie sie funktionieren, später eine Menge Probleme ersparen.
Ich hoffe, Ihnen hat dieser Artikel gefallen und Sie haben etwas Neues und Wichtiges über Inode in Linux gelernt. Abonnieren Sie unsere Website, um weitere Linux-bezogene Informationen zu erhalten.