Heim  >  Artikel  >  System-Tutorial  >  Dateimetadaten in Linux-Systemen: Ausführliche Erklärung des Inodes

Dateimetadaten in Linux-Systemen: Ausführliche Erklärung des Inodes

WBOY
WBOYnach vorne
2024-02-10 09:09:13563Durchsuche

Inode ist eine wichtige Datenstruktur in Linux-Systemen. Sie wird zum Speichern von Dateimetadaten wie Dateityp, Größe, Berechtigungen, Zeitstempel, Anzahl der Links, Speicherort des Datenblocks usw. verwendet. Inode ist die Kernkomponente des Dateisystems, die zum Erstellen, Löschen, Ändern, Durchsuchen und für andere Vorgänge an Dateien verwendet werden kann. In diesem Artikel stellen wir die Prinzipien und Eigenschaften von Inodes vor, einschließlich Inode-Nummerierung, Zuweisung, Freigabe, Suche, Indizierung usw., und geben Beispiele für ihre Verwendung und Vorsichtsmaßnahmen.

Dateiname -> Inode -> Geräteblock

Dateimetadaten in Linux-Systemen: Ausführliche Erklärung des Inodes

1. Was ist Inode?

Das Verständnis von Inodes beginnt mit der Dateispeicherung.

Dateien werden auf der Festplatte gespeichert. Die kleinste Speichereinheit der Festplatte wird „Sektor“ genannt. Jeder Sektor speichert 512 Byte (entspricht 0,5 KB).

Wenn das Betriebssystem die Festplatte liest, liest es sie nicht Sektor für Sektor, was zu ineffizient ist. Stattdessen liest es mehrere Sektoren gleichzeitig, d. h. einen „Block“ nach dem anderen. Dieser aus mehreren Sektoren bestehende „Block“ ist die kleinste Dateizugriffseinheit. Die gebräuchlichste Größe eines „Blocks“ beträgt 4 KB, d. h. acht aufeinanderfolgende Sektoren bilden einen Block.

Dateidaten werden in „Blöcken“ gespeichert, daher müssen wir natürlich auch einen Ort finden, an dem die Metainformationen der Datei gespeichert werden können, z. B. der Ersteller der Datei, das Erstellungsdatum der Datei, die Größe der Datei usw . Dieser Bereich, in dem Dateimetainformationen gespeichert werden, wird als Inode bezeichnet und seine chinesische Übersetzung lautet „Indexknoten“.

2. Inhalt von Inode

inode enthält Metainformationen der Datei, insbesondere den folgenden Inhalt:

* Die Anzahl der Bytes in der Datei

* Benutzer-ID des Dateieigentümers

* Gruppen-ID der Datei

* Lese-, Schreib- und Ausführungsberechtigungen für Dateien

* Es gibt drei Zeitstempel der Datei: ctime bezieht sich auf den Zeitpunkt, zu dem der Inode zuletzt geändert wurde, mtime bezieht sich auf den Zeitpunkt, zu dem der Dateiinhalt zuletzt geändert wurde, und atime bezieht sich auf den Zeitpunkt, zu dem die Datei zuletzt geöffnet wurde.

* Anzahl der Links, also wie viele Dateinamen auf diesen Inode verweisen

* Der Speicherort des Dateidatenblocks

Mit dem Befehl stat können Sie die Inode-Informationen einer bestimmten Datei anzeigen:

stat example.txt

Kurz gesagt, alle Dateiinformationen außer dem Dateinamen werden im Inode gespeichert. Warum es keinen Dateinamen gibt, wird unten ausführlich erläutert.

3. Inode-Größe

Inode verbraucht auch Festplattenspeicher, sodass das Betriebssystem die Festplatte beim Formatieren der Festplatte automatisch in zwei Bereiche aufteilt. Einer ist der Datenbereich, der Dateidaten speichert; der andere ist der Inode-Bereich (Inode-Tabelle), der die im Inode enthaltenen Informationen speichert.

Die Größe jedes Inode-Knotens beträgt im Allgemeinen 128 Byte oder 256 Byte. Die Gesamtzahl der Inode-Knoten wird bei der Formatierung angegeben, normalerweise wird alle 1 KB oder alle 2 KB ein Inode gesetzt. Angenommen, bei einer 1-GB-Festplatte beträgt die Größe jedes Inode-Knotens 128 Byte und für jeweils 1 KB ist ein Inode festgelegt. Dann erreicht die Größe der Inode-Tabelle 128 MB, was 12,8 % der gesamten Festplatte ausmacht.

Um die Gesamtzahl der Inodes in jeder Festplattenpartition und die Anzahl der verwendeten Inodes anzuzeigen, können Sie den Befehl df verwenden.

df -i

Um die Größe jedes Inode-Knotens anzuzeigen, können Sie den folgenden Befehl verwenden:

sudo dumpe2fs -h /dev/hda |

Da jede Datei einen Inode haben muss, kann es vorkommen, dass die Inodes aufgebraucht sind, die Festplatte aber nicht voll ist. Derzeit können keine neuen Dateien auf der Festplatte erstellt werden.

4. Inode-Nummer

Jeder Inode hat eine Nummer und das Betriebssystem verwendet die Inode-Nummer, um verschiedene Dateien zu identifizieren.

Es lohnt sich, es hier noch einmal zu wiederholen: Unix/Linux-Systeme verwenden intern keine Dateinamen, sondern Inode-Nummern, um Dateien zu identifizieren. Für das System ist der Dateiname lediglich ein Alias ​​oder Spitzname für die Inode-Nummer zur einfachen Identifizierung. Oberflächlich betrachtet öffnet der Benutzer die Datei über den Dateinamen. Tatsächlich ist der Prozess innerhalb des Systems in drei Schritte unterteilt: Erstens findet das System die Inode-Nummer, die dem Dateinamen entspricht. Zweitens erhält es die Inode-Informationen über die Inode-Nummer Block, in dem sich die Dateidaten befinden, und liest die Daten.

Verwenden Sie den Befehl ls -i, um die Inode-Nummer anzuzeigen, die dem Dateinamen entspricht:

ls -i example.txt

5. Verzeichnisdateien

In Unix/Linux-Systemen ist ein Verzeichnis auch eine Art Datei. Das Öffnen eines Verzeichnisses bedeutet eigentlich das Öffnen der Verzeichnisdatei.

Die Struktur einer Verzeichnisdatei ist sehr einfach, es handelt sich um eine Liste einer Reihe von Verzeichniseinträgen (dirent). Jeder Verzeichniseintrag besteht aus zwei Teilen: dem Dateinamen der enthaltenen Datei und der dem Dateinamen entsprechenden Inode-Nummer.

Der Befehl

ls listet nur alle Dateinamen in den Verzeichnisdateien auf:

ls /etc

Der Befehl

ls -i listet die gesamten Verzeichnisdateien auf, d. h. Dateinamen und Inode-Nummern:

ls -i /etc

Wenn Sie die detaillierten Informationen der Datei anzeigen möchten, müssen Sie auf den Inode-Knoten zugreifen und die Informationen entsprechend der Inode-Nummer lesen. Der Befehl ls -l listet detaillierte Informationen zu einer Datei auf.

ls -l /etc

6. Fester Link

Im Allgemeinen besteht zwischen Dateinamen und Inode-Nummern eine „Eins-zu-eins-Korrespondenz“-Beziehung, und jede Inode-Nummer entspricht einem Dateinamen. Allerdings erlauben Unix/Linux-Systeme, dass mehrere Dateinamen auf dieselbe Inode-Nummer verweisen. Dies bedeutet, dass auf den gleichen Inhalt mit unterschiedlichen Dateinamen zugegriffen werden kann. Das Ändern des Dateiinhalts wirkt sich auf alle Dateinamen aus. Das Löschen eines Dateinamens hat jedoch keinen Einfluss auf den Zugriff auf einen anderen Dateinamen. Diese Situation wird als „Hardlink“ bezeichnet.

Der Befehl

ln kann Hardlinks erstellen:

ln Quelldatei Zieldatei

Nachdem der obige Befehl ausgeführt wurde, sind die Inode-Nummern der Quelldatei und der Zieldatei gleich und verweisen auf denselben Inode. In den Inode-Informationen gibt es ein Element namens „Anzahl der Links“, das die Gesamtzahl der Dateinamen aufzeichnet, die auf den Inode verweisen, und zu diesem Zeitpunkt um 1 erhöht wird. Umgekehrt reduziert das Löschen eines Dateinamens die „Anzahl der Links“ im Inode-Knoten um 1. Wenn dieser Wert auf 0 sinkt, was darauf hinweist, dass kein Dateiname auf diesen Inode verweist, recycelt das System die Inode-Nummer und den entsprechenden Blockbereich.

Lassen Sie uns übrigens über die „Anzahl der Links“ der Verzeichnisdatei sprechen. Beim Erstellen eines Verzeichnisses werden standardmäßig zwei Verzeichniseinträge generiert: „.“ und „..“ Die Inode-Nummer des ersteren ist die Inode-Nummer des aktuellen Verzeichnisses, die dem „Hardlink“ des aktuellen Verzeichnisses entspricht. Die Inode-Nummer des letzteren ist die Inode-Nummer des übergeordneten Verzeichnisses des aktuellen Verzeichnisses entspricht dem „Hardlink“ des übergeordneten Verzeichnisses. Daher ist die Gesamtzahl der „Hardlinks“ eines Verzeichnisses immer gleich 2 plus der Gesamtzahl seiner Unterverzeichnisse (einschließlich versteckter Verzeichnisse). Die 2 sind hier die „Hardlinks“ des übergeordneten Verzeichnisses und die „Hardlinks“. des aktuellen Verzeichnisses.

7. Softlink

Neben Hardlinks gibt es einen Sonderfall. Obwohl die Inode-Nummern von Datei A und Datei B unterschiedlich sind, ist der Inhalt von Datei A der Pfad von Datei B. Beim Lesen von Datei A leitet das System den Besucher automatisch zu Datei B weiter. Unabhängig davon, welche Datei geöffnet wird, wird daher letztendlich Datei B gelesen. Zu diesem Zeitpunkt wird Datei A als „Softlink“ oder „symbolischer Link“ von Datei B bezeichnet.

Das bedeutet, dass die Existenz von Datei A von Datei B abhängt. Wenn Datei B gelöscht wird, wird beim Öffnen von Datei A ein Fehler gemeldet: „Keine solche Datei oder kein solches Verzeichnis“. Dies ist der größte Unterschied zwischen Softlinks und Hardlinks: Datei A zeigt auf den Dateinamen von Datei B, nicht auf die Inode-Nummer von Datei B. Die Inode-Linknummer von Datei B ändert sich dadurch nicht.

Der Befehl

ln -s kann Softlinks erstellen.

ln -s Quelldatei oder Zielverzeichnis, Zieldatei oder Zielverzeichnis

8. Sonderfunktionen von Inode

Aufgrund der Trennung von Inode-Nummer und Dateiname führt dieser Mechanismus zu einigen Phänomenen, die nur bei Unix/Linux-Systemen auftreten.

1. Manchmal enthält der Dateiname Sonderzeichen und kann nicht normal gelöscht werden. Zu diesem Zeitpunkt kann das direkte Löschen des Inode-Knotens die Rolle des Löschens der Datei spielen.

2. Das Verschieben oder Umbenennen von Dateien ändert nur den Dateinamen und hat keinen Einfluss auf die Inode-Nummer.

3. Nach dem Öffnen einer Datei identifiziert das System die Datei anhand der Inode-Nummer und berücksichtigt nicht mehr den Dateinamen. Daher kann das System im Allgemeinen den Dateinamen nicht aus der Inode-Nummer lernen.

Point 3 macht Software-Updates einfach. Es kann aktualisiert werden, ohne die Software zu schließen und ohne neu zu starten. Denn das System identifiziert laufende Dateien anhand der Inode-Nummer und nicht anhand des Dateinamens. Beim Aktualisieren generiert die neue Version der Datei einen neuen Inode mit demselben Dateinamen, der keine Auswirkungen auf die laufende Datei hat. Wenn Sie diese Software das nächste Mal ausführen, verweist der Dateiname automatisch auf die neue Version der Datei und der Inode der alten Version der Datei wird wiederverwendet.

Neun praktische Fragen

Beim Erstellen einer Datei in der /data-Partition eines Linux-Servers mit geringer Konfiguration (kleiner Speicher und kleine Festplatte) meldet das System, dass nicht genügend Speicherplatz vorhanden ist. Ich habe den Befehl df -h verwendet, um die Festplattennutzung zu überprüfen, und habe das festgestellt Die /data-Partition belegt nur noch 66 % und es sind noch 12 GB Speicherplatz vorhanden. Es liegt nahe, dass dieses Problem nicht auftreten wird. Später habe ich mit df -i den Indexknoten (Inode) der /data-Partition überprüft und festgestellt, dass er voll war (IUsed = 100 %), was dazu führte, dass das System keine neuen Verzeichnisse und Dateien erstellen konnte.

Finden Sie den Grund:

Im Verzeichnis /data/cache gibt es eine sehr große Anzahl kleiner Byte-Cache-Dateien, die nicht viele Blöcke, aber eine große Anzahl von Inodes belegen.

Lösung:
1. Löschen Sie einige Dateien im Verzeichnis /data/cache und geben Sie einige Inodes in der Partition /data frei.
2. Verwenden Sie eine Soft-Verbindung, um das Newcache-Verzeichnis in der freien Partition /opt mit /data/cache zu verbinden, und verwenden Sie den Inode der /opt-Partition, um das Problem unzureichender Inodes in der /data-Partition zu lindern:
ln -s /opt/newcache /data/cache

Durch diesen Artikel verstehen wir die Prinzipien und Eigenschaften von Inodes, die zum Verwalten und Betreiben von Dateien verwendet werden können. Wir sollten ein geeignetes Dateisystem basierend auf den tatsächlichen Anforderungen auswählen und einige Grundprinzipien befolgen, z. B. die Vermeidung einer Inode-Erschöpfung, die regelmäßige Überprüfung des Inode-Status, die Verwendung von Hardlinks oder Softlinks usw. Inode ist eines der grundlegendsten Konzepte im Linux-System. Es kann Dateien abstrahieren und kapseln und außerdem die Leistung und Zuverlässigkeit des Dateisystems verbessern. Ich hoffe, dass dieser Artikel für Sie hilfreich und inspirierend sein kann.

Das obige ist der detaillierte Inhalt vonDateimetadaten in Linux-Systemen: Ausführliche Erklärung des Inodes. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:lxlinux.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen