Dateisystem ext2. Arten von Linux-Dateisystemen und ihre Funktionen. Datenadressierungssystem

Schauen wir uns die logische Struktur des ext2fs-Dateisystems an. Physisch Festplatte unterteilt in Sektoren von 512 Bytes. Der erste Sektor einer Festplattenpartition in jedem Dateisystem wird als Boot-Bereich betrachtet. In der primären Partition enthält dieser Bereich den Boot-Eintrag – einen Code, der den Boot-Vorgang initiiert Betriebssystem am Anfang. Dieser Bereich wird auf anderen Partitionen nicht verwendet. Die restlichen Sektoren werden zu logischen Blöcken von 1, 2 oder 4 Kilobyte Größe zusammengefasst. Ein logischer Block ist das kleinste adressierbare Datenelement: Die Daten jeder Datei belegen eine ganzzahlige Anzahl von Blöcken. Blöcke wiederum werden zu Blockgruppen zusammengefasst. Blockgruppen und Blöcke innerhalb einer Gruppe werden fortlaufend nummeriert, beginnend mit 1.

Die beim Arbeiten mit dem ext2fs-Dateisystem verwendeten Datenstrukturen werden in der Header-Datei /usr/include/linux/ext2fs .h beschrieben.

Der Superblock dient als Ausgangspunkt des Dateisystems und speichert alles

Informationen über sie. Es ist 1024 Byte groß und befindet sich 1024 Byte versetzt vom Anfang des Dateisystems. Es wird in jeder Blockgruppe dupliziert, sodass Sie es nach Ausfällen schnell wiederherstellen können. Der Superblock bestimmt die Größe des Dateisystems, die maximale Anzahl von Dateien in der Partition, die Menge an freiem Speicherplatz und enthält Informationen darüber, wo nach nicht zugewiesenen Bereichen gesucht werden soll. Wenn das Betriebssystem startet, wird der Superblock in den Speicher eingelesen und alle Änderungen am Dateisystem werden zunächst in einer Kopie des Superblocks im Betriebssystem widergespiegelt und nur in regelmäßigen Abständen auf die Festplatte geschrieben. Dies verbessert die Systemleistung, da viele Benutzer und Prozesse ständig Dateien aktualisieren. Wenn das System hingegen gestoppt wird, muss der Superblock auf die Festplatte geschrieben werden, was ein Ausschalten des Computers durch einfaches Ausschalten der Stromversorgung nicht zulässt. Andernfalls sind die im Sunblocker aufgezeichneten Informationen beim nächsten Start nicht mehr vorhanden

entspricht dem tatsächlichen Zustand des Dateisystems.

Nach dem Superblock folgt eine Beschreibung (Deskriptor) der Blockgruppe. Mithilfe der darin gespeicherten Informationen können Sie die Block- und Inode-Bitmaps sowie die Inode-Tabelle finden.

Eine Block-Bitmap ist eine Struktur, in der jedes Bit angibt, ob derselbe Block einer Datei zugeordnet ist. Ein Wert von 1 zeigt an, dass der Block beschäftigt ist. Diese Karte wird verwendet, um nach freien Blöcken zu suchen, wenn einer Datei Speicherplatz zugewiesen werden muss.

Die Inode-Bitmap erfüllt eine ähnliche Funktion wie die Inode-Tabelle: Sie zeigt an, welche Inodes verwendet werden.

Jede Datei hat genau einen Inode (Inode, i-Node, Informationsknoten), der durch seine Seriennummer – den Dateiindex – identifiziert wird. Der Inode speichert die Metadaten der Datei. Darunter sind alle Attribute der Datei außer ihrem Namen und ein Zeiger auf die Dateidaten.

Für eine reguläre Datei oder ein reguläres Verzeichnis ist dieser Zeiger ein Array von 15 Blockadressen. Die ersten 12 Adressen in diesem Array sind direkte Links zu den Blocknummern, in denen die Dateidaten gespeichert sind. Passen die Daten nicht in 12 Blöcke, wird der indirekte Adressierungsmechanismus aktiviert. Die nächste Adresse in diesem Array ist ein indirekter Link, also die Adresse eines Blocks, der eine Liste von Adressen der nächsten Blöcke mit Daten aus dieser Datei speichert.

Wie viele Datenblöcke können auf diese Weise adressiert werden? Die Blockadresse nimmt 4 Bytes ein, der Block nimmt, wie bereits erwähnt, 1, 2 oder 4 Kilobytes ein. Dies bedeutet, dass durch indirekte Adressierung 256 - 1024 Blöcke platziert werden können.

Was ist, wenn die Datei noch länger ist? Die nächste Adresse im Zeiger-Array zeigt auf den doppelten indirekten Adressierungsblock (doppelter indirekter Block). Dieser Block enthält eine Liste von Blockadressen, die wiederum Listen von Adressen der nächsten Datenblöcke enthalten.

Und schließlich gibt die letzte Adresse im Zeigerarray die Adresse des dreifachen indirekten Blocks an, d. h. eines Blocks mit einer Liste von Blockadressen, bei denen es sich um doppelte indirekte Blöcke handelt.

Es bleibt unklar, wo sich der Dateiname befindet, wenn er nicht zu den Dateidaten oder deren Metadaten gehört. In UNIX-ähnlichen Systemen ist ein Dateiname kein Attribut der Datei selbst, sondern des Dateisystems, verstanden als logische Verzeichnisstruktur. Der Dateiname wird nur in dem Verzeichnis gespeichert, dem die Datei zugeordnet ist, und nirgendwo anders. Daraus ergeben sich interessante Konsequenzen.

Erstens kann ein einzelner Inode einer beliebigen Anzahl von Namen entsprechen, die verschiedenen Verzeichnissen zugewiesen sind und die alle real sind. Im Inode wird die Anzahl der Namen (Hardlinks) gezählt. Dies ist die Zahl, die Sie mit dem Befehl Is -1 sehen können.

Zweitens bedeutet das Löschen einer Datei lediglich, dass ihr Eintrag aus den Verzeichnisdaten entfernt und die Linkanzahl um 1 verringert wird.

Drittens können Sie einen Namen nur einer Inode-Nummer innerhalb desselben Dateisystems zuordnen, weshalb Sie keinen festen Link zu einem anderen Dateisystem erstellen können (ein symbolischer Link ist möglich, er verfügt über einen anderen Speichermechanismus).

Das Verzeichnis selbst wird auf die gleiche Weise seinem übergeordneten Verzeichnis zugeordnet. Das Stammverzeichnis wird immer auf Inode Nummer 2 geschrieben (Nummer 1 ist für die Liste der Adressen fehlerhafter Blöcke reserviert). Jedes Verzeichnis speichert einen Link zu sich selbst und zu seinem übergeordneten Verzeichnis – dies sind die Pseudo-Unterverzeichnisse „.“ Und "..".

Somit ist die Anzahl der Links zu einem Verzeichnis gleich der Anzahl seiner Unterverzeichnisse plus zwei.

Die Verzeichnisdaten sind eine verknüpfte Liste mit Einträgen variabler Länge und sehen etwa so aus:

Verzeichnisstruktur in ext2fs

Was ist mit physischen Gerätedateien? Sie können sich in denselben Verzeichnissen wie normale Dateien befinden: Es gibt keine Daten im Verzeichnis, die darauf hinweisen, dass der Name zu der Datei auf der Festplatte oder dem Gerät gehört. Der Unterschied liegt auf der Inode-Ebene. Wenn der I-Node einer regulären Datei auf die Festplattenblöcke zeigt, in denen ihre Daten gespeichert sind, dann enthält der I-Node der Gerätedatei einen Zeiger auf die Liste der Gerätetreiber im Kernel – das entsprechende Element der Liste die Hauptgerätenummer:

Unterschied zwischen regulärer Datei und Gerätedatei

Eigenschaften des ext2fs-Dateisystems:

Die maximale Dateisystemgröße beträgt 4 TB.

Die maximale Dateigröße beträgt 2 GB.

Die maximale Länge des Dateinamens beträgt 255 Zeichen.

Die minimale Blockgröße beträgt 1024 Byte.

Die Anzahl der zugewiesenen Inodes beträgt 1 pro 4096 Byte der Partition.

Wie jedes UNIX-Dateisystem enthält ext2 die folgenden Komponenten:

− Blöcke und Blockgruppen;

− Indexdeskriptor;

− Superblock.

Der gesamte Speicherplatz der Festplattenpartition ist in Blöcke fester Größe unterteilt, die ein Vielfaches der Sektorgröße sind: 1024, 2048, 4096 oder 8192 Byte. Die Blockgröße wird beim Erstellen des Dateisystems auf der Festplattenpartition angegeben. Eine kleinere Blockgröße spart Festplattenspeicher, begrenzt aber auch die maximale Dateisystemgröße. Alle Blöcke haben Seriennummern. Um die Fragmentierung und die Anzahl der Bewegungen der Festplattenköpfe beim Lesen großer Datenmengen zu reduzieren, werden Blöcke zu Blockgruppen zusammengefasst.

Das Grundkonzept eines Dateisystems ist ein Indexdeskriptor oder Inode (englischer Informationsknoten). Dabei handelt es sich um eine spezielle Struktur, die Informationen über die Attribute und den physischen Speicherort der Datei enthält. Die Inodes sind in einer Tabelle organisiert, die am Anfang jeder Blockgruppe enthalten ist.

Abbildung 10 – Verallgemeinertes Blockdiagramm von ext2 FS

Superblock ist das Hauptelement des ext2-Dateisystems. Er enthält allgemeine Informationen zum Dateisystem:

die Gesamtzahl der Blöcke und Inodes im Dateisystem,

Anzahl der freien Blöcke und Inodes im Dateisystem,

Blockgröße des Dateisystems,

Anzahl der Blöcke und Inodes in einer Blockgruppe,

Inode-Größe,

Dateisystem-ID.

Der Superblock ist 1024 Bytes vom Anfang des Abschnitts entfernt. Die Integrität des Superblocks wirkt sich direkt auf die Leistung des Dateisystems aus. Das Betriebssystem erstellt mehrere Sicherungskopien Superblock für den Fall, dass die Partition beschädigt ist. Im nächsten Block nach dem Superblock befindet sich eine globale Deskriptortabelle – eine Beschreibung von Blockgruppen, bei der es sich um ein Array handelt, das allgemeine Informationen zu allen Blockgruppen im Abschnitt enthält.

Alle Blöcke der ext2-Partition sind in Blockgruppen unterteilt. Für jede Gruppe wird ein separater Eintrag in der globalen Deskriptortabelle erstellt, in dem die Hauptparameter gespeichert sind:

Blocknummer in der Blockbitmap,

Blocknummer in der Inode-Bitmap,

Blocknummer in der Inode-Tabelle,

Anzahl der freien Blöcke in der Gruppe,

Anzahl der Inodes, die Verzeichnisse enthalten.

Eine Block-Bitmap ist eine Struktur, in der jedes Bit angibt, ob der entsprechende Block einer Datei zugeordnet ist. Wenn das Bit 1 ist, ist der Block beschäftigt. Eine ähnliche Funktion übernimmt die Inode-Bitmap, die anzeigt, welche Inodes belegt sind und welche nicht. Der Linux-Kernel versucht anhand der Anzahl der Inodes, die Verzeichnisse enthalten, die Inodes von Verzeichnissen gleichmäßig in Gruppen zu verteilen und versucht, die Inodes von Dateien, wenn möglich, in die Gruppe mit dem übergeordneten Verzeichnis zu verschieben. Der gesamte verbleibende Speicherplatz, der in der Tabelle als Daten bezeichnet wird, wird zum Speichern von Dateien reserviert.

Das ext2-Dateisystem verwendet das folgende Dateiblockadressierungsschema. Zur Speicherung der Dateiadresse werden 15 Felder zugewiesen, die jeweils aus 4 Bytes bestehen. Passt die Datei in 12 Blöcke, werden die Nummern der entsprechenden Cluster direkt in den ersten zwölf Feldern der Adresse aufgeführt. Wenn die Dateigröße 12 Blöcke überschreitet, enthält das nächste Feld die Adresse des Clusters, in dem sich die Nummern der nächsten Blöcke der Datei befinden können. Somit wird das 13. Feld zur indirekten Adressierung verwendet.

Bei einer maximalen Blockgröße von 4096 Bytes kann der dem 13. Feld entsprechende Cluster bis zu 1024 Nummern der folgenden Dateiblöcke enthalten. Wenn die Dateigröße 12+1024 Blöcke überschreitet, wird das 14. Feld verwendet, das die Adresse eines Clusters mit 1024 Clusternummern enthält, die sich jeweils auf 1024 Blöcke der Datei beziehen. Hier kommt bereits die doppelte indirekte Adressierung zum Einsatz. Wenn die Datei schließlich mehr als 12+1024+1048576 Blöcke enthält, wird das letzte 15. Feld für die dreifache Indirektion verwendet.

Dieses Adressierungssystem ermöglicht Dateien mit einer Größe von mehr als 2 TB und einer maximalen Blockgröße von 4096 Byte.

ext3 oder ext3fs ist ein Journaling-Dateisystem, das in Betriebssystemen verwendet wird, die auf dem Linux-Kernel basieren. Basierend auf dem ext2-Dateisystem.

Der Hauptunterschied zu ext2 besteht darin, dass ext3 ein Journaling ist, das heißt, es ermöglicht die Aufzeichnung einiger Daten, die es Ihnen ermöglichen, das Dateisystem bei Computerausfällen wiederherzustellen.

Der Standard bietet drei Protokollierungsmodi:

Rückschreiben: Nur Metadaten des Dateisystems, also Informationen über seine Änderungen, werden in das Protokoll geschrieben. Es kann die Datenintegrität nicht garantieren, verkürzt aber die Überprüfungszeit im Vergleich zu ext2 bereits erheblich;

bestellt: das Gleiche wie Writeback, aber es wird garantiert, dass Daten in eine Datei geschrieben werden, bevor Informationen über Änderungen an dieser Datei geschrieben werden. Reduziert die Leistung leicht und kann auch die Datenintegrität nicht garantieren (obwohl es die Wahrscheinlichkeit ihrer Sicherheit erhöht, wenn es an das Ende einer vorhandenen Datei angehängt wird);

Journal: Vollständige Protokollierung sowohl der FS-Metadaten als auch der Benutzerdaten. Der langsamste, aber auch der meiste Sicherheitsmodus; kann die Datenintegrität gewährleisten, wenn das Protokoll auf einer separaten Partition (oder noch besser, auf einer separaten Festplatte) gespeichert wird.

Das ext3-Dateisystem unterstützt Dateien mit einer Größe von bis zu 1 TB. Beim Linux-Kernel 2.4 ist die Dateisystemgröße durch die maximale Blockgerätegröße begrenzt, die 2 Terabyte beträgt. In Linux 2.6 (für 32-Bit-Prozessoren) beträgt die maximale Blockgerätegröße 16 TB, ext3 unterstützt jedoch nur bis zu 4 TB.

ext4 ist ein Dateisystem, das auf ext3 basiert und mit diesem kompatibel ist (vorwärts und rückwärts). Unterscheidet sich von ext3 durch die Unterstützung von Extents, Gruppen benachbarter physischer Blöcke, die als Ganzes verwaltet werden; erhöhte Geschwindigkeit Integritätsprüfungen und eine Reihe weiterer Verbesserungen.

Neue Funktionen von ext4 (im Vergleich zu ext3):

Extents verwenden. Im ext3-Dateisystem erfolgte die Datenadressierung auf herkömmliche Weise Block für Block. Diese Adressierungsmethode wird mit zunehmender Dateigröße weniger effizient. Mit Extents können Sie eine große Anzahl (bis zu 128 MB) aufeinanderfolgender Blöcke mit einem Deskriptor adressieren. Bis zu 4 Zeiger auf Extents können direkt im Inode platziert werden, was für kleine bis mittelgroße Dateien ausreichend ist.

48-Bit-Blocknummern. Bei einer Blockgröße von 4 KB kann so bis zu einem Exabyte adressiert werden (2 48 *4 KB = 2 50 * 1 KB = 2 60 B = 1 EB).

Zuordnung von Blöcken in Gruppen (Multiblock-Zuteilung). Das Dateisystem speichert nicht nur Informationen über den Speicherort freier Blöcke, sondern auch die Anzahl der aufeinander folgenden freien Blöcke. Beim Zuweisen von Speicherplatz findet das Dateisystem ein Fragment, in das Daten ohne Fragmentierung geschrieben werden können. Dadurch wird der Fragmentierungsgrad des gesamten Dateisystems verringert.

Verzögerte Zuweisung von Blöcken. Die Zuweisung von Blöcken zum Speichern von Dateidaten erfolgt unmittelbar vor dem physischen Schreiben auf die Festplatte (z. B. beim Aufruf von sync) und nicht beim Aufruf von write. Dadurch können Blockzuteilungsvorgänge nicht einzeln, sondern in Gruppen durchgeführt werden, was wiederum die Fragmentierung minimiert und den Prozess der Blockzuteilung beschleunigt. Andererseits erhöht es das Risiko eines Datenverlusts bei einem plötzlichen Stromausfall.

Die Grenze von 32.000 Verzeichnissen wurde überschritten.

Reservieren von Inodes beim Erstellen eines Verzeichnisses (Reservierung von Verzeichnis-Inodes). Beim Erstellen eines Verzeichnisses werden mehrere Inodes reserviert. Anschließend werden beim Erstellen von Dateien in diesem Verzeichnis zunächst die reservierten Inodes verwendet, und wenn keine mehr vorhanden sind, wird der normale Vorgang durchgeführt.

Inode-Größe. Die Inode-Größe (Standard) wurde von 128 auf 256 Byte erhöht. Dadurch konnten die unten aufgeführten Vorteile realisiert werden.

Nanosekunden-Zeitstempel. Höhere Genauigkeit der im Inode gespeicherten Zeiten. Auch der Bereich der gespeicherten Zeiten wurde erweitert: Lag die Obergrenze der gespeicherten Zeit bisher am 18. Januar 2038, ist sie nun der 25. April 2514.

Inode-Version. Im Inode ist eine Zahl aufgetaucht, die sich jedes Mal erhöht, wenn sich der Inode der Datei ändert.

Speichern erweiterter Attribute im Inode (EA im Inode). Das Speichern erweiterter Attribute wie ACLs, SELinux-Attribute und anderer kann die Leistung verbessern. Attribute, für die im Inode nicht genügend Platz vorhanden ist, werden in einem separaten 4-KB-Block gespeichert.

Journal-Prüfsummenbildung. Prüfsummen Transaktionen protokollieren. Ermöglicht Ihnen, Fehler bei der Überprüfung der Systemintegrität nach einem Ausfall besser zu finden und (manchmal) zu beheben.

Permanente Vorbelegung. Damit eine Anwendung nun garantiert Platz im Dateisystem einnimmt, füllt sie diesen mit Nullen. In ext4 wurde es möglich, viele Blöcke zum Schreiben zu reservieren und keine zusätzliche Zeit für die Initialisierung aufzuwenden. Wenn eine Anwendung versucht, die Daten zu lesen, erhält sie eine Meldung, dass sie nicht initialisiert ist. Somit ist es nicht möglich, gelöschte Daten unbefugt auszulesen.

Defragmentierung ohne Aushängen (Online-Defragmentierung).

Nicht initialisierte Gruppen. Ermöglicht die Beschleunigung der Dateisystemprüfung. Als unbenutzt gekennzeichnete Einheiten werden in Gruppen überprüft. Eine detaillierte Inspektion wird nur dann durchgeführt, wenn die Inspektion der Gruppe ergibt, dass im Inneren Schäden vorliegen.

Vorlesung 12.

Thema: Verzeichnissysteme

Die Verbindung zwischen einem Dateiverwaltungssystem und einer Reihe von Dateien ist ein Dateiverzeichnis. Die einfachste Form eines Verzeichnissystems besteht darin, dass es ein Verzeichnis gibt, das alle Dateien enthält. Das Verzeichnis enthält Informationen zu Dateien, einschließlich Attributen, Speicherort und Eigentümer. Benutzer greifen über symbolische Namen auf Dateien zu. Allerdings begrenzt das menschliche Gedächtnis die Anzahl der Objektnamen, auf die ein Benutzer namentlich verweisen kann. Durch die hierarchische Organisation des Namensraums können wir diese Grenzen deutlich erweitern. Aus diesem Grund haben Katalogsysteme hierarchische Struktur. Der die Verzeichnishierarchie beschreibende Graph kann ein Baum oder ein Netzwerk sein. Verzeichnisse bilden einen Baum, wenn eine Datei nur in einem Verzeichnis enthalten sein darf (Abb. 7.11), und ein Netzwerk, wenn die Datei in mehreren Verzeichnissen enthalten sein darf.

Zum Beispiel in Ms-Dos und Windows-Verzeichnisse bilden eine Baumstruktur und in UNIX eine Netzwerkstruktur. IN Allgemeiner Fall Ein Computersystem kann mehrere Festplattengeräte haben; selbst ein PC verfügt immer über mehrere Festplatten: Diskette, Festplatte, CD-ROM (DVD). Wie organisiert man in diesem Fall die Dateispeicherung?

Reis. Katalogsysteme

Die erste Lösung besteht darin, auf jedem Gerät ein Offline-Dateisystem zu hosten, d. h. Die auf diesem Gerät befindlichen Dateien werden durch einen Verzeichnisbaum beschrieben, der in keiner Weise mit den Verzeichnisbäumen auf anderen Geräten verbunden ist. In diesem Fall muss der Benutzer zur eindeutigen Identifizierung der Datei die logische Gerätekennung zusammen mit dem zusammengesetzten symbolischen Dateinamen angeben. Ein Beispiel für eine solche autonome Existenz ist MS-DOS, Windows 95/98/Me/XP.

Eine andere Lösung besteht darin, die Dateispeicherung so zu organisieren, dass der Benutzer die Möglichkeit erhält, die darauf befindlichen Dateisysteme zu kombinieren verschiedene Geräte, in ein einzelnes Dateisystem, das durch einen einzelnen Verzeichnisbaum beschrieben wird. Dieser Vorgang wird als Montage bezeichnet.

Unter UNIX OS erfolgt die Montage wie folgt. Unter allen verfügbaren logischen Festplattengeräten sticht eines hervor, das sogenannte Systemgerät. Lassen Sie es zwei Dateisysteme geben, die sich auf unterschiedlichen befinden logische Laufwerke, und eine der Festplatten ist die Systemfestplatte (Abb. 7.12).

Das auf der Systemfestplatte befindliche Dateisystem wird als Root bezeichnet. Um Dateihierarchien im Root-Dateisystem zu verknüpfen, wird ein vorhandenes Verzeichnis ausgewählt in diesem Beispiel– Verzeichnisstandort. Sobald die Bereitstellung abgeschlossen ist, wird das ausgewählte loc-Verzeichnis zum Stammverzeichnis des zweiten Dateisystems. Über dieses Verzeichnis wird das gemountete Dateisystem als Teilbaum an den Gesamtbaum angehängt.

Reis. Montage

Attribut

Das Konzept einer Datei umfasst nicht nur die darin gespeicherten Daten und den Namen, sondern auch Informationen, die die Eigenschaften der Datei beschreiben. Diese Informationen bilden die Attribute der Datei. Die Liste der Attribute kann je nach Betriebssystem variieren. Ein Beispiel für mögliche Attribute ist unten dargestellt.

Attribut Bedeutung
Dateityp Regulär, Katalog, Spezial usw.
Dateieigentümer Aktueller Besitzer
Dateiersteller ID des Benutzers, der die Datei erstellt hat
Passwort Passwort für den Zugriff auf die Datei
Zeit Erstellt, zuletzt aufgerufen, zuletzt geändert
Aktuelle Dateigröße Anzahl der Bytes in einem Datensatz
Maximale Größe Anzahl der Bytes, auf die die Dateigröße erhöht werden kann
Schreibgeschütztes Flag 0 – Lesen/Schreiben, 1 – Nur Lesen
Flagge „Versteckt“. 0 – normal, 1 – nicht in der Liste der Verzeichnisdateien anzeigen
Systemflag 0 – normal, 1 – System
Flag „Archivieren“. 0 – archiviert, 1 – Archivierung erforderlich
ASCII/Binär-Flag 0 – ASCII, 1 – binär
Markierung für wahlfreien Zugriff 0 – nur sequenzieller Zugriff, 1 – wahlfreier Zugriff
Flagge „vorübergehend“ 0 – normal, 1 – Löschung nach Prozessende
Schlüsselposition Offset zur Eingabe des Datensatzes
Schlüssellänge Anzahl der Bytes im Schlüsselfeld

Der Benutzer kann über die dafür vorgesehenen Möglichkeiten des Dateisystems auf Attribute zugreifen. Normalerweise können Sie den Wert aller Attribute lesen, aber nur einige ändern.

Dateiattributwerte können in Verzeichnissen enthalten sein, wie dies beispielsweise in MS-DOS der Fall ist (Abb. 7.7). Eine andere Möglichkeit besteht darin, Attribute in speziellen Tabellen zu platzieren. In diesem Fall enthalten die Kataloge Links zu diesen Tabellen.

Reis. 7. Attribute von MS-DOS-Dateien

Das Linux-Dateisystem ist am häufigsten ext4. Es wird protokolliert und ermöglicht es Ihnen, bei der Lösung der meisten Probleme bequem mit Daten zu arbeiten. Es gibt jedoch noch andere. Im Rahmen dieses Materials werden die wichtigsten Arten von Dateisystemen und die Prinzipien der Arbeit mit ihnen besprochen.

Datentypen Linux-Systeme und ihre Eigenschaften

Besondere Merkmale sind die Geschwindigkeit der Arbeit mit Dateien, Sicherheit und Parameter (z. B. Blockgröße), die standardmäßig vorhanden sind und beim Erstellen des FS festgelegt werden. Vielleicht am meisten wichtiges Merkmal ist die Präsenz einer Zeitschrift. Das Systemprotokoll zeichnet Daten auf bzw Metadaten(nur Header), aus denen im Falle eines Fehlers Informationen wiederhergestellt werden können.

Ein Dateisystem kann auf jedem Gerät erstellt werden: auf einer Festplatte oder einer Systempartition.

EXT2-Dateisystem

EXT2 ist derzeit ein veraltetes Dateisystem, das in modernen Installationen praktisch nicht verwendet wird. Der Hauptnachteil ist die fehlende Protokollierung, die eine Wiederherstellung der Daten im Fehlerfall dementsprechend unmöglich macht. Gilt immer noch für tragbare Medien Informationen wie USB. Ein Magazin ist für sie nicht erforderlich, da es einen gewissen Platz einnimmt.

Es garantiert außerdem maximale Arbeitsgeschwindigkeit.

  • für EXT2 maximale Dateigröße -2 TB

EXT3-Dateisystem

Ersetzt EXT2, das Hauptmerkmal ist das Erscheinungsbild des Magazins und ist vollständig abwärtskompatibel mit EXT2 (EXT2 kann frei in EXT3 konvertiert werden). Heutzutage ist es auch selten; EXT4 wird fast immer verwendet.

Journal – ein spezieller Bereich im Speicher, in dem Informationen über alle Änderungen aufgezeichnet werden

  • für EXT3 maximale Dateigröße -2 TB
  • Die maximale Größe aller Dateien beträgt 32 TB
  • Jedes Verzeichnis kann bis zu 32.000 Unterverzeichnisse haben

Beim Journaling gibt es drei Möglichkeiten (beim Erstellen des Dateisystems angegeben):

  • Journal – Metadaten sowie die Informationen selbst in das Journal
  • geordnet – Standardoption, nur Metadaten werden gespeichert, auch nach dem Schreiben auf die Festplatte
  • Rückschreiben – Es werden auch nur Metadaten gespeichert. Sie können wählen, ob Sie sie vor oder nach dem Schreiben auf die Festplatte speichern möchten

EXT4-Dateisystem

Die moderne Version des erweiterten Dateisystems wird am häufigsten verwendet

  • maximale Dateigröße -2 TB 16 TB
  • Die maximale Größe aller Dateien beträgt 1 EB (Exabyte). 1 EB = 1024 PB (Petabyte). 1 PB = 1024 TB (Terabyte).
  • Jedes Verzeichnis kann bis zu 64.000 Unterverzeichnisse haben

In EXT4 kann die Protokollierung durch Setzen der Option ausgeschaltet werden Daten im eingebauten Zustand aus

EXT als wichtigstes Linux-Dateisystem und Betriebspraxis

Das Dateisystem wird mit dem Befehl mk2fs erstellt

Die erforderliche Protokollierungsoption wird beim Mounten angegeben, zum Beispiel:

mount /dev/vdc /mnt/1 -t ext3 -o data=journal

Konvertierung von EXT2 E nach XT3

ReiserFS

ReiserFS (und die moderne Implementierung von Reiser4 mit SELinux-Unterstützung) bietet eine gute Leistung und ist sehr produktiv – insbesondere bei der Arbeit mit einer großen Anzahl kleiner Dateien. ReiserFS weist nicht jeder kleinen Datei Inodes zu und verarbeitet sie gemeinsam; ReiserFS verwendet auch ein Protokoll mit mehreren Verfügbare Optionen. Derzeit wird das Dateisystem von Entwicklern aus Russland unterstützt.

Mit dem Befehl können Sie einen FS für ein Gerät erstellen

XFS

XFS ist ein Journaling-Dateisystem. Verwendet RAM zum Speichern von Informationen, daher ist ein Datenverlust möglich – beispielsweise bei einem Stromausfall.

Um XFS unter Ubuntu verwenden zu können, müssen Sie Pakete installieren xfsprogs Und xfsdump

vfett

Linux-Dateisystem, auch zu finden in Windows-Umgebung. Es wird verwendet, wenn Sie den gemeinsamen Zugriff auf bestimmte Festplatten und Partitionen von Clients mit unterschiedlichen Betriebssystemen organisieren müssen. In anderen Fällen wird die Verwendung nicht empfohlen, da es beim Arbeiten unter Linux zu Schwierigkeiten kommen kann.

(Zweites erweitertes Dateisystem).

· Geschichte der Entwicklung von Linux-Dateisystemen

· Festplattenpartitionsstruktur in ext2fs

·

· Kataloge

· Gerätedateien

·

·

· EXT2fs-Bibliothek

· EXT2fs-Systemtools

· Leistungsberechnung

Fakultät für Mathematik

Software

2. Jahr 5. Gr.

Tschitschirow Andrej

Falsches System EXT2fs (Zweites erweitertes Dateisystem).

Geschichte der Entwicklung von Linux-Dateisystemen

Die ersten Linux-Versionen wurden auf Basis des Minix-Betriebssystems entwickelt. Da es einfacher wäre, die Festplatten zwischen den beiden Systemen zu teilen, als ein neues Dateisystem zu entwickeln, beschloss Linus Torvalds, Linux-Unterstützung für das Minix-Dateisystem einzuführen. Zu dieser Zeit war dieses Dateisystem ein recht effizientes Softwareprodukt mit relativ wenigen Fehlern.

Die mit der Struktur des Minix-Dateisystems verbundenen Einschränkungen waren jedoch recht hoch, sodass man über die Entwicklung eines neuen Dateisystems für Linux nachdachte.

Um die Implementierung des neuen Dateisystems in den Linux-Kernel zu vereinfachen, wurde ein virtuelles Dateisystem (VFS) entwickelt. VFS wurde ursprünglich von Chris Provenzano geschrieben und dann von Linus Torvalds umgeschrieben, bevor es in den Kernel integriert wurde.

Nach der Installation von VFS im Kernel wurde im April 1992 ein neues Dateisystem, EXTfs (Extended File System), entwickelt und zur Linux-Version 0.96c hinzugefügt. Im neuen Dateisystem wurden zwei wesentliche Einschränkungen des Minix-Systems entfernt: Seine maximale Größe konnte 2 Gigabyte erreichen und die maximale Länge des Dateinamens konnte 255 Zeichen betragen. Dies stellte eine Verbesserung gegenüber dem Minix-Dateisystem dar, obwohl einige Probleme weiterhin vorhanden waren. Es gab keine Unterstützung für den gemeinsamen Zugriff, die Änderung des Indexdeskriptors und die Änderung der Zeitzellen für Dateiänderungen. Dieses Dateisystem verwendete verknüpfte Listen, um freie Blöcke und Inodes zu bearbeiten, was sich stark auf die Systemleistung auswirkte: Mit der Zeit wurden die Listen ungeordnet und unsortiert, was zu einer Fragmentierung des Dateisystems führte.

Die Lösung dieser Probleme war die Veröffentlichung von Alpha-Versionen zweier neuer Dateisysteme im Januar 1993: Xia und EXT2fs (Second Extended File System). Das Xia-Dateisystem basierte größtenteils auf Minix, wobei einige neue Funktionen hinzugefügt wurden. Dies lag vor allem an der Möglichkeit, mit langen Dateinamen zu arbeiten, der Unterstützung größerer Festplattenpartitionen und der Unterstützung von drei Zeitzellen für Dateiänderungen. Andererseits basierte EXT2fs auf EXTfs mit vielen Verbesserungen und Ergänzungen. Es bot auch Möglichkeiten für die zukünftige Entwicklung.

Als diese beiden Dateisysteme veröffentlicht wurden, waren sie funktional ungefähr gleich. Das Xia-System war durch die Minimierung zuverlässiger als das EXT2fs. Mit zunehmender Verbreitung wurden Fehler im EXT2fs-System entdeckt und zahlreiche neue Funktionen und Verbesserungen hinzugefügt. Das EXT2fs-Dateisystem ist mittlerweile sehr zuverlässig und hat sich zum De-facto-Linux-Dateisystemstandard entwickelt.

Die folgende Tabelle enthält allgemeine Informationen über die Funktionalität verschiedener Dateisysteme.

Minix FS

Ext FS

Ext2FS

Xia FS

Maximale Dateisystemgröße

Maximale Länge Datei

Maximale Länge des Dateinamens

Unterstützung für drei Zeitzellen für Dateiänderungen

Erweiterbarkeit

Anpassbare Blockgröße

Informationsschutz

Bei Bedarf die Länge des Dateinamens in Durchwahl 2 kann auf 1012 erhöht werden.

EXT2fs reserviert eine bestimmte Anzahl von Blöcken für den Root-Benutzer. In der Regel sind dies 5 % der Gesamtmenge, sodass der Systemadministrator vermeiden kann, dass ihm der Speicherplatz ausgeht Festplatte wenn es mit der Arbeit der Prozesse anderer Benutzer gefüllt ist.

Festplattenpartitionsstruktur in ext2fs

Hersteller Festplatte liefern ihre Produkte in der Regel auf niedrigem Niveau formatiert aus. Soweit ich weiß, bedeutet dies, dass der gesamte Speicherplatz mithilfe spezieller Labels in „Sektoren“ von 512 Byte Größe unterteilt wird. Eine solche Festplatte (oder Festplattenpartition) muss für die Verwendung auf einem bestimmten Betriebssystem vorbereitet werden. In MS-DOS oder Windows-Verfahren Die Vorbereitung wird als Formatierung bezeichnet und unter Linux als Erstellung eines Dateisystems. Erstellen eines Dateisystems ext2fs besteht darin, eine bestimmte logische Struktur in einer Festplattenpartition zu erstellen. Diese Struktur ist wie folgt aufgebaut. Zunächst wird ein Boot-Bereich auf der Festplatte zugewiesen. Der Bootbereich wird auf einem beliebigen Dateisystem erstellt. Auf der primären Partition befindet sich ein Boot-Record – ein Codestück, das den Ladevorgang des Betriebssystems beim Start einleitet. Dieser Bereich wird auf anderen Partitionen nicht verwendet. Der Rest des Speicherplatzes ist in Blöcke unterteilt. Ein Block kann 1, 2 oder 4 Kilobyte groß sein. Ein Block ist eine adressierbare Einheit des Speicherplatzes. Da Dateien in Blöcken zugewiesen werden, müssen bei der Auswahl der Blockgröße Kompromisse eingegangen werden. Eine große Blockgröße verringert in der Regel die Anzahl der Festplattenzugriffe beim Lesen oder Schreiben einer Datei, erhöht jedoch die Menge an verschwendetem Speicherplatz, insbesondere wenn viele kleine Dateien vorhanden sind.

Blöcke in ihrem Bereich werden zu Blockgruppen zusammengefasst. Blockgruppen in einem Dateisystem und Blöcke innerhalb einer Gruppe werden fortlaufend nummeriert, beginnend mit 1. Der erste Block auf einer Festplatte hat die Nummer 1 und gehört zur Gruppennummer 1. Die Gesamtzahl der Blöcke auf einer Festplatte (in einer Festplattenpartition) ist ein Teiler der Kapazität der Festplatte, ausgedrückt in Sektoren. Und die Anzahl der Blockgruppen muss nicht durch die Anzahl der Blöcke geteilt werden, da die letzte Blockgruppe möglicherweise nicht vollständig ist. Der Anfang jeder Blockgruppe hat eine Adresse, die als ((Gruppennummer - 1)* (Anzahl der Blöcke in der Gruppe)) erhalten werden kann.

Jede Blockgruppe hat die gleiche Struktur. Seine Struktur ist in der folgenden Tabelle dargestellt.

Die Struktur einer Festplattenpartitionsgruppe von Blöcken in ext2fs

Das erste Element dieser Struktur (Superblock) ist für alle Gruppen gleich, alle anderen sind für jede Gruppe individuell. Der Superblock wird im ersten Block jeder Blockgruppe gespeichert (mit Ausnahme von Gruppe 1, in der der erste Block Folgendes enthält). Boot-Record). Superblock ist der Ausgangspunkt des Dateisystems. Es ist 1024 Byte groß und Stets befindet sich am Offset 1024 Byte vom Anfang des Dateisystems. Das Vorhandensein mehrerer Kopien eines Superblocks erklärt sich aus der extremen Bedeutung dieses Elements des Dateisystems. Superblock-Duplikate werden bei der Wiederherstellung eines Dateisystems nach Fehlern verwendet.

Die im Superblock gespeicherten Informationen werden verwendet, um den Zugriff auf die restlichen Daten auf der Festplatte zu organisieren. Der Superblock bestimmt die Größe des Dateisystems, die maximale Anzahl von Dateien in der Partition, die Menge an freiem Speicherplatz und enthält Informationen darüber, wo nach nicht zugewiesenen Bereichen gesucht werden soll. Wenn das Betriebssystem startet, wird der Superblock in den Speicher eingelesen und alle Änderungen am Dateisystem werden zunächst in einer Kopie des Superblocks im Betriebssystem widergespiegelt und nur in regelmäßigen Abständen auf die Festplatte geschrieben. Dies verbessert die Systemleistung, da viele Benutzer und Prozesse ständig Dateien aktualisieren. Andererseits muss der Superblock beim Ausschalten des Systems auf die Festplatte geschrieben werden, was ein Ausschalten des Computers durch einfaches Ausschalten der Stromversorgung nicht ermöglicht. Andernfalls stimmen die im Superblock aufgezeichneten Informationen beim nächsten Booten nicht mit dem tatsächlichen Zustand des Dateisystems überein.

Der Superblock hat die folgende Struktur

Feldname

Typ

Ein Kommentar

s_inodes_count

ULONG

Anzahl der Inodes im Dateisystem

s_blocks_count

ULONG

Anzahl der Blöcke im Dateisystem

s_r_blocks_count

ULONG

Anzahl der für den Superuser reservierten Blöcke

s_free_blocks_count

ULONG

Kostenloser Blockzähler

s_free_inodes_count

ULONG

Kostenloser Inode-Zähler

s_first_data_block

ULONG

Der erste Block, der Daten enthält. Abhängig von der Blockgröße kann dieses Feld 0 oder 1 sein.

s_log_block_size

ULONG

Anzeige der logischen Blockgröße: 0 = 1 KB; 1 = 2 KB; 2 = 4 KB.

s_log_frag_size

LANG

Fragmentgrößenindikator (anscheinend wird das Fragmentkonzept derzeit nicht verwendet)

s_blocks_per_group

ULONG

Anzahl der Blöcke in jeder Blockgruppe

s_frags_per_group

ULONG

Anzahl der Fragmente in jeder Blockgruppe

s_inodes_per_group

ULONG

Anzahl der Inodes in jeder Blockgruppe

s_mtime

ULONG

Der Zeitpunkt, zu dem das Dateisystem zuletzt gemountet wurde.

s_wtime

ULONG

Zeitpunkt, zu dem das letzte Mal in das Dateisystem geschrieben wurde

s_mnt_count

USKURZ

Zähler für die Anzahl der Dateisystem-Mounts. Erreicht dieser Zähler den im nächsten Feld (s_max_mnt_count) angegebenen Wert, muss das Dateisystem überprüft werden (dies erfolgt beim Neustart) und der Zähler wird auf Null zurückgesetzt.

s_max_mnt_count

KURZ

Eine Zahl, die bestimmt, wie oft das Dateisystem gemountet werden kann

s_magisch

USKURZ

„Magische Zahl“ (0xEF53), die angibt, dass das Dateisystem vom Typ ex2fs ist

s_state

USKURZ

Flags, die den aktuellen Status des Dateisystems anzeigen (ist es sauber usw.)

s_errors

USKURZ

Flags, die Verfahren zur Verarbeitung von Fehlermeldungen angeben (was zu tun ist, wenn Fehler gefunden werden).

s_pad

USKURZ

Füllung

s_lastcheck

ULONG

Zeitpunkt der letzten Dateisystemprüfung

s_checkinterval

ULONG

Maximaler Zeitraum zwischen Dateisystemprüfungen

s_creator_os

ULONG

Ein Hinweis auf den Typ des Betriebssystems, in dem das Dateisystem erstellt wurde

s_rev_level

ULONG

Version (Revisionsstand) des Dateisystems.

s_reserved

ULONG

Auffüllung bis zu 1024 Bytes

Dem Superblock folgt eine Beschreibung der Blockgruppe (Gruppendeskriptoren). Bei dieser Beschreibung handelt es sich um ein Array mit der folgenden Struktur.

Feldname

Typ

Zweck

bg_block_bitmap

ULONG

Adresse des Blocks, der die Blockbitmap dieser Gruppe enthält

bg_inode_bitmap

ULONG

Adresse des Blocks, der die Inode-Bitmap dieser Gruppe enthält

bg_inode_table

ULONG

Adresse des Blocks, der die Inode-Tabelle dieser Gruppe enthält

bg_free_blocks_count

USKURZ

Zähler der Anzahl freier Blöcke in dieser Gruppe

bg_free_inodes_count

USKURZ

Anzahl der freien Inodes in dieser Gruppe

bg_used_dirs_count

USKURZ

Die Anzahl der Inodes in einer bestimmten Gruppe, bei denen es sich um Verzeichnisse handelt

bg_pad

USKURZ

Füllung

bg_reserved

ULONG

Füllung

Die Größe der Blockgruppenbeschreibung kann wie folgt berechnet werden: (block_group_size_in_ext2 * number_of_groups) / block_size(bei Bedarf runden).

Die in der Gruppenbeschreibung gespeicherten Informationen werden zum Auffinden der Block- und Inode-Bitmaps sowie der Inode-Tabelle verwendet. Vergessen Sie nicht, dass Blöcke und Blockgruppen beginnend mit 1 nummeriert sind.

Eine Block-Bitmap ist eine Struktur, in der jedes Bit angibt, ob der entsprechende Block einer Datei zugeordnet ist. Wenn das Bit 1 ist, ist der Block beschäftigt. Diese Karte wird verwendet, um nach freien Blöcken zu suchen, wenn Platz für eine Datei reserviert werden muss. Die Block-Bitmap belegt eine Anzahl von Blöcken gleich (number_of_blocks_in_group / 8) / block_size(bei Bedarf runden).

Die Inode-Bitmap erfüllt eine ähnliche Funktion wie die Inode-Tabelle: Sie zeigt an, welche Inodes verwendet werden.

Der nächste Bereich in der Blockgruppenstruktur wird zum Speichern der Datei-Inode-Tabelle verwendet. Die Struktur des Inodes selbst wird im nächsten Unterabschnitt ausführlicher besprochen.

Nun, und schließlich wird der gesamte verbleibende Speicherplatz in der Blockgruppe für die Speicherung der eigentlichen Dateien reserviert.

Dateisystem Ext 2 ist gekennzeichnet durch:

  • hierarchische Struktur,
  • koordinierte Verarbeitung von Datensätzen,
  • dynamische Dateierweiterung,
  • Schutz von Informationen in Dateien,
  • Peripheriegeräte (z. B. Terminals und Bandgeräte) als Dateien behandeln.

Interne Dateidarstellung

Jede Datei im Ext 2-System verfügt über einen eindeutigen Index. Der Index enthält die Informationen, die jeder Prozess benötigt, um auf die Datei zuzugreifen. Verarbeitet Zugriffsdateien mithilfe eines genau definierten Satzes Systemaufrufe und Identifizieren der Datei mit einer Zeichenfolge, die als zusammengesetzter Dateiname dient. Jeder zusammengesetzte Name identifiziert eine Datei eindeutig, sodass der Systemkern diesen Namen in einen Dateiindex umwandelt. Der Index enthält eine Tabelle mit Adressen, an denen sich Dateiinformationen auf der Festplatte befinden. Da jeder Block auf einer Festplatte über eine eigene Nummer adressiert wird, speichert diese Tabelle eine Sammlung von Festplattenblocknummern. Um die Flexibilität zu erhöhen, hängt der Kernel eine Datei blockweise an, sodass die Informationen der Datei im gesamten Dateisystem verteilt werden können. Dieses Layout erschwert jedoch die Suche nach Daten. Die Adresstabelle enthält eine Liste von Blocknummern mit Informationen zu einer Datei. Einfache Berechnungen zeigen jedoch, dass eine lineare Liste von Dateiblöcken in einem Index schwierig zu verwalten ist. Damit eine kleine Indexstruktur das Arbeiten mit großen Dateien ermöglicht, wird die Tabelle der Festplattenblockadressen an die in Abbildung 1 dargestellte Struktur angepasst

Die meisten Dateien in einem Ext 2-System sind nicht größer als 10 KB oder sogar 1 KB! Da sich 10 KB einer Datei in Blöcken mit direkter Adressierung befinden, kann auf die meisten in Dateien gespeicherten Daten mit einem einzigen Festplattenzugriff zugegriffen werden. Daher im Gegensatz zur Hinwendung zu große Dateien, Arbeiten mit Dateien Standardgröße geht zügig voran.

Datei-Inodes

Jede Datei auf der Festplatte ist genau einem Datei-Inode zugeordnet, der durch seine fortlaufende Nummer – den Dateiindex – identifiziert wird. Dies bedeutet, dass die Anzahl der Dateien, die in einem Dateisystem erstellt werden können, durch die Anzahl der Inodes begrenzt ist, die entweder explizit beim Erstellen des Dateisystems angegeben oder auf der Grundlage der physischen Größe der Festplattenpartition berechnet wird. Inodes sind in statischer Form auf der Festplatte vorhanden und der Kernel liest sie in den Speicher, bevor er mit ihnen arbeitet.

Der Datei-Inode hat die folgende Struktur:

Feldname

Typ

Beschreibung

I_mode

USKURZ

Der Typ und die Zugriffsrechte für diese Datei.

I_uid

USKURZ

Kennung des Dateieigentümers (Owner Uid).

I_size

ULONG

Dateigröße in Bytes.

Ich_zeit

ULONG

Zeitpunkt des letzten Zugriffs auf die Datei (Zugriffszeit).

I_ctime

ULONG

Dateierstellungszeit.

Es ist Zeit

ULONG

Zeitpunkt der letzten Änderung der Datei.

I_dtime

ULONG

Zeit zum Löschen der Datei.

Ich_gid

USKURZ

Gruppen-ID (GID).

I_links_count

USKURZ

Links zählen.

I_blocks

ULONG

Die Anzahl der von der Datei belegten Blöcke.

I_flags

ULONG

Dateiflags (Dateiflags)

I_reserved1

ULONG

Reserviert für das Betriebssystem

Ich blockiere

ULONG

Zeiger auf Blöcke, in die Dateidaten geschrieben werden (ein Beispiel für direkte und indirekte Adressierung in Abb. 1)

I_version

ULONG

Dateiversion (für NFS)

I_file_acl

ULONG

ACL-Datei

I_dir_acl

ULONG

Verzeichnis-ACL

I_faddr

ULONG

Fragmentadresse

I_frag

UCHAR

Fragmentnummer

I_fsize

UCHAR

Fragmentgröße

I_pad1

USKURZ

Füllung

I_reserved2

ULONG

Reserviert

Das Dateityp- und Zugriffsrechtefeld ist ein Zwei-Byte-Wort, dessen jedes Bit als Flag dient, das die Beziehung der Datei zu einem bestimmten Typ oder die Einstellung eines bestimmten Dateirechts angibt.

Kennung

Bedeutung

Zweck der Flagge (Feld)

S_IFMT

F000

Dateitypmaske

S_IFSOCK

A000

Domänen-Socket

S_IFLNK

C000

S_IFREG

8000

Normale Datei

S_IFBLK

6000

Blockorientiertes Gerät

S_IFDIR

4000

Katalog

S_IFCHR

2000

Byteorientiertes (Zeichen-)Gerät

S_IFIFO

1000

Benannte Pipe (Fifo)

S_ISUID

0800

SUID – Besitzerbit ändern

S_ISGID

0400

SGID – Gruppenänderungsbit

S_ISVTX

0200

Aufgabenspeicherbit (Sticky-Bit)

S_IRWXU

01C0

Maske mit den Rechten des Dateieigentümers

S_IRUSR

0100

Recht zu lesen

S_IWUSR

0080

Schreibe richtig

S_IXUSR

0040

Recht zur Ausführung

S_IRWXG

0038

Gruppenrechtemaske

S_IRGRP

0020

Recht zu lesen

S_IWGRP

0010

Schreibe richtig

S_IXGRP

0008

Recht zur Ausführung

S_IRWXO

0007

Maske der Rechte anderer Benutzer

S_IROTH

0004

Recht zu lesen

S_IWOTH

0002

Schreibe richtig

S_IXOTH

0001

Recht zur Ausführung

Unter den Inodes gibt es mehrere Inodes, die für spezielle Zwecke reserviert sind und eine besondere Rolle im Dateisystem spielen. Dies sind die folgenden Deskriptoren

Kennung

Bedeutung

Beschreibung

EXT2_BAD_INO

Ein Inode, der die Adressen fehlerhafter Blöcke auf der Festplatte auflistet (Bad Blocks Inode)

EXT2_ROOT_INO

Inode des Dateisystem-Stammverzeichnisses (Root-Inode)

EXT2_ACL_IDX_INO

ACL-Inode

EXT2_ACL_DATA_INO

ACL-Inode

EXT2_BOOT_LOADER_INO

Bootloader-Inode

EXT2_UNDEL_DIR_INO

Verzeichnis-Inode wiederherstellen

EXT2_FIRST_INO

Erster nicht reservierter Inode

Das wichtigste Handle in dieser Liste ist das Root-Verzeichnis-Handle. Dieses Handle zeigt auf das Stammverzeichnis, das wie alle Verzeichnisse aus Einträgen mit folgender Struktur besteht:

Feldname

Typ

Beschreibung

Inode

ULONG

Datei-Inode-Nummer

rec_len

USKURZ

Länge dieses Eintrags

name_len

USKURZ

Länge des Dateinamens

Name

VERKOHLEN

Dateiname

Ein einzelner Verzeichniseintrag darf eine Blockgrenze nicht überschreiten (d. h. er muss vollständig innerhalb eines einzelnen Blocks liegen). Wenn also der nächste Datensatz nicht vollständig in einen bestimmten Block passt, wird er in den nächsten Block übertragen und der vorherige Datensatz wird fortgesetzt, sodass er den Block bis zum Ende ausfüllt.

Abbildung 1 Direkte und indirekte Adressierungsblöcke im Index

Abbildung 2 Dateigröße in Bytes bei einer Blockgröße von 1 KB

Abbildung 3. Beispiel eines Festplattenindexes

Abbildung 3 zeigt den Festplattenindex einer bestimmten Datei. Dieser Index gehört zu einer regulären Datei, deren Besitzer „mjb“ ist und deren Größe 6030 Byte beträgt. Das System ermöglicht dem Benutzer „mjb“, die Datei zu lesen, zu schreiben und auszuführen; Mitglieder der Gruppe „OS“ und alle anderen Benutzer dürfen die Datei nur lesen oder ausführen, aber keine Daten darauf schreiben. Die Akte wurde zuletzt am 23. Oktober 1984 um 13:45 Uhr gelesen und zuletzt am 22. Oktober 1984 um 10:30 Uhr geschrieben. Der Index wurde zuletzt am 23. Oktober 1984 um 13:30 Uhr geändert, obwohl zu diesem Zeitpunkt noch keine Informationen in die Datei geschrieben wurden. Der Kernel kodiert alle oben genannten Daten in einem Index. Beachten Sie den Unterschied beim Schreiben des Indexinhalts und des Dateiinhalts auf die Festplatte. Der Inhalt einer Datei ändert sich nur, wenn in die Datei geschrieben wird. Der Inhalt des Index ändert sich sowohl, wenn sich der Inhalt der Datei ändert, als auch wenn sich der Dateieigentümer, die Zugriffsrechte und der Zeigersatz ändern. Das Ändern des Inhalts einer Datei führt automatisch zu einer Anpassung des Index. Das Anpassen des Index bedeutet jedoch nicht, dass der Inhalt der Datei geändert wird.

Kataloge

Verzeichnisse sind die Dateien, aus denen die hierarchische Struktur des Dateisystems aufgebaut ist; Sie spielen eine wichtige Rolle bei der Umwandlung des Dateinamens in eine Indexnummer. Ein Verzeichnis ist eine Datei, deren Inhalt aus einer Reihe von Einträgen besteht, die aus der Indexnummer und dem Dateinamen bestehen, die im Verzeichnis enthalten sind. Ein qualifizierter Name ist eine Zeichenfolge, die durch das Nullzeichen abgeschlossen und durch einen Schrägstrich („/“) in mehrere Komponenten getrennt wird. Jede Komponente außer der letzten muss der Name eines Verzeichnisses sein, aber die letzte Komponente kann der Name einer Datei sein, die kein Verzeichnis ist. In UNIX Version V ist die Länge jeder Komponente auf 14 Zeichen begrenzt; Zusammen mit den 2 Bytes, die für die Indexnummer reserviert sind, beträgt die Größe des Verzeichniseintrags also 16 Bytes.

Byte-Offset
im Verzeichnis

Indexnummer
(2 Bytes)

NameDatei

1798

drin

1276

fsck

clri

1268

motd

1799

montieren

mknod

2114

Passwort

1717

umount

1851

Checkliste

fsdbld

config

1432

getty

Absturz

mkfs

Abbildung 4 /etc-Verzeichnisformat

Abbildung 4 zeigt das Format des Verzeichnisses „etc“. Jedes Verzeichnis enthält Dateien, deren Namen durch einen Punkt und zwei Punkte („.“ und „..“) gekennzeichnet sind und deren Indexnummern mit den Indexnummern des jeweiligen Verzeichnisses bzw. des übergeordneten Verzeichnisses übereinstimmen. Indexnummer für Datei „.“ im Verzeichnis „/etc“ hat eine Adresse bei Offset 0 und einen Wert von 83. Die Inode-Nummer für die Datei „..“ hat eine Adresse bei Offset 16 vom Anfang des Verzeichnisses und einen Wert von 2. Einträge in der Das Verzeichnis kann leer sein, aber die Inode-Nummer ist 0. Beispielsweise ist der Eintrag an Adresse 224 im Verzeichnis „/etc“ leer, obwohl es einmal einen Einstiegspunkt für eine Datei namens „crash“ enthielt. Das Programm mkfs initialisiert das Dateisystem so, dass die Inode-Nummern für Dateien „.“ sind. und „..“ im Stammverzeichnis stimmen mit der Stammindexnummer des Dateisystems überein.

Der Kernel speichert Daten in einem Verzeichnis genau wie in einem regulären Dateityp, indem er eine Indexstruktur und Blöcke mit direkten und indirekten Adressierungsebenen verwendet. Prozesse können Daten aus Verzeichnissen auf die gleiche Weise lesen, wie sie normale Dateien lesen. Der ausschließliche Schreibzugriff auf das Verzeichnis wird jedoch vom Kernel reserviert, um sicherzustellen, dass die Verzeichnisstruktur korrekt ist. Verzeichnisberechtigungen haben folgende Bedeutung: Die Leseberechtigung gibt Prozessen die Möglichkeit, Daten aus dem Verzeichnis zu lesen. Mit der Schreibberechtigung kann ein Prozess neue Einträge in einem Verzeichnis erstellen oder alte Einträge entfernen (mithilfe der Systemoperationen creat, mknod, link und unlink) und so den Inhalt des Verzeichnisses ändern. Das Ausführungsrecht ermöglicht einem Prozess, ein Verzeichnis anhand des Dateinamens zu durchsuchen (da das „Ausführen“ eines Verzeichnisses sinnlos ist).

Wenn ein Prozess einen Dateipfad verwendet, sucht der Kernel in den Verzeichnissen nach der entsprechenden Inode-Nummer. Nachdem der Dateiname in eine Inode-Nummer umgewandelt wurde, wird der Inode im Speicher abgelegt und dann in nachfolgenden Anforderungen verwendet.

Das Konzept der Unix-Dateisysteme beinhaltet das Konzept eines Links. Ein einzelner Inode kann mehreren Dateinamen zugeordnet sein. Der Deskriptor enthält ein Feld, das die Nummer speichert, mit der die Datei verknüpft ist. Das Hinzufügen eines Links besteht darin, einen Verzeichniseintrag zu erstellen, dessen Inode-Nummer auf einen anderen Inode verweist, und den Linkzähler im Inode zu erhöhen. Wenn ein Link entfernt wird, verringert der Kernel den Linkzähler und entfernt das Handle, wenn der Zähler Null wird.

Solche Links werden Hardlinks genannt und können nur innerhalb eines Dateisystems verwendet werden (Sie können keinen Link für eine Datei aus einem anderen Dateisystem erstellen). Darüber hinaus kann ein fester Link nur auf eine Datei verweisen (ein fester Link zu einem Verzeichnis kann eine Schleife im Dateisystem verursachen).

Meistens Unix-Systeme Es gibt eine andere Art von Link. Diese Links, die nur den Dateinamen enthalten, werden symbolisch genannt. Wenn der Kernel solche Links verarbeitet und den Dateipfad in einen Inode umwandelt, ersetzt der Kernel den Linknamen durch den Inhalt des Inodes (d. h. den Zieldateinamen) und interpretiert den Dateipfad neu. Da ein symbolischer Link nicht auf einen Inode verweist, ist es möglich, Links zu Dateien zu erstellen, die sich in einem anderen Dateisystem befinden. Diese Links können auf jede Art von Datei verweisen, auch auf nicht vorhandene. Symbolische Links werden häufig verwendet, da sie nicht denselben Einschränkungen unterliegen wie harte Links. Allerdings nehmen sie etwas Platz auf der Festplatte ein, auf der sich die Inode- und Datenblöcke befinden. Ihre Verwendung kann zu Verzögerungen bei der Konvertierung des Dateipfads in einen Inode führen, da der Kernel den Dateipfad bei der Verarbeitung eines Symlinks neu interpretieren muss.

Gerätedateien

In Unix-ähnlichen Betriebssystemen erfolgt der Zugriff auf Geräte über spezielle Dateien. Eine solche Datei nimmt keinen Platz im Dateisystem ein. Es handelt sich lediglich um einen Zugangspunkt zum Gerätetreiber.

Es gibt zwei Arten von Gerätedateien: Zeichen- und Blockdateien. Wenn Sie einen Zeichentyp verwenden, können Sie Daten mit einem Gerät nur im Zeichenmodus austauschen, während Gerätedateien vom Blocktyp nur den Austausch von Blöcken über einen Puffer ermöglichen. Wenn eine E/A-Anfrage an eine Gerätedatei gestellt wird, wird die Anfrage an den entsprechenden Gerätetreiber weitergeleitet. Jede dieser Dateien hat eine Hauptnummer, die den Gerätetyp identifiziert, und eine Nebennummer, die das Gerät selbst identifiziert.

Zusätzliche Funktionen von EXT2fs

Zusätzlich zu den Standard-Unix-Funktionen bietet EXT2fs einige zusätzliche Funktionen, die normalerweise von Unix-Dateisystemen nicht unterstützt werden.

Mit Dateiattributen können Sie ändern, wie der Kernel reagiert, wenn er mit Dateigruppen arbeitet. Sie können Attribute für eine Datei oder ein Verzeichnis festlegen. Im zweiten Fall erben in diesem Verzeichnis erstellte Dateien diese Attribute.

Während der Systemmontage können einige Funktionen im Zusammenhang mit Dateiattributen festgelegt werden. Mit der Mount-Option kann der Administrator auswählen, wie Dateien erstellt werden. In einem BSD-spezifischen Dateisystem werden Dateien mit derselben Gruppen-ID wie das übergeordnete Verzeichnis erstellt. Die Funktionen von System V sind etwas komplexer. Wenn für ein Verzeichnis das setgid-Bit gesetzt ist, dann erstellte Dateien erben die Gruppen-ID dieses Verzeichnisses und Unterverzeichnisse erben die Gruppen-ID und das Setgid-Bit. Andernfalls werden Dateien und Verzeichnisse mit der primären Gruppen-ID des aufrufenden Prozesses erstellt.

Das EXT2fs-System kann eine synchrone Datenänderung ähnlich wie verwenden BSD-System. Mit der Mount-Option kann der Administrator festlegen, dass alle Daten (Inodes, Bitblöcke, indirekte Blöcke und Verzeichnisblöcke) synchron auf die Festplatte geschrieben werden, wenn sie geändert werden. Dadurch kann zwar eine hohe Datenaufzeichnungskapazität erreicht werden, führt aber auch zu einer schlechten Performance. In der Realität wird diese Funktion normalerweise nicht genutzt, da sie neben Leistungseinbußen auch zum Verlust von Benutzerdaten führen kann, die bei der Überprüfung des Dateisystems nicht erkannt werden.

Mit EXT2fs können Sie beim Erstellen eines Dateisystems die logische Blockgröße auswählen. Es kann 1024, 2048 oder 4096 Byte groß sein. Die Verwendung größerer Blöcke führt zu schnelleren E/A-Vorgängen (da weniger Festplattenanforderungen gestellt werden) und daher zu weniger Kopfbewegungen. Andererseits führt die Verwendung großer Blöcke zu einer Verschwendung von Speicherplatz. Normalerweise wird der letzte Block einer Datei nicht vollständig zum Speichern von Informationen genutzt, sodass mit zunehmender Blockgröße auch mehr Speicherplatz verschwendet wird.

Mit EXT2fs können Sie beschleunigte symbolische Links verwenden. Bei der Verwendung solcher Links werden keine Datenblöcke des Dateisystems verwendet. Der Zieldateiname wird nicht im Datenblock, sondern im Inode selbst gespeichert. Durch diese Struktur können Sie Speicherplatz sparen und die Verarbeitung symbolischer Links beschleunigen. Natürlich ist der für ein Handle reservierte Platz begrenzt, sodass nicht jeder Link als beschleunigter Link dargestellt werden kann. Die maximale Länge eines Dateinamens in einem beschleunigten Link beträgt 60 Zeichen. In naher Zukunft ist geplant, dieses Schema auf kleine Dateien auszuweiten.

EXT2fs überwacht den Zustand des Dateisystems. Der Kernel verwendet ein separates Feld im Superblock, um den Status des Dateisystems anzuzeigen. Wenn das Dateisystem im Lese-/Schreibmodus gemountet ist, wird sein Status auf „Nicht sauber“ gesetzt. Wenn es im schreibgeschützten Modus demontiert oder erneut gemountet wird, wird sein Status auf „Clean“ gesetzt. Bei Systemstart- und Dateisystemstatusprüfungen werden diese Informationen verwendet, um festzustellen, ob eine Dateisystemprüfung erforderlich ist. Der Kernel platziert auch einige Fehler in diesem Feld. Wenn der Kernel eine Nichtübereinstimmung erkennt, wird das Dateisystem als „Fehlerhaft“ markiert. Der Dateisystemprüfer testet diese Informationen, um das System zu überprüfen, auch wenn sein Status tatsächlich „Clean“ ist.

Das Ignorieren von Dateisystemtests über einen längeren Zeitraum kann manchmal zu Schwierigkeiten führen. Daher bietet EXT2fs zwei Methoden zur regelmäßigen Überprüfung des Systems. Der Superblock enthält den System-Mount-Zähler. Dieser Zähler wird jedes Mal erhöht, wenn das System im Lese-/Schreibmodus gemountet wird. Wenn sein Wert das Maximum erreicht (er wird auch im Superblock gespeichert), beginnt das Dateisystem-Testprogramm mit der Überprüfung, auch wenn sein Status „Clean“ ist. Der Zeitpunkt der letzten Überprüfung und das maximale Intervall zwischen den Überprüfungen werden ebenfalls im Superblock gespeichert. Wenn das maximale Intervall zwischen den Scans erreicht ist, wird der Status des Dateisystems ignoriert und der Scan gestartet.

Das EXT2fs-System enthält Tools zu seiner Konfiguration. Mit dem Programm tune2fs können Sie Folgendes ändern:

  • Aktionen, wenn ein Fehler erkannt wird. Wenn der Kernel eine Diskrepanz erkennt, wird das Dateisystem als „Fehlerhaft“ markiert und eine der folgenden drei Aktionen kann ausgeführt werden: Ausführung fortsetzen, das Dateisystem erneut im schreibgeschützten Modus bereitstellen, um Schäden zu vermeiden, oder das System neu starten, um das zu überprüfen Dateisystem.
  • Maximalwert Montage.
  • maximales Intervall zwischen den Überprüfungen.
  • Anzahl der logischen Blöcke, die für den Root-Benutzer reserviert sind.

Beim Mounten angegebene Optionen können auch verwendet werden, um zu ändern, was der Kernel tut, wenn er einen Fehler erkennt.

Mithilfe von Attributen können Benutzer vertrauliche Dateien löschen. Wenn eine solche Datei gelöscht wird, werden zufällige Informationen in die Blöcke geschrieben, die zuvor zum Platzieren dieser Datei verwendet wurden. Dies verhindert, dass Außenstehende mit einem Festplatteneditor Zugriff auf den vorherigen Inhalt dieser Datei erhalten.

Kürzlich wurden dem EXT2fs-System neue Dateitypen hinzugefügt, die aus dem BSD-Dateisystem 4.4 übernommen wurden. Dateien des ersten Typs können nur zum Lesen verwendet werden: Niemand hat das Recht, sie zu ändern oder zu löschen. Damit können wichtige Konfigurationsdateien geschützt werden. Ein anderer Dateityp ist eine Datei, die im Schreibmodus geöffnet werden kann und an deren Ende Daten nur angehängt werden können. Dateien dieses Typs können auch nicht gelöscht oder umbenannt werden. Sie können als Protokolldateien verwendet werden, deren Größe nur zunehmen kann.

Leistungsoptimierung

Das EXT2fs-System enthält viele Funktionen, die seine Leistung optimieren, was zu einer erhöhten Geschwindigkeit des Informationsaustauschs beim Lesen und Schreiben von Dateien führt.

EXT2fs nutzt aktiv den Festplattenpuffer. Wenn ein Block gelesen werden muss, sendet der Kernel eine E/A-Operationsanforderung an mehrere benachbarte Blöcke. Somit versucht der Kernel sicherzustellen, dass der nächste zu lesende Block bereits in den Festplattenpuffer geladen wurde. Solche Vorgänge werden normalerweise beim sequentiellen Lesen von Dateien ausgeführt.

Das EXT2fs-System enthält außerdem zahlreiche Optimierungen zur Informationsplatzierung. Blockgruppen werden verwendet, um entsprechende Inodes und Datenblöcke zusammenzufassen. Der Kernel versucht immer, die Datenblöcke einer Datei sowie deren Deskriptor in derselben Gruppe zu platzieren. Dadurch soll die Bewegung der Laufwerksköpfe beim Lesen des Deskriptors und der entsprechenden Datenblöcke reduziert werden.

Beim Schreiben von Daten in eine Datei weist EXT2fs beim Zuweisen eines neuen Blocks bis zu 8 zusammenhängende Blöcke vorab zu. Mit dieser Methode können Sie bei hoher Systemlast eine hohe Leistung erzielen. Dadurch können Dateien auch in zusammenhängenden Blöcken platziert werden, was das spätere Lesen beschleunigt.

EXT2fs-Bibliothek

Um die Nutzung von EXT2fs-Ressourcen und den Betrieb von Kontrollstrukturen dieses Dateisystems zu vereinfachen, wurde die Bibliothek libext2fs entwickelt. Diese Bibliothek enthält Funktionen, mit denen EXT2-Dateisystemdaten durch direkten Zugriff auf das physische Gerät definiert und geändert werden können.

Die meisten EXT2fs-Dienstprogramme (mke2fs, e2fsck, tune2fs, dumpe2fs, debugfs usw.) verwenden diese Bibliothek. Dies vereinfacht die Änderung dieser Dienstprogramme erheblich, da keine Änderungen vorgenommen werden müssen Zusatzfunktionen Der Zugriff auf das EXT2fs-Dateisystem sollte nur in der EXT2fs-Bibliothek erfolgen.

Da die Schnittstelle der EXT2fs-Bibliothek recht breit gefächert und abstrakt ist, können mit ihrer Hilfe problemlos Programme geschrieben werden, die direkten Zugriff auf das Dateisystem benötigen. Beispielsweise wurde die EXT2fs-Bibliothek während der Übertragung des 4.4 BSD-Dumps und der Wiederherstellung einiger Dienstprogramme verwendet. Zur Anpassung dieser Tools an Linux waren nur sehr wenige Änderungen erforderlich (wir mussten mehrere mit dem Dateisystem interagierende Funktionen durch Aufrufe der EXT2fs-Bibliothek ersetzen).

Die EXT2fs-Bibliothek bietet Zugriff auf die Operationen mehrerer Klassen. Die erste Klasse sind Vorgänge im Zusammenhang mit dem Dateisystem. Jedes Programm kann ein Dateisystem öffnen oder schließen, einen Bitblock lesen oder schreiben oder ein neues Dateisystem auf der Festplatte erstellen. Es gibt auch Funktionen zum Bearbeiten einer Liste fehlerhafter Blöcke im Dateisystem.

Die zweite Klasse von Operationen arbeitet mit Verzeichnissen. Ein Programm, das die EXT2fs-Bibliothek verwendet, kann ein Verzeichnis erstellen oder erweitern sowie Einträge in einem Verzeichnis hinzufügen oder löschen. Es gibt Funktionen sowohl zum Bestimmen des Pfads zu einer Datei mithilfe eines Inodes als auch zum Bestimmen des Pfads zu einer Datei mithilfe eines angegebenen Deskriptors.

Die letzte Operationsklasse arbeitet mit Indexhandles. Es ist möglich, die Deskriptortabelle zu lesen, einen Deskriptor zu lesen oder zu schreiben und alle Blöcke des angegebenen Deskriptors anzuzeigen. Es ist möglich, Funktionen zum Platzieren und Freigeben von Blöcken und Deskriptoren zu verwenden.

EXT2fs-Systemtools

Für das EXT2fs-System wurden leistungsstarke Steuerungen entwickelt. Diese Tools werden zum Erstellen, Ändern und Korrigieren von Inkonsistenzen in EXT2fs-Dateisystemen verwendet. Das Programm mke2fs wird zum Mounten einer Festplattenpartition verwendet, die ein leeres EXT2fs-Dateisystem enthält.

Mit dem Programm tune2fs können Dateisystemparameter konfiguriert werden. Mit seiner Hilfe können Sie die Reaktion auf Fehler, die maximale Anzahl von System-Mounts, das maximale Intervall zwischen Systemprüfungen und die Anzahl der für den Root-Benutzer reservierten logischen Blöcke ändern.

Das vielleicht interessanteste Tool ist der Dateisystem-Checker. E2fsck soll Inkonsistenzen im Dateisystem nach einem ungenauen Herunterfahren des gesamten Systems beseitigen. Die erste Version des e2fsck-Programms basiert auf dem Linus Torvald fsck-Programm für das Minix-Dateisystem. Die aktuelle Version des Programms wird jedoch mithilfe der EXT2fs-Bibliothek neu geschrieben und ist im Vergleich zur Originalversion schneller und kann bei der Überprüfung mehr Fehler im System korrigieren.

Das Programm e2fsck wurde für die Ausführung mit maximaler Geschwindigkeit entwickelt. Da Dateisystem-Prüfprogramme zu einer Festplattenbelastung führen, sollten die e2fsck-Algorithmen so optimiert werden, dass deutlich seltener auf Dateisystemstrukturen zugegriffen wird. Darüber hinaus würde die Reihenfolge der Überprüfung von Inodes und Verzeichnissen nach Blocknummer erfolgen, um die Zeit zu verkürzen, die zum Bewegen der Laufwerksköpfe benötigt wird.

Im ersten Durchgang durchläuft e2fsck alle Inodes im Dateisystem und untersucht jeden Inode als separates Systemelement. Daher werden andere Dateisystemobjekte bei diesem Test nicht überprüft. Einer der Zwecke solcher Prüfungen besteht darin, die Existenz des zu prüfenden Dateityps sowie die Übereinstimmung aller Blöcke im Deskriptor mit Blöcken mit vorhandenen Nummern zu überprüfen. Im ersten Durchgang werden die Bitmaps überprüft, die die Verwendung von Blöcken und Deskriptoren anzeigen.

Wenn e2fsck Datenblöcke findet, deren Nummern in mehr als einem Deskriptor enthalten sind, werden die Durchgänge 1B bis 1D ausgeführt, um die Diskrepanz aufzulösen, indem entweder die Anzahl der gemeinsam zu nutzenden Blöcke erhöht oder ein oder mehrere Deskriptoren entfernt werden.

Der erste Durchgang nimmt die meiste Zeit in Anspruch, da alle Inodes in den Speicher eingelesen und überprüft werden müssen. Um die Zeit von E/A-Vorgängen in nachfolgenden Durchgängen zu verkürzen, verbleiben alle erforderlichen Informationen im Puffer. Ein charakteristisches Merkmal dieses Schemas ist die Suche nach allen Verzeichnisblöcken des Dateisystems. Um diese Informationen zu erhalten, werden im zweiten Durchgang die Deskriptorstrukturen aller Verzeichnisse im Dateisystem erneut gelesen.

Im zweiten Durchgang werden Verzeichnisse als separate Elemente des Dateisystems überprüft. Jeder Verzeichnisblock wird separat geprüft, ohne Bezug auf andere Verzeichnisblöcke. Dadurch kann e2fsck alle Verzeichnisblöcke nach Blocknummer sortieren und in aufsteigender Reihenfolge prüfen, wodurch die Zugriffszeit auf die Festplatte verkürzt wird. Verzeichnisblöcke werden getestet, um sicherzustellen, dass ihre Einträge gültig sind und Verweise auf Handles mit vorhandenen Nummern enthalten (wie im ersten Durchgang ermittelt).

Für den ersten Verzeichnisblock in jedem Verzeichnisdeskriptor wird das Vorhandensein von „.“-Einträgen überprüft. und „..“ und dass die Deskriptornummer für den Eintrag „.“ entspricht dem aktuellen Verzeichnis. (Die Deskriptornummer für den Eintrag „..“ wird erst im dritten Durchgang getestet.)

Beim zweiten Durchlauf werden die dem übergeordneten Verzeichnis entsprechenden Informationen in einem Puffer gespeichert.

Es ist zu beachten, dass am Ende des zweiten Durchgangs fast alle E/A-Vorgänge auf der Festplatte abgeschlossen sind. Alle für den dritten, vierten und fünften Durchlauf erforderlichen Informationen sind im Speicher enthalten. Die verbleibenden Durchgänge belasten jedoch den Prozessor und beanspruchen weniger als 5–10 % der gesamten e2fsck-Ausführungszeit.

Im dritten Durchgang werden Verzeichnisverbindungen überprüft. E2fsck überprüft die Pfade jedes Verzeichnisses zum Stammverzeichnis anhand der im zweiten Durchgang erhaltenen Informationen. Hier wird der Eintrag „..“ für jedes Verzeichnis überprüft. Alle nach der Prüfung identifizierten Verzeichnisse, die keine Verbindung zum Stammverzeichnis haben, werden im Verzeichnis /lost+found abgelegt.

Im vierten Durchgang überprüft e2fsck die Referenzzähler für jeden Inode, indem es alle Inodes durchgeht und die Referenzzähler (diese Informationen werden aus dem ersten Durchgang gespeichert) mit den internen Zählern vergleicht, die während des zweiten und dritten Durchgangs berechnet wurden. ov. Alle wiederhergestellten Dateien mit einem Referenzzähler von Null werden ebenfalls im Verzeichnis /lost+found abgelegt.

Schließlich prüft e2fsck im fünften Durchgang, ob alle Dateisysteminformationen übereinstimmen. Dabei werden die in vorherigen Durchgängen gewonnenen Bitmaps von Blöcken und Deskriptoren mit den tatsächlichen Werten verglichen und ggf. die Informationen auf der Festplatte entsprechend angepasst.

Ein weiteres nützliches Tool ist der Dateisystem-Debugger. Debugfs ist ein leistungsstarkes Programm, mit dem Sie den Status eines Dateisystems ermitteln und festlegen können. Im Wesentlichen handelt es sich um eine interaktive Schnittstelle zur EXT2fs-Bibliothek, das heißt, sie übersetzt typisierte Befehle in Aufrufe von Bibliotheksfunktionen.

Debugfs können verwendet werden, um die interne Struktur eines Dateisystems zu bestimmen, ein beschädigtes System manuell zu reparieren oder bedingte Tests für e2fsck zu erstellen. Leider kann dieses Programm das Dateisystem beschädigen, wenn Sie nicht wissen, wie man es verwendet. Mit diesem Tool können Sie das Dateisystem einfach zerstören. Daher öffnet debugfs das Dateisystem standardmäßig im schreibgeschützten Modus. Für den Zugriff im Lese-/Schreibmodus geben Sie die Option -w an.

Leistungsberechnung

Die Ergebnisse des Bonnie-Tests können der folgenden Tabelle entnommen werden:

Zeichenweise Aufzeichnung (Kb/s)

Blockaufzeichnung (Kb/s)

Überspielen (KB/s)

Zeichenweises Lesen (Kb/s)

Blocklesen (Kb/s)

BSD Async

BSD-Synchronisierung

Ext2fs

1237

1033

Xia fs

Für Block-I/O sind die Ergebnisse recht gut: Das EXT2fs-System übertrifft andere Systeme in puncto Leistung. Dies ist auf die in den Platzierungsverfahren enthaltenen Optimierungen zurückzuführen. Auch die Aufnahme erfolgt recht schnell, da sie im Gruppenmodus erfolgt. Die hohe Lesegeschwindigkeit ist darauf zurückzuführen, dass die Blöcke der Datei zugewiesen wurden, sodass sich die Laufwerksköpfe zwischen zwei Lesevorgängen nicht bewegen und die Optimierung vor dem Lesen voll funktionsfähig ist.

Andererseits, FreeBSD-Systeme Bei symbolischer Ein-/Ausgabe ist die Leistung höher. Dies kann daran liegen, dass FreeBSD und Linux unterschiedliche Vorgehensweisen für die entsprechenden C-Bibliotheken verwenden. Darüber hinaus verfügt FreeBSD höchstwahrscheinlich über eine optimiertere symbolische Lesebibliothek und daher ist die Leistung hier etwas besser.

Andrew-Testergebnisse

Andrews Testergebnisse sind aus der folgenden Tabelle ersichtlich:

Passage 1 Schöpfung

Pass 2 Kopie

Passage 3 Statusprüfung

Bestehen Sie 4 Byte-für-Byte-Prüfung

Zusammenstellung von Passage 5

2203

7391

6319

17466

75314

BSD-Synchronisierung

2330

7732

6317

17499

75681

Ext2fs

Die Ergebnisse der ersten beiden Durchgänge zeigen, dass Linux beim asynchronen Datenaustausch gewinnt. Beim Erstellen von Verzeichnissen und Dateien schreibt das BSD-System Verzeichnishandles und Verzeichniseinträge synchron. Es gibt Spekulationen, dass die asynchrone Unterstützung für FreeBSD noch nicht vollständig implementiert ist.

Im dritten Durchgang sind die Werte für Linux und BSD sehr ähnlich. Während BSD eine bessere Leistung erbringt, wird dieses Problem durch das Hinzufügen eines Dateinamenpuffers zum Linux VFS behoben.

Im vierten und fünften Durchgang ist Linux schneller als FreeBSD, was hauptsächlich auf die Verwendung einer einheitlichen Pufferverwaltung zurückzuführen ist. Die Puffergröße kann je nach Bedarf wachsen und mehr Speicher beanspruchen als FreeBSD, das eine feste Größe verwendet. Ein Vergleich der Ergebnisse der Systeme EXT2fs und Xia fs zeigt, dass die in EXT2fs enthaltenen Optimierungen tatsächlich genutzt werden: Der Unterschied in der Leistung dieser Systeme beträgt etwa 5-10 %.

Abschluss

Das EXT2-Dateisystem ist unter Linux-Benutzern das am weitesten verbreitete. Es bietet Standard-Unix-Funktionen und zusätzliche Funktionen. Darüber hinaus zeigt es dank der im Kernel enthaltenen Optimierung hervorragende Leistungsergebnisse.

Das EXT2fs-System umfasst Funktionen, mit denen Sie neue Funktionen hinzufügen können. Einige Leute arbeiten an der Entwicklung von Erweiterungen für das echte Dateisystem: Posix ACL, Wiederherstellung gelöschte Dateien und Dateikomprimierung in Echtzeit.

Zunächst wurde das EXT2fs-System in den Linux-Kernel integriert, nun wird es aktiv auf andere Betriebssysteme portiert. EXT2fs ist auch ein wichtiger Bestandteil des Masix-Betriebssystems, das derzeit von einem der Autoren entwickelt wird.

Wenn Sie zwei Betriebssysteme installiert haben, Windows und Linux, möchten Sie wahrscheinlich direkt von Windows aus auf Partitionen eines kostenlosen Betriebssystems gespeichert werden, ohne den Computer neu starten zu müssen.

Leider gibt es in Windows keine Unterstützung für Linux-Betriebssystempartitionen. Aber vergeblich. Es scheint mir, dass dies eine nette Geste von Microsoft sein könnte.

Der Kern des Problems besteht darin, dass Windows das NTFS-Dateisystem verwendet und Linux über eine eigene Art der Dateiorganisation verfügt, das erweiterte Dateisystem. letzte Version welches die Seriennummer 4 hat.

Linux ist benutzerfreundlicher als seine kommerzielle Schwester: Linux unterstützt standardmäßig Dateisysteme Windows NTFS. Natürlich können Sie Linux nicht auf einer NTFS-Partition installieren, aber Sie können Daten von einer solchen Partition lesen und schreiben.

Ext2 IFS

Ext2 IFS unterstützt die Windows NT4.0/2000/XP/2003/Vista/2008-Versionen x86 und x64 und ermöglicht Ihnen, den Inhalt von Linux-ext2-Partitionen anzuzeigen und auch darauf zu schreiben. Das Dienstprogramm installiert den Systemtreiber ext2fs.sys, der erweitert wird Windows-Funktionen und beinhaltet volle Ext2-Unterstützung: Ext2-Partitionen werden Laufwerksbuchstaben zugewiesen und darauf befindliche Dateien und Ordner werden in den Dialogen aller Anwendungen, beispielsweise im Explorer, angezeigt.

Ext2 FSD

Ext2 FSD – kostenloser Treiber für Windows-Systeme(2K/XP/VISTA/7-Versionen x86 und x64). Wie das vorherige Dienstprogramm, das im Wesentlichen auch ein Treiber ist, bietet es vollständige Unterstützung für das ext2-Dateisystem in Windows.

LTOOLS – eine Reihe von Dienstprogrammen Befehlszeile, mit dem Sie von einem Computer unter DOS oder Windows aus Daten auf/von Linux ext2-, ext3- und ReiserFS-Partitionen (Standard-Linux-Dateisysteme) lesen und schreiben können.

Es gibt eine Version des Programms mit einer grafischen Shell (geschrieben in Java) – LTOOLSgui, sowie eine Version mit einer grafischen Shell, geschrieben in .

Ext2Read

Das Dessert ist wie immer das leckerste.

Ext2Read ist ein Dienstprogramm vom Typ Dateimanager, mit dem Sie ext2/ext3/ext4-Partitionen sowohl anzeigen als auch darauf schreiben können. Es unterstützt LVM2 und, was es von anderen Programmen in diesem Test unterscheidet, das ext4-Dateisystem. Integrierte Unterstützung für rekursives Verzeichniskopieren.

Und hier ist das zweite Dessert. Zunächst hieß es, eine gute Geste von Microsoft sei es, die Unterstützung von Linux-Partitionen in Windows standardmäßig zu aktivieren.

Die Geste erfolgte dennoch zum 20-jährigen Linux-Jubiläum. Überzeugen Sie sich selbst.

Das ist alles. Vielen Dank für Ihre Aufmerksamkeit. Ich werde die Maikäfer bekämpfen. Davon gibt es diesen Frühling so viele. 🙂