Beste Antwort
Kurz
Jedes Dateisystem verfügt über einen Superblock, der Informationen zum Dateisystem enthält, z. B.:
- Dateisystemtyp
- Größe
- Status
- Informationen zu anderen Metadatenstrukturen
Im Detail
Der Superblock ist eine Struktur, die ein Dateisystem darstellt. Es enthält die erforderlichen Informationen zur Verwaltung des Dateisystems während des Betriebs. Es enthält den Namen des Dateisystems (z. B. ext4), die Größe des Dateisystems und seinen Status, einen Verweis auf das Blockgerät und Metadateninformationen (z. B. freie Listen usw.). Der Superblock wird normalerweise auf dem Speichermedium gespeichert, kann jedoch in Echtzeit erstellt werden, wenn einer nicht vorhanden ist. Die Superblock-Struktur finden Sie unter ./linux/include/linux/fs.h.
One Ein wichtiges Element des Superblocks ist eine Definition der Superblock-Operationen. Diese Struktur definiert den Funktionsumfang zum Verwalten von Inodes innerhalb des Dateisystems. Inodes können beispielsweise mit alloc\_inode
zugewiesen oder gelöscht werden mit destroy\_inode
. Sie können Inodes mit read\_inode
und write\_inode
lesen und schreiben oder die Datei synchronisieren System mit sync\_fs
. Die Struktur super\_operations
finden Sie unter ./linux/include/linux/fs.h. Jedes Dateisystem stellt seine eigene Inode-Methoden, die die Operationen implementieren und die gemeinsame Abstraktion für die VFS-Schicht bereitstellen.
Physikalische Struktur
Die physische Struktur von Ext2-Dateisystemen wurde stark vom Layout beeinflusst des BSD-Dateisystems. Ein Dateisystem besteht aus Blockgruppen. Blockgruppen sind analog zu den Zylindergruppen von BSD FFS. Blockgruppen sind jedoch nicht an das physische Layout der Blöcke auf der Festplatte gebunden, da moderne Laufwerke in der Regel für den sequentiellen Zugriff optimiert sind und ihre physische Geometrie für das Betriebssystem verbergen.
,---------+---------+---------+---------+---------,
| Boot | Block | Block | ... | Block |
| sector | group 1 | group 2 | | group n |
`---------+---------+---------+---------+---------"
Jede Blockgruppe enthält eine redundante Kopie der wichtigsten Informationen zur Dateisystemsteuerung (Superblock und Dateisystem) Deskriptoren) und enthält auch einen Teil des Dateisystems (eine Blockbitmap, eine Inode-Bitmap, einen Teil der Inode-Tabelle und Datenblöcke). Die Struktur einer Blockgruppe ist in dieser Tabelle dargestellt:
,---------+---------+---------+---------+---------+---------,
| Super | FS | Block | Inode | Inode | Data |
| block | desc. | bitmap | bitmap | table | blocks |
`---------+---------+---------+---------+---------+---------"
Die Verwendung von Blockgruppen ist ein großer Gewinn in Bezug auf die Zuverlässigkeit: Da die Kontrollstrukturen in jeder Blockgruppe repliziert werden, ist dies der Fall ist e Sie können von einem Dateisystem wiederherstellen, in dem der Superblock beschädigt wurde. Diese Struktur trägt auch zu einer guten Leistung bei: Durch Verringern des Abstands zwischen der Inode-Tabelle und den Datenblöcken ist es möglich, die Suche nach Plattenkopf während der E / A für Dateien zu verringern.
Referenz: – Erweiterte Dateisysteme (Ext, Ext2, Ext3)
Antwort
Dateisysteme unter Linux arbeiten auf mehreren Ebenen: A) a Satz primitiver Routinen zur Interaktion mit dem Gerät (dh dem Treiber), B) Satz Datensätze auf der Festplatte, die den von uns als Dateien bezeichneten Dateien entsprechen, und C) Metadateninformationen zu jeder Datei, die als Inodes bezeichnet werden, für jede Datei gibt es 1 Inode. Diese Inodes verfolgen Dinge wie Ihre Dateiattribute, wie das Lesen / Schreiben in Ihren Dateien definiert ist usw.
Es stellt sich heraus, dass dies nur ein unvollständiges Bild ist. Das heißt, bevor jede Art von Dateisystem die Inodes nach Belieben auf der Festplatte anordnen kann. Selbst die Darstellung der Inodes auf der Festplatte kann zwischen verschiedenen Dateisystemen variieren – es kommt nur darauf an, dass die view Das VFS wird mit den Inode-Strukturen versehen, die übereinstimmen. Linux weiß also nicht per se, wie auf die einzelnen Dateien / Inodes in einem Dateisystem zugegriffen werden kann.
Das Problem wird durch die Verwendung der struct file\_system und der struct sauber gelöst super\_block Typen. Letzterer lebt auf der Festplatte, während Ersterer nur im Speicher lebt. Wenn Sie ein Dateisystem mit say
mounten -t ext4 / dev / mounten usb1 / mnt / usb1
Das Objekt Dateisystem , das den ext4-Typ definiert, enthält ein mount () , die angibt, wie das Superblock-Objekt von der Festplatte gelesen wird. Dieses Superblock-Objekt gibt alles an, was Sie benötigen, um auf die Inodes im Gerät zuzugreifen (zuzuweisen, zu löschen, zu lesen, zu korrigieren, zwischen Gerät und Speicher zu synchronisieren usw.).Sobald dieses Superblock-Objekt in den Speicher abgerufen wurde, verwenden wir seine lookup () -Operationen, um Inodes von der Festplatte in den Speicher zu lesen. Dann verwenden wir diese Inodes der Reihe nach, um an die Dateisysteme zu gelangen. Es ist wirklich hierarchisch und ziemlich ordentlich!