Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Tutorial zur Inode-Nutzung unter Linux

Tutorial zur Inode-Nutzung unter Linux

巴扎黑
巴扎黑Original
2017-08-09 15:10:142191Durchsuche

Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zu Inodes in Linux ein. Die Einführung im Artikel ist sehr detailliert und bietet einen gewissen Referenz- und Lernwert für alle Freunde, die sie unten lesen können.

Hintergrund

Ich habe kürzlich Linux-Befehle überprüft, und als ich zu df ging, entdeckte ich etwas, das ich vorher ignoriert hatte. Das heißt, die Option -i listet die Inode-Informationen der Dateisystempartition auf. Was ist dieser Inode?

Wofür wird der Inode verwendet?

Der Inode ist der Bereich, der zum Speichern von Dateimetainformationen verwendet wird. Die chinesische Übersetzung heißt „Indexknoten“.

Hintergrundwissen über Inodes

Lassen Sie uns zunächst einige Inhalte zur Dateispeicherung durchgehen. Wir wissen, dass Dateien auf der Festplatte gespeichert werden. Die kleinste Speichereinheit der Festplatte wird auch als Sektor bezeichnet. Die Größe eines Sektors beträgt 512 Byte.

Wenn das Betriebssystem Informationen auf der Festplatte liest, liest es mehrere Sektoren gleichzeitig, und diese mehreren Sektoren werden auch Blöcke genannt. Normalerweise beträgt die Blockgröße 4 KB, also etwa 8 Sektoren. Es ist zu beachten, dass es sich bei den gelesenen Blöcken um zusammenhängende Leerzeichen handelt.

Zu diesem Zeitpunkt können wir wissen, dass Dateien in „Blöcken“ gespeichert werden. Genau wie beim Schreiben von C-Sprachprogrammen wissen wir, dass beim Deklarieren eines Arrays nicht nur der Wert gespeichert wird Wenn es in das Array eingefügt wird, werden auch die entsprechenden Array-Informationen gespeichert, z. B. die erste Adresse des Arrays, der Dateityp, die Array-Länge usw. Ebenso müssen Sie einen Ort zum Speichern der Metainformationen der Datei finden, ähnlich dem Informationen zur Dateierstellung, zur Länge der Datei usw. Und dieser Ort heißt Inode.

Der im Inode gespeicherte Inhalt

Der Inode enthält die Metainformationen der gespeicherten Datei, einschließlich dieser Inhalte:

  • Die Anzahl der Bytes in der Datei.

  • Die ID des Dateierstellers.

  • Gruppen-ID der Datei.

  • Lese- und Schreibberechtigungen für Dateien.

  • Der relevante Zeitstempel der Datei. Es gibt drei spezifische: ctime –>Der Zeitpunkt, zu dem der Inode zuletzt geändert wurde; mtime –>Der Zeitpunkt, zu dem der Dateiinhalt zuletzt geändert wurde; atime –>Der Zeitpunkt, zu dem die Datei zuletzt geöffnet wurde;

  • Anzahl der Links

  • Speicherort der Dateidaten blockieren

Inode-Nummer

Nachdem ich den oben genannten Speicherinhalt zum ersten Mal gesehen habe, denke ich, dass jeder die gleiche Frage haben wird. Da Inode dateibezogene Informationen speichert, warum nicht Dateien speichern? Der Name. Der Grund dafür ist, dass Dateinamen nicht der Standard für Unix/Linux-Betriebssysteme sind, um verschiedene Dateien zu identifizieren.

Das Betriebssystem identifiziert verschiedene Dateien anhand von Inode-Nummern.

In Unix/Linux-Systemen wird der Name der Benutzerebene zum Öffnen der Datei über den Dateinamen verwendet. Auf der Systemebene werden zum Öffnen der Datei hauptsächlich drei Schritte ausgeführt:

  • Suchen Sie anhand des Dateinamens die entsprechende Inode-Nummer.

  • Inode-Informationen über die Inode-Nummer abrufen.

  • Suchen Sie anhand der Inode-Informationen den Block, in dem die Dateidaten gespeichert sind, und trennen Sie die Daten.

Die Sonderfunktion von Inode

Im Unix/Linux-System die Inode-Nummer und -Datei Name getrennt. Dies hat zu einigen besonderen Phänomenen im System geführt:

  • Das Löschen des Inode-Knotens bedeutet das Löschen der Datei. Einige Dateien werden möglicherweise nicht korrekt gelöscht. In diesem Fall können wir den entsprechenden Inode-Knoten direkt löschen, um die Datei zu löschen.

  • Verschieben oder benennen Sie die Datei um, ohne die Inode-Nummer zu ändern, nur den Dateinamen.

  • Im Allgemeinen kann das System den Dateinamen nicht über die Inode-Nummer ermitteln. Wenn eine Datei geöffnet wird, identifiziert das System die Datei über den Inode und berücksichtigt den Dateinamen nicht mehr.

Aufgrund der Existenz der Inode-Nummer kann das System aktualisiert werden, ohne die Software zu schließen. Das System identifiziert laufende Dateien anhand der Inode-Nummern. Während des Aktualisierungsvorgangs sind Dateien mit demselben Dateinamen und neuem Inode vorhanden, ohne dass dies Auswirkungen auf die aktuell ausgeführten Dateien hat. Die ursprüngliche alte Version des Inodes wird beim nächsten Öffnen der Software recycelt und der Dateiname verweist automatisch auf die neue Inode-Nummer.

Inode-Platzbelegungsproblem

Da die Daten auch auf der Festplatte gespeichert sind, wird der Inode definitiv die Festplatte belegen Beim Formatieren der Festplatte unterteilt das Betriebssystem die Festplatte automatisch in zwei Bereiche:

  • Datenbereich

  • Inode-Tabelle

Der Datenbereich speichert hauptsächlich Dateidaten und der Inode-Tabellenbereich speichert Inode-Informationen.

Insbesondere wird die Größe des vom Inode belegten Bereichs bereits beim Formatieren der Festplatte vom Betriebssystem vorgegeben. Dies hat zur Folge, dass der Speicherplatz im Datenbereich nicht aufgebraucht ist, aber auf die Daten nicht mehr zugegriffen werden kann. Da der Inode-Tabellenbereich zu diesem Zeitpunkt voll ist, können keine neuen Dateien auf der Festplatte gespeichert werden.

Verzeichnisdatei

Wir wissen, dass unter Unix/Linux jede Ressource in Form einer Datei existiert. So auch der Katalog. Wenn wir ein Verzeichnis öffnen, öffnen wir tatsächlich die Verzeichnisdatei. Die Struktur einer Verzeichnisdatei ist eine Liste.

Verzeichniseintrag = Dateiname der eingebundenen Datei + entsprechende Inode-Nummer.

Hardlinks und Softlinks

Ich werde nicht auf die Einzelheiten eingehen, was ein Hardlink und was ein Softlink ist In diesem Blogbeitrag werde ich nicht auf Details eingehen, sondern es nur aus der Inode-Perspektive betrachten.

Aus Sicht der Inode-Nummer dürfen in Unix/Linux-Systemen mehrere Dateinamen auf dieselbe Inode-Nummer verweisen. Wenn zu diesem Zeitpunkt einer der Dateinamen gelöscht wird, hat dies keinen Einfluss auf den Zugriff auf den anderen Dateinamen. Wenn gleichzeitig die Datei über einen Dateinamen geöffnet und Änderungen vorgenommen werden, können die Änderungen für andere freigegeben werden Dateinamen werden geöffnet. Dann nennen Sie dies einen „Hardlink“. Unter Linux können wir über den Befehl ln feste Links erstellen.

Wie oben zusammengefasst, gibt es im Inode ein Speicherelement namens „Anzahl der Links“, das die Gesamtzahl der Dateinamen aufzeichnet, die nur den Inode benötigen. Wenn ein Dateiname erstellt wird, um über einen festen Link auf eine Datei zu verweisen, ist die Linknummer im Inode-Datenfeld, das der Datei entspricht, + 1 und umgekehrt – 1. Wenn dieser Wert 0 ist, verwendet das System standardmäßig keinen Dateinamen, der auf den Inode verweist. Zu diesem Zeitpunkt wird die Inode-Nummer recycelt und der entsprechende Blockbereich wird recycelt.

Was den entsprechenden Softlink betrifft, nehmen wir an, dass es Datei A und Datei B gibt und B ein Softlink von A ist. Zu diesem Zeitpunkt sind die Inode-Nummern von A und B unterschiedlich, da es sich um unterschiedliche Dateien handelt, aber! Der Inhalt von B ist der Pfad von A. Beim Lesen von B greift das System automatisch auf A zu, sodass unabhängig davon, welche Datei geöffnet wird, auf Datei A zugegriffen wird. Zu diesem Zeitpunkt wird Datei B als „Softlink“ oder „symbolischer Link“ zu Datei A bezeichnet.

In Unix/Linux-Systemen können wir Softlinks über den Befehl ln -s erstellen.

Zusammenfassung und kleine Ergänzungen

Durch die obige Beschreibung wissen wir, dass Inode wie die Zeigerdomäne in der C-Sprache ist, die Zeigerdomäne Es zeichnet eine Vielzahl von Informationen auf und leitet uns zum richtigen Dateispeicherort, um die erforderlichen Informationen zu lesen. (Natürlich ist es nicht genau dasselbe.)

Beim Erstellen eines Verzeichnisses in einem Unix/Linux-System werden automatisch zwei Verzeichniseinträge generiert:

  • .Verzeichnis

  • .. Verzeichnis

Sie können diese beiden Verzeichnisse mit dem Befehl ls -al beobachten. Die Inode-Nummer von „.directory“ ist die Inode-Nummer des aktuellen Verzeichnisses, die dem Hardlink des aktuellen Verzeichnisses entspricht, während die Inode-Nummer des Verzeichnisses „..“ die Inode-Nummer des übergeordneten Verzeichnisses ist aktuelles Verzeichnis, das dem Hardlink des übergeordneten Verzeichnisses entspricht. Gesamtzahl der Verzeichnis-Hardlinks = 2 + Gesamtzahl der Unterverzeichnisse (einschließlich versteckter Dateien).

Das obige ist der detaillierte Inhalt vonTutorial zur Inode-Nutzung unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn