Articles

Detailliertes Verständnis von Linux-Inodes mit Beispiel

Linux und andere Unix-ähnliche Betriebssysteme halten die Konsistenz aufrecht, indem sie alles als Datei behandeln (sogar die Hardwaregeräte). Die Tastatur, Maus, Drucker, Monitor, Festplatte, Prozesse, auch die Verzeichnisse werden als Dateien in Linux behandelt. Die regulären Dateien enthalten Daten wie Text (Textdateien), Musik, Videos (Multimediadateien) usw.

Neben den regulären Daten gibt es noch einige andere Daten zu diesen Dateien, z. B. Größe, Besitz, Berechtigungen, Zeitstempel usw. Diese Metadaten zu einer Datei werden mit einer Datenstruktur verwaltet, die als Inode (Indexknoten) bezeichnet wird.

Was ist ein Inode unter Linux?

Jede Linux-Datei oder jedes Linux-Verzeichnis (aus technischer Sicht gibt es keinen wirklichen Unterschied zwischen ihnen) hat einen Inode, und dieser Inode enthält alle Metadaten der Datei (dh alle administrativen Daten, die zum Lesen einer Datei benötigt werden, werden in seinem Inode gespeichert).

Der Inode enthält beispielsweise eine Liste aller Blöcke, in denen eine Datei gespeichert ist, die Eigentümerinformationen für diese Datei, Berechtigungen und alle anderen Attribute, die für die Datei festgelegt sind.

Inode-Limits gelten pro Dateisystem und werden zum Zeitpunkt der Erstellung des Dateisystems festgelegt. Die maximale Verzeichnisgröße hängt vom Dateisystem ab und somit unterscheidet sich die genaue Grenze.

Für eine bessere Leistung verkleinern Sie Ihre Verzeichnisse, indem Sie Dateien in Unterverzeichnisse sortieren, anstatt ein großes Verzeichnis zu haben.

Was ist eine Inode-Nummer?

Die Inode-Nummer wird auch als Indexnummer bezeichnet. Ein Inode ist eine eindeutige Nummer, die Dateien und Verzeichnissen zugewiesen wird, während sie erstellt werden. Die Inode-Nummer ist für das gesamte Dateisystem eindeutig.

Ein Inode ist eine Datenstruktur auf einem traditionellen Dateisystem im Unix-Stil wie ext3 oder ext4. speichern der Eigenschaften einer Datei und Verzeichnisse.

Erweiterte Linux-Dateisysteme wie ext3 oder ext4 verwalten ein Array dieser Inodes, die Inode-Tabelle. Diese Tabelle enthält eine Liste aller Dateien in diesem Dateisystem. Die einzelnen Inodes in der Inode-Tabelle haben eine eindeutige Nummer (eindeutig für dieses Dateisystem), die als Inode-Nummer bezeichnet wird.

Die folgenden Informationen werden in Inode gespeichert:

  • Dateityp: reguläre Datei, Verzeichnis, Pipe usw.
  • Berechtigungen für diese Datei: lesen, schreiben, ausführen
  • Linkanzahl: Die Anzahl der Hardlinks relativ zu einem Inode
  • Benutzer-ID: Eigentümer der Datei
  • Gruppen-ID: Gruppenbesitzer
  • Dateigröße: oder Major /Minor-Nummer bei einigen speziellen Dateien
  • Zeitstempel: Zugriffszeit, Änderungszeit und (Inode-) Änderungszeit
  • Attribute: unveränderlich‘ zum Beispiel
  • Zugriffskontrollliste: Berechtigungen für spezielle Benutzer/Gruppen
  • /li>
  • Link zum Speicherort der Datei
  • Andere Metadaten zur Datei

Beachten Sie, dass der Inode nicht den Namen der Datei, sondern nur ihren Inhalt speichert.

Diagramm der Inode-Datenstruktur

So überprüfen Sie Inode unter Linux

Wenn Sie sich Inodes ansehen möchten, können Sie auf jedem ext-Dateisystem die folgenden Befehle verwenden, um die Eigenschaften des Dateisystems und der darin verwendeten Dateien.

a. Dateidateninformationen anzeigen

Sie können die Inode-Daten in einer Datei oder einem Verzeichnis mit dem Befehl stat anzeigen.

Sie müssen den Namen der Datei wie folgt angeben:

Die stat-Ausgabe zeigt Ihnen die verschiedenen Zeitstempel der Datei, ihren Besitz und ihre Berechtigungen sowie den Speicherort an. Die Daten der Datei werden im Festplattenblock gespeichert, der in der stat-Befehlsausgabe des Inode angezeigt wird.

Sie können nur die Inode-Nummer einer Datei mit der Option --format wie folgt auflisten:

# stat --format=%i hello530461

b. Indexnummer der Dateien drucken

Der Befehl ls wird verwendet, um Datei- und Verzeichnisinformationen aufzulisten. Die -i Option mit ls zeigt die Inode-Nummer jeder Datei an. Wir können es mit -l Option kombinieren, um Informationen im Detail aufzulisten

# ls -iltotal 140984520170 dr-xrw-rw- 2 linoadmin linoadmin 4096 Mar 9 2013 asciiquarium_1.1263206 -rwxr-xr-x 1 linoadmin linoadmin 15436 Mar 9 2013 asciiquarium.tar.gz519187 drwxr----- 2 root root 4096 Apr 13 01:35-rwSr--r-- 1 root root 5747 Apr 25 01:45 bootstrap655799 drwxr-xr-x 2 root root 4096 May 16 17:46 course528927 drwxr-xr-x 3 root root 4096 Apr 29 00:29 environments

Die erste Spalte gibt die Inode-Nummer an. Sie können den Inode einer bestimmten Datei wie folgt anzeigen:

# ls -i continue.sh 519450 continue.sh

c. Informationen zum Dateisystem-Inode-Speicherplatz anzeigen

Standardmäßig fasst der Befehl df den verfügbaren und verwendeten Speicherplatz zusammen. Sie können stattdessen einen Bericht über verfügbare und verwendete Inodes erhalten, indem Sie die Option -i oder --inodes .

Diese Informationen können hilfreich sein, wenn eine Partition sehr viele kleine Dateien enthält, die die verfügbaren Inodes früher erschöpfen können, als sie den verfügbaren Speicherplatz erschöpfen.

d. Listen Sie den Inhalt des Dateisystem-Superblocks auf

Sie können den Befehl tune2fs -l verwenden, um alle Informationen zum Inode anzuzeigen.

# tune2fs -l /dev/sda6 | grep inodeFilesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isizeFree inodes: 2224350First inode: 11Journal inode: 8First orphan inode: 1575905Journal backup: inode blocks

e. Manipulieren Sie die Dateisystem-Metadaten

Sie können den Inhalt eines Inode sehen, wie er auf einem Ext4-Dateisystem mit dem Befehl debugfs vorhanden ist. Sie müssen den Befehl stat verwenden, der im Dateisystem-Debugger verfügbar ist, um den Inhalt des Inodes anzuzeigen. Wenn Sie fertig sind, verwenden Sie exit, um die debugfs-Umgebung zu schließen.

Stellen Sie sicher, dass während der Arbeit in debugfs nicht auf Dateien im Dateisystem zugegriffen werden kann. Sie sollten erwägen, das Dateisystem mit mount -o remount /yourfilesystem

Sie können debugfs verwenden, um eine Datei wiederherzustellen, indem Sie ihren Inode verwenden und eine Datei angeben

Inode-Struktur für Verzeichnis

Wie oben erwähnt, werden die Verzeichnisse in Linux auch als Dateien behandelt. Verzeichnis ist eine spezielle Datei, die einen Dateinamen seiner Inode-Nummer zuordnet (diese Zuordnung wird als Verzeichniseintrag oder Dentry bezeichnet). Wenn wir also sagen, dass ein Verzeichnis Dateien und andere Verzeichnisse enthält, meinen wir, dass dieses Verzeichnis diese Dateien und Verzeichnisse (Verzeichnisse sind spezielle Dateien, daher müssen sie auch ihren Inode-Nummern zugeordnet werden) ihren Inode-Nummern zuordnet.

Dies ist der Grund, warum ein Verzeichnis nicht zwei Dateien mit demselben Namen enthalten kann, da es keinen Namen mit zwei verschiedenen Inode-Nummern abbilden kann.

# ls -ld test/drwxr-xr-x 3 root root 4096 Apr 13 01:43 test/

Wenn eine Datei von ihrem übergeordneten Verzeichnis ihrem Inode zugeordnet wird, wie wird dann das oberste Verzeichnis (dh / directory) ihrem Inode zugeordnet? Die Inode-Nummer des / -Verzeichnisses ist fest und immer 2.

Links und Indexnummer in Linux

In der Ausgabe von ls -list die Spalte nach den Berechtigungen und vor dem Eigentümer die Anzahl der Links. Link count ist die Anzahl der Hardlinks zu einer Datei. Um harte Links zu verstehen, beginnen wir mit Links. Ein Link ist ein Zeiger auf eine andere Datei.

In der Linux-Welt gibt es zwei Arten von Links:

a. Symbolische Links (oder Softlinks)

Der symbolische Link ist eine separate Datei, deren Inhalt auf die verlinkte Datei verweist. Um einen symbolischen Link zu erstellen, verwenden Sie den Befehl ln mit der Option -s. Wenn Sie den Befehl ln verwenden, stellen Sie sicher, dass Sie zuerst auf den Namen der Originaldatei und dann auf den Namen des Links verweisen, den Sie erstellen möchten.

# ln -s /home/bobbin/sync.sh filesync

Hier ist ‚filesync‘ ein symbolischer Link zu ’sync.sh ‚. Betrachten Sie es als Abkürzung. Das Bearbeiten von ‚Filesync‘ ist wie das direkte Bearbeiten der Originaldatei, aber es ist wirklich das, was passiert. Wenn wir die Originaldatei löschen oder verschieben, wird der Link unterbrochen und unsere ‚Filesync‘-Datei ist nicht mehr verfügbar.

Der Befehl ls -l zeigt an, dass die resultierende Datei ein symbolischer Link ist. Dies wird durch den Buchstaben l an der ersten Position der Ausgabe ls -l und durch den Pfeil am Ende der Liste angezeigt, der die Datei angibt, auf die sich der Name bezieht.

# ls -l filesync lrwxrwxrwx 1 root root 20 Apr 7 06:08 filesync -> /home/bobbin/sync.sh

Der Inhalt eines symbolischen Links ist nur der Name der Zieldatei. Sie können sehen, dass die Berechtigungen für den symbolischen Link vollständig geöffnet sind. Dies liegt daran, dass die Berechtigungen nicht verwaltet werden

Wenn Sie den symbolischen Link und die Originaldatei vergleichen, werden Sie einen deutlichen Unterschied zwischen ihnen feststellen.

Die Originaldatei ist nur ein Name, der direkt mit dem Inode verbunden ist, und der symbolische Link verweist auf den Namen. Die Größe des symbolischen Links ist die Anzahl der Bytes im Namen der Datei, auf die er verweist, da im symbolischen Link keine anderen Informationen verfügbar sind.

b. Harte Links

Um eine Vorstellung davon zu bekommen, was ein harter Link ist, ist es wichtig zu verstehen, dass die Identität einer Datei ihre Inode-Nummer ist, nicht ihr Name. Ein harter Link ist ein Name, der auf einen Inode verweist. Dies bedeutet, dass, wenn ‚Datei1‘ einen harten Link mit dem Namen ‚Datei2‘ hat, beide Dateien auf denselben Inode verweisen. Wenn Sie also einen harten Link für eine Datei erstellen, fügen Sie einem Inode nur einen neuen Namen hinzu.

Verwenden Sie dazu den Befehl ln ohne Option.

# ls -l /home/bobbin/sync.sh -rw-r----- 1 root root 5 Apr 7 06:09 /home/bobbin/sync.sh
# ln /home/bobbin/sync.sh synchro

Vergleichen wir nun die beiden Dateien

Das Interessante an harten Links ist, dass es keinen Unterschied zwischen der Originaldatei und dem Link gibt: Es sind nur zwei Namen, die mit demselben Inode verbunden sind.

Wie Sie bemerkt haben müssen, sind harte Links im Gegensatz zu weichen Links keine speziellen Dateien. Nun ist Link count die Nummer, die eine Datei fest verknüpft wurde. Die Anzahl der Links steigt also nach dem Erstellen eines harten Links, wie Sie in der obigen Abbildung sehen können. Diese harten Links haben zwei Einschränkungen:

  • Die Verzeichnisse können nicht fest verknüpft werden. Linux erlaubt dies nicht, um die azyklische Baumstruktur von Verzeichnissen beizubehalten.
  • Ein harter Link kann nicht dateisystemübergreifend erstellt werden. Beide Dateien müssen sich auf demselben Dateisystem befinden, da verschiedene Dateisysteme unterschiedliche unabhängige Inode-Tabellen haben (zwei Dateien auf verschiedenen Dateisystemen, aber mit derselben Inode-Nummer sind unterschiedlich).

So finden Sie einen harten Link in Linux

Sie können alle Dateinamen abrufen, die auf eine Inode-Nummer verweisen. Dies bedeutet, dass Sie harte Links abrufen können, da dies die einzige Art von Link ist, bei der wir einige Dateinamen haben können, die auf denselben Inhalt verweisen (Inode). Sie können dies mit der -inum Option des Befehls find wie folgt tun

# find / -inum 517333/home/bobbin/sync.sh/root/synchro

Damit können Sie wissen, welche Dateinamen auf die Dateninformationen verweisen, also alle Hardlinks relativ zu einer bestimmten Inode-Nummer abrufen

Linux-Operationen mit Dateien und deren Beziehung zu Inodes

Die meisten Operationen (z. B. Kopieren) links beeinflussen die eigentliche verknüpfte Datei (mit Ausnahme von rm- oder mv-Befehlen, die den Link selbst entfernen (oder verschieben))

Hier sind einige Dateioperationen, bei denen Inodes ihre wichtige Rolle spielen:

a. dateien kopieren

Wenn wir eine Datei kopieren, wird eine neue Datei mit einem neuen Inode erstellt.

# cp myfile ..
# ls -li myfile ../myfile2501 -rw------- 1 raghu raghu 36 Jun 25 20:12 myfile3746 -rw------- 1 raghu raghu 36 Jan 11 12:05 ../myfile

b. Dateien verschieben

Beim Verschieben zwischen Dateisystemen wird der Befehl wie oben beschrieben ausgeführt, mit der Ausnahme, dass die Originaldatei von ihrem Speicherort entfernt wird. Beim Verschieben innerhalb eines Dateisystems ändert sich der Inode jedoch nicht, nur die Verzeichniszuordnung des Inode wird geändert, die tatsächlichen Daten auf der Festplatte (Inhalt der Datei) werden nicht verschoben.

# ls -li samplefile.txt2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 samplefile.txt

Jetzt verschieben wir die Datei und überprüfen das Ergebnis

# mv samplefile.txt ..
# ls -li ../samplefile.txt2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 ../samplefile.txt

c. Dateien entfernen

Wenn der Befehl ausgegeben wird, überprüft er zuerst die Anzahl der Links der Datei. Wenn die Anzahl der Links größer als 1 ist, wird dieser Verzeichniseintrag entfernt und die Anzahl der Links verringert. Dennoch sind Daten vorhanden, noch ist der Inode betroffen. Und wenn die Anzahl der Links 1 , wird der Inode aus der Inode-Tabelle gelöscht, die Inode-Nummer wird frei und die Datenblöcke, die diese Datei belegt hat, werden der Liste der freien Datenblöcke hinzugefügt.

# ls -li myfile myfile.hardlink2501 -rw------- 2 raghu raghu 36 Jun 25 2012 myfile2501 -rw------- 2 raghu raghu 36 Jun 25 2012 myfile.hardlink

Lassen Sie uns die Datei löschen und das Ergebnis überprüfen

# rm myfile.hardlink
# ls -li myfile2501 -rw------- 1 raghu raghu 36 Jun 25 2012 myfile

Sie können sehen, dass die Anzahl der Inodes verringert ist.

Fazit

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.