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


125

Aus dem Artikel Anatomy of the Linux file system 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 sind . Obwohl der Rest des Abschnitts das oben Gesagte erklärt, war ich mit dieser Erklärung nicht so zufrieden.

Könnte mir jemand diese Begriffe erklären?

Antworten:


136

In erster Linie, und mir ist klar, dass es nicht einer der Begriffe aus Ihrer Frage war, müssen Sie Metadaten verstehen . Kurz gesagt, und gestohlen aus Wikipedia, 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 aber 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 kritisch und wird daher in mehreren redundanten Kopien für jedes Dateisystem gespeichert. Der Superblock ist eine sehr "übergeordnete" Metadatenstruktur für das Dateisystem. Wenn beispielsweise der Superblock einer Partition, / var, beschädigt wird, kann das betreffende Dateisystem (/ var) vom Betriebssystem nicht bereitgestellt werden. In diesem Fall müssen Sie in der Regel ausführenfsckDadurch wird automatisch eine alternative Sicherungskopie des Superblocks ausgewählt und versucht, das Dateisystem wiederherzustellen. Die Sicherungskopien selbst werden in Blockgruppen gespeichert, die über das Dateisystem verteilt sind. Die ersten Kopien werden mit einem Abstand von 1 Block vom Partitionsanfang gespeichert. Dies ist wichtig für den Fall, dass eine manuelle Wiederherstellung erforderlich ist. Sie können Informationen zu Superblock-Sicherungen mit dem Befehl anzeigen, dumpe2fs /dev/foo | grep -i superblockder im Fall eines manuellen Wiederherstellungsversuchs hilfreich ist. Nehmen wir an, der Befehl dumpe2fs gibt die Zeile aus Backup superblock at 163840, Group descriptors at 163841-163841. Wir können diese Informationen benutzen, und zusätzliches Wissen über die Dateisystemstruktur, diese Super Sicherung zu verwenden , um zu versuchen: /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. tatsächliche Dateien, Verzeichnisse, Geräte usw. Bitte beachten Sie, dass es unter den in einem Inode enthaltenen Metadaten keinen Dateinamen gibt, wie es die Menschen denken. Dies wird später von Bedeutung sein. Ein Inode enthält im Wesentlichen Informationen zum Besitz (Benutzer, Gruppe), zum Zugriffsmodus (Lesen, Schreiben, Ausführen von Berechtigungen) und zum Dateityp.

Ein Dentry ist der Klebstoff, der Inodes und Dateien zusammenhält, indem Inode-Nummern mit Dateinamen verknüpft werden . Einträge spielen auch eine Rolle bei der Zwischenspeicherung von Verzeichnissen, die im Idealfall die am häufigsten verwendeten Dateien für einen schnelleren Zugriff bereithalten. Das Durchlaufen von Dateisystemen ist ein weiterer Aspekt des Eintrags, da eine Beziehung zwischen Verzeichnissen und ihren Dateien aufrechterhalten wird.

Eine Datei ist nicht nur das, woran Menschen normalerweise denken, wenn sie mit dem Wort präsentiert wird, sondern sie ist auch nur ein Block von logisch zusammenhängenden willkürlichen Daten. Vergleichsweise langweilig, wenn man bedenkt, wie viel Arbeit (oben) geleistet wurde, um den Überblick zu behalten.

Ich bin mir voll und ganz bewusst, dass einige Sätze keine vollständige Erklärung für eines dieser Konzepte liefern. Bitte fordern Sie bei Bedarf weitere Details an.


@Tok: Wird es wie folgt ausgegeben (wie in der Antwort gezeigt): Sicherungs-Superblock bei 163840, Gruppendeskriptoren bei 163841-163841 oder ist es so: Sicherungs-Superblock bei 163840, Gruppendeskriptoren bei 163841-163842? War das ein Tippfehler? :-)
Sen

@TOK: Backup-Superblock um 163840, Gruppendeskriptoren um 163841-163842, Welche Informationen übermitteln die Gruppendeskriptoren?
Sen

@Sen - Theoretisch können sich die Gruppendeskriptoren über mehrere Blöcke erstrecken. Bei den meisten Desktopsystemen wird jedoch nur ein einziger Block benötigt, auf den als $ ((BackupBlock + 1)) - $ ((BackupBlock + 1))
Tok

@TOK: ok in meinem System sehe ich es wie $ ((BackupBlock + 1)) - $ ((BackupBlock + 2))
Sen

@Sen - Der Gruppendeskriptor beschreibt eine Blockgruppe. Was bedeutet das? Weitere Metadaten. Im Wesentlichen enthält ein Gruppendeskriptor eine Blockbitmap (Blocknummer der Blockzuweisungsbitmap), eine Inode-Bitmap (gleich, aber für Inodes), eine Inode-Tabelle (Blocknummer des Startblocks für die Inode-Tabelle), freie Block- und Inode-Zählungen. und eine Anzahl verwendeter Verzeichnisse. Dies alles basiert auf einem ext2-Dateisystem. Gruppendeskriptoren sind für den ordnungsgemäßen Betrieb des Dateisystems sehr wichtig und werden neben dem Superblock dupliziert.
Tok

49

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, erstellt es auch ein Dateiobjekt, 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 verworfen.

Inode

Ein Inode (kurz für "Index Node") ist eine Reihe von Attributen zu einer Datei, die Linux speichert. Für jede Datei gibt es einen Inode (bei einigen Dateisystemen muss Linux jedoch eigene Inodes erstellen, da die Informationen über das Dateisystem verteilt sind). Die Inode speichert Informationen wie, wem die Datei gehört, wie groß die Datei ist und wer die Datei öffnen darf. Jeder Inode enthält außerdem eine für die Dateisystempartition eindeutige Nummer. Es ist wie eine Seriennummer für die Datei, die von dieser Inode beschrieben wird.

Dentry

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

Superblock

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


11

Superblock , der Indexknoten (oder inode ), der Verzeichniseintrag (oder dentry ) und schließlich die Datei - Objekt sind ein Teil virtuelles Dateisystem (VFS) oder ein virtuelles Dateisystem - Schalter . Der Zweck eines VFS besteht darin, Clientanwendungen den einheitlichen Zugriff auf verschiedene Arten konkreter Dateisysteme zu ermöglichen.

Beziehungen der Hauptobjekte im VFS

Bildbeschreibung hier eingeben


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 alles 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 Metadaten auf hoher Ebene über ein 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 bietet 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 die Schnittstelle zwischen Dateien und Inodes. Einträge spielen auch eine Rolle bei der Zwischenspeicherung von Verzeichnissen, die im Idealfall die am häufigsten verwendeten Dateien für einen schnelleren Zugriff bereithalten.

Quelle


5

Der Einfachheit halber sind Dentry und Inode dasselbe, eine Abstraktion von Datei oder Verzeichnis. Der Unterschied zwischen Dentry und Inode besteht darin, dass Dentry zur Erleichterung verzeichnisspezifischer Vorgänge verwendet wird. Inode ist lediglich eine Sammlung von Metadaten zu Dateien oder Verzeichnissen. Superblock ist die Abstraktion des Dateisystems.

struct filewird im Linux-Kernel fälschlicherweise als "viele andere" bezeichnet (zB struct address_space) und ist keine Abstraktion einer echten "Datei" (zB / etc / passwd). Es steht für eine geöffnete "Datei" oder ein geöffnetes Verzeichnis. struct filewird von sys_openim Kernel erstellt, daher kann ein Prozess viele struct files für dieselbe Datei haben.

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


4

Beachten Sie, dass diese Begriffe nicht Linux-spezifisch, sondern dateisystemspezifisch sind. Die meisten von aktuellen Unix- und Unix-ähnlichen Systemen verwendeten Dateisysteme sind entweder von dem ursprünglichen Unix-Dateisystem abgeleitet oder inspiriert, das die Superblock- und Inode-Idiome definiert hat. Linux kann auch mehrere Dateisysteme mounten, bei denen keine Vorstellung von Superblock und / oder Inode besteht, wobei das häufigste FAT ist. Ein anderer, ZFS, verwendet keine Superblöcke, sondern Überblöcke.


Ich hoffe, Sie können diesen Kommentar nach so langer Zeit lesen. Ich habe gelesen, dass VFS Inodes und Superblocks hat, die nichts mit den Inodes und Superblocks von EXT2 zu tun haben. Um nicht zu missverstehen, was Sie gesagt haben: Da jedes Linux ein VFS hat, sollten alle Inodes und Superblock verwenden, oder?
CuriousKimchi

1
@CuriousKimchi Obwohl sie hier den gleichen Namen haben, sollten Sie die auf der Festplatte gespeicherten Informationen (Superblock / Inodes) und Strukturen, die vom Kernel für den Zugriff auf ein Dateisystem und seine Dateien verwendet werden, nicht verwechseln. Jedes Dateisystem verfügt über einige Metadaten auf der Festplatte, die die Eigenschaften des Dateisystems beschreiben. Diese Metadaten werden zum Auffüllen der Linux VFS-Superblock-Struktur verwendet. Ebenso haben Dateien eine In-Kernel-Inode-Struktur unter VFS. Wenn dem zugrunde liegenden Dateisystem der Begriff Inode fehlt, enthält diese Struktur eine gefälschte Inode-Nummer, die im laufenden Betrieb vom Betriebssystem erstellt wird.
Juli
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.