Was sind /dev/sdxx-Knoten?

Was sind /dev/sdxx-Knoten?

Dieses Bild von TLDP ist ziemlich beeindruckend. Es zeigt, dass die Blöcke auf das virtuelle Dateisystem abgebildet werden, bevor dem Benutzer tatsächlicher Lese-, Schreib- und offener Zugriff auf das Dateisystem gewährt wird.

Bildbeschreibung hier eingeben

UndWikipediabesagt, dass es drei Versionen von Dateisystemen auf unterschiedlichen Ebenen gibt.

Beziehen sich die Standardknoten (SD-Knoten) also auf die physischen oder, nach demLVMzugeordnetes, virtuelles Dateisystem?

Oder beziehen sie sich nur auf die Partition? (was bedeuten würde, dass beim direkten Schreiben auf die Partition der Dateisystemtreiber übersprungen würde, ohne den Sie nicht einmal mit den Dateien selbst interagieren könnten)

Wenn dies der Fall ist, welche Geräte stellen die Dateisystemtreiber/oder Dateisysteme oder … dar? Ich weiß es einfach nicht. Kann mir irgendjemand einen Link zu einem Ort schicken, wo die Festplattennutzung durch den Kernel erklärt wird?

Antwort1

tl;dr: /dev/sdaXstellt eine Partition dar. Ich glaube, Sie haben ein grundlegendes Missverständnis hinsichtlich des Unterschieds zwischen Dateisystemen und Partitionen. Eine Partition ist ganz einfach – im Grunde ist es nur ein Abschnitt der Festplatte, der in einer Partitionstabelle am Anfang der Festplatte definiert ist. Ein Dateisystem ist jedoch eine viel fortgeschrittenere Sache. Ein Dateisystem ist im Wesentlichen eine Datenstruktur, die verwendet wird, um den Überblick über Dateien zu behalten, die der Kernel (insbesondere ein Dateisystemtreiber) lesen und schreiben kann. Diese Datenstruktur kann technisch gesehen überall auf der Festplatte abgelegt werden, es wird jedoch erwartet, dass der Anfang der FS-Datenstruktur mit dem Anfang einer Partition identisch ist.

Sie haben in Ihrer Frage LVM erwähnt – vergessen wir das für den Moment, da es sich dabei um ein fortgeschritteneres Thema handelt (ich werde LVM am Ende erklären).

Angenommen, Sie haben eine einzelne 100-GB-Festplatte mit lauter Nullen. In diesem Fall haben Sie eine /dev/sdaDatei, aus der Sie 100 GB erstellen können (obwohl eg dusie als nulllang meldet, weil sie ein Blockspezial ist) und die nur Nullen enthält. /dev/sdaist die Methode, mit der der Kernel den Rohinhalt des Geräts dem Benutzerbereich zum Lesen und Schreiben zur Verfügung stellt. Aus diesem Grund hat es dieselbe Datenmenge wie Ihre Festplatte und denselben Inhalt wie Ihre Festplatte. Wenn Sie das fünfte Bit auf /dev/sdaEins statt Null setzen, setzt der Kernel das fünfte Bit auf dem physischen Laufwerk entsprechend um. In dem von Ihnen bereitgestellten Diagramm würde dieser Schreibvorgang über die Systemaufrufschnittstelle in den Kernel, dann durch den IDE-Festplattentreiber und schließlich zur Festplatte selbst gehen.


Nehmen wir nun an, Sie möchten mit diesem Laufwerk etwas Nützliches tun, beispielsweise Dateien darauf speichern. Jetzt benötigen Sie ein Dateisystem. Im Linux-Kernel stehen Ihnen unglaublich viele Dateisysteme zur Verfügung. Jedes davon verwendet eine andere Datenstruktur auf der Festplatte, um den Überblick über Dateien zu behalten, und sie können ihre Datenstrukturen auch auf unterschiedliche Weise ändern, beispielsweise umAtomares SchreibenGarantien (d. h. Schreibvorgänge sind entweder erfolgreich oder nicht; selbst wenn die Maschine abstürzt, können nie halb geschriebene Daten vorhanden sein). Das meinen die Leute, wenn sie von einem „Dateisystemtreiber“ sprechen: Ein Dateisystemtreiber ist ein Codestück, das weiß, wie die Datenstrukturen eines bestimmten Dateisystems auf der Festplatte gelesen und geschrieben werden. Beispiele sind ext4, btrfs, XFS usw.

Sie möchten also Dateien speichern. Nehmen wir an, Sie wählen ext4 als Dateisystem. Was Sie jetzt tun müssen, ist, die Festplatte so zu formatieren, dass die Datenstrukturen für ein leeres Dateisystem auf der Festplatte vorhanden sind. Dazu verwenden Sie mkfs.ext4und sagen ihm, dass er in schreiben soll /dev/sda. mkfs.ext4schreibt dann ein leeres ext4-Dateisystem, beginnend am Anfang von /dev/sda. Der Kernel nimmt dann die Schreibvorgänge in /dev/sdaund wendet sie am Anfang der physischen Festplatte an. Jetzt, da die Festplatte die Datenstrukturen eines Dateisystems enthält, können Sie z. B. mount /dev/sda /mntdas brandneue Dateisystem mounten, Dateien hinein verschieben usw. Alle Schreibvorgänge in Dateien in /mntwürden dann über die Systemaufrufschnittstelle gehen, dann an den ext4-Dateisystemtreiber (der weiß, wie man das abstraktere „Schreibe diese Daten in diese und jene Datei“ in konkrete Änderungen umwandelt, die an den fs-Datenstrukturen auf der Festplatte vorgenommen werden müssen), dann an den IDE-Festplattentreiber und schließlich an das Laufwerk selbst.


Nun, das oben genannte wird funktionieren, aber es ist normalerweise nicht die Art und Weise, wie die Leute Dinge tun. Normalerweise verwenden siePartitionenauf dem Laufwerk. Eine Partition ist im Grunde nur ein bestimmter Abschnitt des Laufwerks. Wenn Sie Partitionen verwenden, haben Sie einePartitionstabelleam Anfang des Laufwerks, das angibt, wo sich jede Partition physisch befindet. Partitionen sind praktisch, da Sie damit ein Laufwerk in mehrere Abschnitte aufteilen können, die für verschiedene Zwecke verwendet werden können.

Nehmen wir also an, Sie möchtenzweiDateisysteme auf dem Laufwerk, beide ~50 GB (also halb und halb). Zuerst müssen Sie das Laufwerk partitionieren. Dazu verwenden Sie ein Tool wie fdiskoder gdisk, die beide unterschiedliche Arten von Partitionstabellen erstellen, und Sie sagen Ihrem Tool, dass es in schreiben soll /dev/sda. Wenn Sie mit der Partitionierung fertig sind, haben Sie /dev/sda, /dev/sda1, und /dev/sda2. /dev/sda1und /dev/sda2sind die Art und Weise des Kernels, die verschiedenen Partitionen auf der Festplatte darzustellen. Wenn Sie an den Anfang von schreiben /dev/sda2, wird an den Anfang der zweiten Partition geschrieben, die in liegt.die Mitte der Scheibe.

Dies lässt sich auch anhand des Inhalts von erklären /dev/sda. Denken Sie daran /dev/sda, dass dies Bit für Bit der Inhalt der physischen Festplatte ist. Und /dev/sda1ist Bit für Bit der Inhalt der ersten Partition der Festplatte. Dies bedeutet, dass /dev/sdaein paar Daten enthält – der Partitionsheader – gefolgt vom genauen Inhalt von /dev/sda1, dann /dev/sda2. /dev/sda1und /dev/sda2werden bestimmten Bereichen auf der Festplatte zugeordnet, also den von Ihnen konfigurierten Partitionen.

Von hier aus können wir mkfs.ext4erneut verwenden, um ein Dateisystem auf zu erstellen /dev/sda1, das direkt nach dem Partitionsheader auf die Festplatte schreibt. Wenn wir mkfs.ext4auf verwenden /dev/sda2, schreibt es ab dem Anfang der Partition, also in der Mitte der Festplatte (und damit in der Mitte des /dev/sdaInhalts von ).

Jetzt können Sie z. B. Folgendes tun mount /dev/sda2 /mnt. Dadurch wird der Kernel angewiesen, Dateisystemdaten ab dem Anfang der zweiten Partition zu lesen und sie Ihnen in einer nützlicheren Form bereitzustellen, d. h. Dateien und Verzeichnisse am Standort /mnt. Auch hier verwendet der Kernel einen Dateisystemtreiber, um diese Zuordnung tatsächlich durchzuführen.


Lassen Sie uns nun kurz über LVM sprechen. LVM ist im Grunde nur eine Abstraktion über Partitionen. Partitionen werden sehr, sehr direkt physischen Speicherorten auf der Festplatte zugeordnet. Nehmen wir im obigen Beispiel mit zwei Partitionen an, Sie möchten die erste Partition löschen und die zweite in den neu freigegebenen Speicherplatz erweitern. Da Partitionen direkt Festplattenbereichen zugeordnet sind, besteht die einzige Möglichkeit, dies zu tun, darin, die gesamten 50 GB Partitionsdaten physisch an den Anfang der Festplatte zu verschieben und dann die Partition bis zum Ende zu erweitern.

LVM ist so konzipiert, dass dies weniger schmerzhaft ist. Im Grunde geben Sie LVM eine Menge Rohspeicher und sagen ihm dann, wie dieser Speicher verwendet werden soll. LVM stellt Ihnen eine virtuelle „Festplatte“ zur Verfügung, die wie Partitionen aufgeteilt werden kann, deren zugrunde liegender Speicher sich jedoch überall im Rohspeicherpool befinden kann, den Sie ihr zugewiesen haben. Um das obige Beispiel zu verwenden: Wenn Sie LVM die gesamte Festplatte zur Verwendung geben und sie dann in zwei Teile aufteilen, können Sie die erste „Partition“ löschen und die zweite „Partition“ erweitern, um diesen Speicherplatz sofort zu füllen, da LVM in der Lage ist, den Überblick darüber zu behalten, wo sich die Daten auf der Festplatte befinden, ohne dass dies streng „in der richtigen Reihenfolge“ erforderlich ist.

Viele weitere Einzelheiten zur Funktionsweise von LVM finden Sie in dieser Antwort:https://unix.stackexchange.com/a/106871/29146

Antwort2

/dev/sdaist eine Schnittstelle zur gesamten Festplatte. Wenn Sie die Berechtigung haben, können Sie direkt überall auf der Festplatte suchen. /dev/sda1ist die erste Partition auf der Festplatte. Zu diesem Zeitpunkt ist noch kein Dateisystem beteiligt. Innerhalb der Partition kann sich direkt ein Dateisystem befinden oder es kann sich um einen LVM-Container handeln.

verwandte Informationen