Inode

Das Inode (Indexknoten) ist a Datenstruktur in einem Dateisystem im Unix-Stil das beschreibt a Dateisystem Objekt wie a Datei oder ein Verzeichnis. Jeder Inode speichert die Attribute und Festplattenblockplätze der Daten des Objekts.[1] Datei-System-Objektattribute können enthalten Metadaten (Zeiten der letzten Veränderung,[2] Zugriff, Änderungen) sowie Eigentümer und Genehmigung Daten.[3]

Ein Verzeichnis ist eine Liste von Inodes mit ihren zugewiesenen Namen. Die Liste enthält einen Eintrag für sich, seine Eltern und jedes seiner Kinder.

Etymologie

Es gab Unsicherheit über die Linux -Kernel -Mailingliste über den Grund für das "I" in "Inode". Im Jahr 2002 wurde die Frage an Unix Pioneer gebracht Dennis Ritchie, wer antwortete:[4]

In Wahrheit weiß ich auch nicht. Es war nur ein Begriff, den wir zu verwenden begannen. "Index" ist meine beste Vermutung, da die Zugriffsinformationen von Dateien als flaches Array auf der Festplatte etwas ungewöhnliches Dateisystemstruktur gespeichert haben, wobei alle hierarchischen Verzeichnisinformationen davon leben. Somit ist der I-Number in diesem Array ein Index, der I-Knoten ist das ausgewählte Element des Arrays. (Die "i-" Notation wurde im Handbuch der 1. Ausgabe verwendet; ihr Bindestrich wurde allmählich fallen gelassen.)

Eine Zeitung von 1978 von Ritchie und Ken Thompson Bolsters Der Begriff "Index" ist der etymologische Ursprung von Inodes. Sie schrieben:[5]

[…] Ein Verzeichniseintrag enthält nur einen Namen für die zugehörige Datei und a Zeiger zur Datei selbst. Dieser Zeiger ist eine Ganzzahl namens die i-number (für die Indexnummer) der Datei. Wenn auf die Datei zugegriffen wird, wird die I-Anzahl als Index in eine Systemtabelle (die I-Liste) In einem bekannten Teil des Geräts gespeichert, auf dem sich das Verzeichnis befindet. Dabei wurde der Eintrag gefunden (die Datei der Datei I-Node) Enthält die Beschreibung der Datei.

Darüber hinaus schrieb Maurice J. Bach, dass ein Inode "eine Kontraktion des Begriffs -Indexknotens ist und üblicherweise in der Literatur zum Unix -System verwendet wird".[6]

Einzelheiten

Dateideskriptoren, Dateitabelle und Inode -Tabelle in UNIX[7]

Ein Dateisystem beruht auf Datenstrukturen um Die Dateien im Gegensatz zum Inhalt dieser Datei. Erstere werden genannt Metadaten- Daten, die Daten beschreibt. Jede Datei ist einer zugeordnet Inode, was von einer Ganzzahl identifiziert wird, die oft als als bezeichnet wird i-number oder Inode -Nummer.

Inodes speichern Informationen zu Dateien und Verzeichnissen (Ordnern), wie z. B. Dateibesitz, Zugriffsmodus (lesen, schreiben, Berechtigungen ausführen) und Dateityp. Bei vielen älteren Dateisystem -Implementierungen wird die maximale Anzahl von Inodes bei der Erstellung von Dateisystemen festgelegt, wodurch die maximale Anzahl von Dateien eingeschränkt wird, die das Dateisystem halten kann. Eine typische Allokationsheuristik für Inodes in einem Dateisystem ist ein Inode für alle 2K -Bytes, die im Dateisystem enthalten sind.[8]

Die Inode -Nummer indiziert eine Inodes -Tabelle an einem bekannten Ort auf dem Gerät. Aus der Inode -Nummer kann der Dateisystem des Kernels auf den Inode -Inhalt, einschließlich des Speicherorts der Datei, zugreifen und so den Zugriff auf die Datei ermöglichen. Die Inode -Nummer einer Datei kann mit dem gefunden werden ls -i Befehl. Das ls -i Der Befehl druckt die i-Node-Nummer in der ersten Spalte des Berichts.

Einige Dateisysteme im Unix-Stil wie z. ZFS, OpenZFS, Reiserfs, Btrfs, und APFs Lassen Sie eine Inode-Tabelle mit fester Größe weg, müssen jedoch äquivalente Daten speichern, um äquivalente Funktionen bereitzustellen. Die Daten können als STAT -Daten bezeichnet werden, in Bezug auf die Stat Systemanruf Das liefert die Daten für Programme. Häufige Alternativen zur festen Tabelle umfassen B-Bäume und die abgeleiteten B+ Bäume.

Dateinamen und Verzeichnisauswirkungen:

  • Inoden enthalten nicht seine Hardlink -Namen, nur andere Dateimetadaten.
  • UNIX -Verzeichnisse sind Listen von Assoziationsstrukturen, von denen jeder einen Dateinamen und eine Inode -Nummer enthält.
  • Der Dateisystem -Treiber muss ein Verzeichnis durchsuchen, das nach einem bestimmten Dateinamen sucht, und dann den Dateinamen in die richtige entsprechende Inode -Nummer konvertieren.

Die In-Memory-Darstellung dieser Daten des Betriebssystemkernels wird genannt Struktur Inode in Linux. Systeme abgeleitet von BSD Verwenden Sie den Begriff vnode (Das "V" bezieht sich auf den Kern des Kernels Virtuelles Dateisystem Schicht).

POSIX Inode Beschreibung

Das Posix Standardmandate Verhalten des Dateisystems, das stark von traditionellem beeinflusst wird Unix Dateisysteme. Ein Inode wird mit der Phrase "Datei -Seriennummer" bezeichnet, die als a definiert ist pro file System Eindeutige Kennung für eine Datei.[9] Diese Seriennummer der Datei, zusammen mit der Geräte -ID des Geräts, das die Datei enthält, identifizieren die Datei im gesamten System eindeutig.[10]

In einem POSIX -System verfügt eine Datei über die folgenden Attribute[10] das kann durch die abgerufen werden Stat Systemanruf:

  • Geräte -ID (dadurch identifiziert das Gerät, das die Datei enthält; dh den Umfang der Einzigartigkeit der Seriennummer).
  • Datei Seriennummern.
  • Das Datei Modus Dies bestimmt den Dateityp und wie der Eigentümer der Datei, seine Gruppe und andere auf die Datei zugreifen können.
  • A Linkzahl erzählen wie viele harte Links Zeigen Sie auf den Inode.
  • Das Benutzeridentifikation des Eigentümers der Datei.
  • Das Gruppen-ID der Datei.
  • Die Geräte -ID der Datei, wenn sie a ist Gerätedatei.
  • Die Größe der Datei in Bytes.
  • Zeitstempel Erzählen, wann der Inode selbst zuletzt modifiziert wurde ( CTime, Inode -Änderungszeit), der Dateiinhalt zuletzt geändert ( mtime, Änderungszeit) und zuletzt aufgerufen ( eine Zeit, Zugriffszeit).
  • Die bevorzugte E/A -Blockgröße.
  • Die Anzahl der Blöcken, die dieser Datei zugeordnet sind.

Implikationen

Die mit Inodes entwickelten Dateisysteme haben die folgenden Verwaltungsmerkmale.

  • Dateien können mehrere Namen haben. Wenn mehrere Namen harte Verbindung Zum gleichen Inode sind die Namen gleichwertig; d.h. der erste, der erstellt wurde, hat keinen besonderen Status. Das ist anders Symbolische Links, die vom ursprünglichen Namen abhängt, nicht vom Inode (Nummer).
  • Ein Inode kann keine Links haben. Eine nicht verknüpfte Datei wird von der Festplatte entfernt und ihre Ressourcen werden für die Neuzuweisung befreit, aber das Löschen muss warten, bis alle Prozesse, die sie geöffnet haben, zugänglich gemacht haben. Dies umfasst ausführbare Dateien, die implizit durch die von ihnen ausgeführten Prozesse geöffnet werden.
  • Es ist normalerweise nicht möglich, von einer geöffneten Datei auf den Dateinamen zu kartieren, mit dem sie geöffnet wurden. Das Betriebssystem wandelt den Dateinamen sofort in eine Inode -Nummer um und verwirft dann den Dateinamen. Dies bedeutet, dass die getCwd () und Getwd () Bibliotheksfunktionen suchen die übergeordnetes Verzeichnis um eine Datei mit einem Inode zu finden, der dem entspricht Arbeitsverzeichnisund durchsuchen Sie dann den Elternteil dieses Verzeichnisses und so weiter, bis er das erreicht hat Wurzelverzeichnis. SVR4 und Linux Systeme behalten zusätzliche Informationen bei, um dies zu ermöglichen.
  • Historisch gesehen war es möglich harte Verbindung Verzeichnisse. Dies machte die Verzeichnisstruktur zu einem willkürlichen gerichteter Graph Im Gegensatz zu a Regie acyclische Graphen. Es war sogar möglich, dass ein Verzeichnis ein eigener Elternteil war. Moderne Systeme verbieten diesen verwirrenden Zustand im Allgemeinen, außer dass der Elternteil von Wurzel ist immer noch als Wurzel definiert. Die bemerkenswerteste Ausnahme zu diesem Verbot ist in Mac OS X (Versionen 10.5 und höher), wodurch harte Verzeichnisse vom Superuser erstellt werden können.[11]
  • Die Inode -Nummer einer Datei bleibt gleich, wenn sie in ein anderes Verzeichnis auf demselben Gerät verschoben wird oder wenn die Festplatte ist defragmentiert Dies kann seinen physischen Standort ändern und es ermöglichen, dass er bewegt und umbenannt wird, während er gelesen und geschrieben wird, ohne Unterbrechung zu verursachen. Dies impliziert auch, dass das vollständig konforme Inode-Verhalten mit vielen Nicht-Unix-Dateisystemen, wie z. FETT und seine Nachkommen, die keine Möglichkeit haben, diese Invarianz zu speichern, wenn sowohl der Verzeichniseintrag einer Datei als auch ihre Daten bewegt werden.
  • Die Installation neuer Bibliotheken ist mit Inode -Dateisystemen einfach. Ein laufender Prozess kann auf eine Bibliotheksdatei zugreifen, während ein weiterer Prozess diese Datei ersetzt und einen neuen Inode erstellt. Für die neue Datei gibt es eine brandneue Zuordnung, sodass nachfolgende Versuche, auf die Bibliothek zuzugreifen, die neue Version erhalten. Diese Einrichtung beseitigt die Notwendigkeit, neu zu starten, um derzeit kartierte Bibliotheken zu ersetzen.
  • Es ist möglich, dass ein Gerät die Inodes ausgeht. In diesem Fall können neue Dateien auf dem Gerät nicht erstellt werden, obwohl möglicherweise freien Speicherplatz verfügbar ist. Dies ist am häufigsten für Anwendungsfälle wie Mail -Server die viele kleine Dateien enthalten. Dateisysteme (wie z. JFS oder Xfs) entkommen dieser Einschränkung mit Ausdehnung oder dynamische Inodezuordnung, die das Dateisystem "anbauen" oder die Anzahl der Inodes erhöhen kann.

Einbindung

Es kann sinnvoll sein, sehr kleine Dateien im Inode selbst zu speichern, um sowohl Speicherplatz (ohne Datenblock erforderlich) als auch die Nachschlagzeit zu speichern (kein weiterer Speicherzugriff erforderlich). Diese Dateisystemfunktion wird als Inlining bezeichnet. Die strikte Trennung von Inode- und Dateidaten kann daher bei der Verwendung moderner Dateisysteme nicht mehr angenommen werden.

Wenn die Daten einer Datei in den Speicherplatz anpassen, der für Zeiger für die Daten zugewiesen ist, kann dieser Speicherplatz bequem verwendet werden. Zum Beispiel, ext2 und seine Nachfolger speichern die Daten von Symlinks (normalerweise Dateinamen) auf diese Weise, wenn die Daten nicht mehr als 60 Bytes ("schnelle symbolische Links") sind.[12]

Ext4 hat eine Dateisystemoption aufgerufen inline_data Dadurch kann Ext4 die Inline -Durchführung durchführen, wenn sie während der Erstellung von Dateisystemen aktiviert sind. Da die Größe eines Inode begrenzt ist, funktioniert dies nur für sehr kleine Dateien.[13]

In Nicht-Unix-Systemen

  • NTFS hat eine Mast-Datei-Tabelle (MFT), die Dateien in einem B-Tree speichert. Jeder Eintrag hat eine "DateiId", die zur Inode -Nummer analog ist und sich auf diese Eingabe einzigartig bezieht.[14] Die drei Zeitstempel, eine Geräte -ID, Attribute, Referenzzahl und Dateigrößen finden Sie im Eintrag, im Gegensatz zu POSIX the jedoch Berechtigungen werden durch eine andere API ausgedrückt.[15] Das Layout auf dem Schleifen ist komplexer.[16] Die früheren Fettdateisysteme hatten keine solche Tabelle und waren nicht in der Lage zu machen harte Links.
    • NTFS hat auch ein Konzept, kleine Dateien in den MFT -Eintrag einzubeziehen.[17]
    • Die abgeleiteten Refs haben eine homologe MFT. Refs hat eine 128-Bit-Datei-ID; Diese Erweiterung wurde auch auf NTFS zurückgebracht, das ursprünglich eine 64-Bit-Datei-ID hatte.[15]
  • Das gleiche statartig GetFileInformationByHandle API kann auf verwendet werden Cluster Shared Volumes und SMB 3.0Daher haben diese Systeme vermutlich ein ähnliches Konzept einer Datei -ID.[15]

Siehe auch

Verweise

  1. ^ Tanenbaum, Andrew S. Modern Operating Systems (3. Aufl.). p. 279.
  2. ^ Jvsanten. "Unterschied zwischen Mime, CTime und Atime - Linux Howtos und FAQs". Linux Howtos und FAQs.
  3. ^ "Anatomie des Virtual -Dateisystemschalters Linux" ". ibm.com.
  4. ^ Linux Kernel List Archiv. Abgerufen am 01.01.12.
  5. ^ Ritchie, Dennis M.; Thompson, Ken (1978). "Das Unix Time-Sharing-System". Das Bell System Technical Journal. 57 (6): 1913–1914. Abgerufen 19. Dezember 2015.
  6. ^ Maurice J. Bach (1986). Das Design des UNIX -Betriebssystems. Prentice Hall. ISBN 978-0132017992.
  7. ^ Bach, Maurice J. (1986). Das Design des UNIX -Betriebssystems. Prentice Hall. p. 94. Bibcode:1986duos.book ..... b.
  8. ^ "Linfo". Das Linux -Informationsprojekt. Abgerufen 11. März 2020.
  9. ^ "Definitionen - 3.176 Datei Seriennummer". Die offene Gruppe. Abgerufen 10. Januar 2018.
  10. ^ a b "<sys/stat.h>". Die offene Gruppe. Abgerufen 15. Januar 2018.
  11. ^ "Was ist der Befehl UNIX, um einen Hardlink für ein Verzeichnis in OS X zu erstellen?". Paketüberfluss. 16. Januar 2011. Archiviert Aus dem Original am 5. Januar 2020. Abgerufen 5. Januar 2020.
  12. ^ "Der Linux -Kernel: Dateisystem". Di.nl.
  13. ^ "Ext4 -Datenträgerlayout". kernel.org. Abgerufen 18. August, 2013.
  14. ^ "Hat Windows Inode -Nummern wie Linux?". Paketüberfluss.
  15. ^ a b c "GetFileInformationByHandle -Funktion (fileapi.h) - Win32 Apps". docs.microsoft.com.
  16. ^ "[MS-FSCC]: NTFS-Attributtypen". docs.microsoft.com.
  17. ^ "Windows - Maximale Dateigröße, die vollständig in der NTFS -Master -Datei Tabelle (MFT) gespeichert werden kann".

Externe Links