it-swarm.com.de

Was ist ein Superblock, Inode, Dentry und eine Datei?

Aus dem Artikel Anatomie des Linux-Dateisystems von M. Tim Jones habe ich gelesen, dass Linux alle Dateisysteme aus der Perspektive einer gemeinsamen Menge von Objekten betrachtet und diese Objekte superblock, inode, dentry und file. Obwohl der Rest des Absatzes das Obige erklärt, war ich mit dieser Erklärung nicht so zufrieden.

Könnte mir jemand diese Begriffe erklären?

132
Sen

In erster Linie, und mir ist klar, dass dies nicht einer der Begriffe aus Ihrer Frage war, müssen Sie Metadaten verstehen. Kurz gesagt und aus Wikipedia gestohlen, sind Metadaten Daten über Daten. Das heißt, Metadaten enthalten Informationen zu einem Datenelement. Wenn ich zum Beispiel ein Auto besitze, habe ich eine Reihe von Informationen über das Auto, die jedoch nicht Teil des Autos selbst sind. Informationen wie Registrierungsnummer, Marke, Modell, Herstellungsjahr, Versicherungsinformationen usw. Alle diese Informationen werden zusammen als Metadaten bezeichnet. In Linux- und UNIX-Dateisystemen sind Metadaten auf mehreren Organisationsebenen vorhanden, wie Sie sehen werden.

Der Superblock besteht im Wesentlichen aus Dateisystem-Metadaten und definiert den Dateisystemtyp, die Größe, den Status und Informationen zu anderen Metadatenstrukturen (Metadaten von Metadaten). Der Superblock ist für das Dateisystem sehr wichtig und wird daher für jedes Dateisystem in mehreren redundanten Kopien gespeichert. Der Superblock ist eine Metadatenstruktur auf sehr hoher Ebene für das Dateisystem. Wenn beispielsweise der Superblock einer Partition/var beschädigt wird, kann das betreffende Dateisystem (/ var) nicht vom Betriebssystem bereitgestellt werden. In diesem Fall müssen Sie normalerweise fsck ausführen, wodurch automatisch eine alternative Sicherungskopie des Superblocks ausgewählt und versucht wird, das Dateisystem wiederherzustellen. Die Sicherungskopien selbst werden in Blockgruppen gespeichert, die über das Dateisystem verteilt sind, wobei die erste mit einem Versatz von 1 Block vom Beginn der Partition gespeichert wird. Dies ist wichtig für den Fall, dass eine manuelle Wiederherstellung erforderlich ist. Sie können Informationen zu ext2/ext3/ext4-Superblock-Sicherungen mit dem Befehl dumpe2fs /dev/foo | grep -i superblock Anzeigen, der bei einem manuellen Wiederherstellungsversuch hilfreich ist. Nehmen wir an, der Befehl dumpe2fs gibt die Zeile Backup superblock at 163840, Group descriptors at 163841-163841 Aus. Wir können diese Informationen und zusätzliche Kenntnisse über die Dateisystemstruktur verwenden, um zu versuchen, diese Superblock-Sicherung zu verwenden: /sbin/fsck.ext3 -b 163840 -B 1024 /dev/foo. Bitte beachten Sie, dass ich für dieses Beispiel eine Blockgröße von 1024 Bytes angenommen habe.

Ein inode existiert in oder auf einem Dateisystem und repräsentiert Metadaten zu einer Datei. Aus Gründen der Übersichtlichkeit sind alle Objekte in einem Linux- oder UNIX-System Dateien. aktuelle Dateien, Verzeichnisse, Geräte usw. Bitte beachten Sie, dass es unter den in einem Inode enthaltenen Metadaten keinen Dateinamen gibt, wie Menschen es sich vorstellen. Dies wird später wichtig sein. Ein Inode enthält im Wesentlichen Informationen zu Besitz (Benutzer, Gruppe), Zugriffsmodus (Lesen, Schreiben, Ausführen von Berechtigungen) und Dateityp.

A dentry ist der Klebstoff, der Inodes und Dateien zusammenhält, indem Inode-Nummern mit Dateinamen in Beziehung gesetzt werden. Einträge spielen auch eine Rolle beim Verzeichnis-Caching, bei dem im Idealfall die am häufigsten verwendeten Dateien für einen schnelleren Zugriff zur Verfügung stehen. Das Durchlaufen des Dateisystems ist ein weiterer Aspekt des Dentrys, da eine Beziehung zwischen Verzeichnissen und ihren Dateien aufrechterhalten wird.

A Datei ist nicht nur das, woran Menschen normalerweise denken, wenn sie mit dem Wort dargestellt werden, sondern auch nur ein Block logisch verwandter willkürlicher Daten. Vergleichsweise sehr langweilig, wenn man bedenkt, wie viel Arbeit (oben) geleistet wurde, um den Überblick zu behalten.

Mir ist völlig klar, dass einige Sätze keine vollständige Erklärung für eines dieser Konzepte enthalten. Bitte fragen Sie bei Bedarf nach weiteren Details.

144
Tok

Datei

Eine Datei bedeutet nur eine Reihe von Bytes, die in einer bestimmten Reihenfolge angeordnet sind. Es ist das, was normale Leute den Inhalt einer Datei nennen. Wenn Linux eine Datei öffnet, wird auch ein Dateiobjekt erstellt, das Daten darüber enthält, wo die Datei gespeichert ist und welche Prozesse sie verwenden. Das Dateiobjekt (aber nicht die Dateidaten selbst) wird beim Schließen der Datei weggeworfen.

Inode

Ein Inode (kurz für "Indexknoten") besteht aus einer Reihe von Attributen für eine Datei, die Linux speichert. Für jede Datei gibt es einen Inode (bei einigen Dateisystemen muss Linux jedoch eigene Inodes erstellen, da die Informationen im gesamten Dateisystem verteilt sind). Der Inode speichert Informationen wie z. B. wem die Datei gehört, wie groß die Datei ist und wer die Datei öffnen darf. Jeder Inode enthält auch eine Nummer, die für die Dateisystempartition eindeutig ist. Es ist wie eine Seriennummer für die von diesem Inode beschriebene Datei.

Dentry

Ein Dentry (kurz für "Verzeichniseintrag") wird vom Linux-Kernel verwendet, um die Hierarchie der Dateien in Verzeichnissen zu verfolgen. Jeder Zahnarzt ordnet eine Inode-Nummer einem Dateinamen und einem übergeordneten Verzeichnis zu.

Superblock

Der Superblock ist eine eindeutige Datenstruktur in einem Dateisystem (obwohl mehrere Kopien vorhanden sind, um Beschädigungen vorzubeugen). Der Superblock enthält Metadaten zum Dateisystem, z. B. welcher Inode das Verzeichnis der obersten Ebene und der Typ des verwendeten Dateisystems ist.

50
pingswept

Superblock , der Indexknoten (oder Inode ), der Verzeichniseintrag ( oder dentry ), und schließlich ist das Objekt file Teil von virtuelles Dateisystem (VFS) oder virtueller Dateisystemschalter . Der Zweck eines VFS besteht darin, Clientanwendungen den einheitlichen Zugriff auf verschiedene Arten konkreter Dateisysteme zu ermöglichen.

Beziehungen der Hauptobjekte im VFS

(enter image description here


Ein Inode ist eine Datenstruktur in einem Unix/Linux-Dateisystem. Ein Inode speichert Metadaten zu einer regulären Datei, einem Verzeichnis oder einem anderen Dateisystemobjekt. Inode fungiert als Schnittstelle zwischen Dateien und Daten. Ein Inode kann auf eine Datei oder ein Verzeichnis oder eine symbolische Verknüpfung zu einem anderen Objekt verweisen. Es enthält eine eindeutige Nummer (die i-Nummer), die Attribute der Datei, einschließlich Name, Datum, Größe und Lese-/Schreibberechtigungen, sowie einen Zeiger auf den Speicherort der Datei. Es ist das Gegenstück zur FAT-Tabelle in der DOS/Windows-Welt.

Programme, Dienste, Texte, Bilder usw. sind alle Dateien . Eingabe- und Ausgabegeräte und im Allgemeinen alle Geräte werden je nach System als Dateien betrachtet.

Der Superblock ist der Container für übergeordnete Metadaten zu einem Dateisystem. Der Superblock ist eine Struktur, die auf der Festplatte (tatsächlich mehrere Stellen auf der Festplatte aus Redundanzgründen) und auch im Speicher vorhanden ist. Es bildet die Grundlage für den Umgang mit dem Dateisystem auf der Festplatte, da es die Verwaltungsparameter des Dateisystems definiert (z. B. Gesamtzahl der Blöcke, freie Blöcke, Stammindexknoten).

Dentry ist eine Schnittstelle zwischen Dateien und Inodes. Einträge spielen auch eine Rolle beim Verzeichnis-Caching, bei dem im Idealfall die am häufigsten verwendeten Dateien für einen schnelleren Zugriff zur Verfügung stehen.

Quelle

14
Premraj

In der Einfachheit sind Dentry und Inode dasselbe, eine Abstraktion von Datei oder Verzeichnis. Die Unterschiede zwischen dentry und inode bestehen darin, dass dentry zur Erleichterung verzeichnisspezifischer Vorgänge verwendet wird. Inode ist nur eine Sammlung von Metadaten zu Dateien oder Verzeichnissen. Superblock ist die Abstraktion des Dateisystems.

struct file Wird im Linux-Kernel wie viele andere falsch benannt (z. B. struct address_space) Und ist keine Abstraktion einer echten "Datei" (z. B./etc/passwd). Es steht für eine geöffnete "Datei" oder ein geöffnetes Verzeichnis. struct file Wird von sys_open Im Kernel erstellt, sodass ein Prozess viele struct file Für dieselbe Datei haben kann.

Warum brauchen wir Zahnersatz? Es wird verwendet, um die Übersetzung vom Pfadnamen (z. B./etc/passwd) zum Inode zu beschleunigen. Der Linux-Kernel verwendet Inode, um "Datei" oder Verzeichnis zu manipulieren, nicht deren Namen.

5
firo

Beachten Sie, dass diese Begriffe nicht Linux-spezifisch, sondern dateisystemspezifisch sind. Die meisten Dateisysteme, die von aktuellen Unix- und Unix-ähnlichen Systemen verwendet werden, sind entweder vom ursprünglichen Unix-Dateisystem abgeleitet oder inspiriert, das die Superblock- und Inode-Idiome definiert hat. Linux kann auch mehrere Dateisysteme bereitstellen, bei denen keine Ahnung von Superblock und/oder Inode besteht, wobei FAT am häufigsten vorkommt. Ein anderer, ZFS, verwendet keine Superblocks, sondern Überblocks.

4
jlliagre