Virtuelle Dateisysteme unter Linux: Warum werden sie benötigt und wie funktionieren sie? Teil 1

Hallo alle! Wir starten weiterhin neue Streams für die Kurse, in die Sie sich bereits verliebt haben, und jetzt haben wir es eilig, Ihnen mitzuteilen, dass wir eine neue Reihe von Kursen starten „Linux-Administrator“die Ende April starten wird. Für diese Veranstaltung wird eine neue Veröffentlichung datiert. Mit dem Originalmaterial ist das möglich Lies hier.

Virtuelle Dateisysteme dienen als eine Art magische Abstraktion, die es der Linux-Philosophie ermöglicht, zu sagen, dass „alles eine Datei ist“.

Virtuelle Dateisysteme unter Linux: Warum werden sie benötigt und wie funktionieren sie? Teil 1

Was ist ein Dateisystem? Basierend auf den Worten eines der ersten Mitwirkenden und Autoren von Linux Roberta Lava„Ein Dateisystem ist eine hierarchische Speicherung von Daten, die nach einer bestimmten Struktur zusammengestellt sind.“ Wie dem auch sei, diese Definition eignet sich gleichermaßen gut für VFAT (Virtual File Allocation Table), Git und Kassandra (NoSQL-Datenbank). Was genau definiert so etwas wie ein „Dateisystem“?

Grundlagen des Dateisystems

Der Linux-Kernel stellt bestimmte Anforderungen an eine Entität, die als Dateisystem betrachtet werden kann. Es muss die Methoden implementieren open(), read() и write() für persistente Objekte, die Namen haben. Aus objektorientierter Sicht Programmierung, definiert der Kernel ein generisches Dateisystem als abstrakte Schnittstelle, und diese drei großen Funktionen gelten als „virtuell“ und haben keine konkrete Definition. Dementsprechend wird die Standard-Dateisystemimplementierung als virtuelles Dateisystem (VFS) bezeichnet.

Virtuelle Dateisysteme unter Linux: Warum werden sie benötigt und wie funktionieren sie? Teil 1

Wenn wir eine Entität öffnen, lesen und schreiben können, wird diese Entität als Datei betrachtet, wie wir aus dem Beispiel in der Konsole oben sehen können.
Das VFS-Phänomen unterstreicht nur die Unix-ähnliche Beobachtung, dass „alles eine Datei ist“. Denken Sie, wie seltsam es ist, dass das kleine /dev/console-Beispiel oben zeigt, wie die Konsole tatsächlich funktioniert. Das Bild zeigt eine interaktive Bash-Sitzung. Durch Senden einer Zeichenfolge an die Konsole (virtuelles Konsolengerät) wird diese auf einem virtuellen Bildschirm angezeigt. VFS hat andere, noch seltsamere Eigenschaften. Es ermöglicht Ihnen beispielsweise die Suche nach es.

Bekannte Systeme wie ext4, NFS und /proc verfügen über drei wichtige Funktionen in einer C-Datenstruktur namens file_operations. Darüber hinaus erweitern und definieren bestimmte Dateisysteme die VFS-Funktionalität auf bekannte objektorientierte Weise neu. Wie Robert Love betont, ermöglicht die VFS-Abstraktion Linux-Benutzern das lässige Kopieren von Dateien auf oder von Betriebssystemen Dritter oder abstrakten Entitäten wie Pipes, ohne sich Gedanken über ihr internes Datenformat machen zu müssen. Auf der Benutzerseite (Userspace) kann ein Prozess mithilfe eines Systemaufrufs mithilfe der Methode Datenstrukturen aus einer Datei in Kernel-Datenstrukturen kopieren read() ein Dateisystem und verwenden Sie dann die Methode write () ein weiteres Dateisystem zur Datenausgabe.

Die Funktionsdefinitionen, die zu den Basis-VFS-Typen gehören, befinden sich in den Dateien fs/*.c Kernel-Quellcode, während Unterverzeichnisse fs/ bestimmte Dateisysteme enthalten. Der Kern enthält auch Entitäten wie cgroups, /dev и tmpfs, die während des Bootvorgangs benötigt werden und daher im Kernel-Unterverzeichnis definiert sind init/. Beachte das cgroups, /dev и tmpfs Rufen Sie nicht die „großen drei“ Funktionen auf file_operations, sondern direkt in den Speicher lesen und schreiben.
Das folgende Diagramm zeigt, wie der Userspace auf die verschiedenen Arten von Dateisystemen zugreift, die üblicherweise auf Linux-Systemen gemountet werden. Strukturen nicht dargestellt pipes, dmesg и POSIX clocks, die auch die Struktur implementieren file_operations, Zugriff über die VFS-Schicht.

Virtuelle Dateisysteme unter Linux: Warum werden sie benötigt und wie funktionieren sie? Teil 1

VFS ist eine „Wrapper-Schicht“ zwischen Systemaufrufen und bestimmten Implementierungen file_operationsWie ext4 и procfs. Funktionen file_operations kann entweder mit Gerätetreibern oder Speicherzugriffsgeräten interagieren. tmpfs, devtmpfs и cgroups verwende nicht file_operations, sondern direkt auf den Speicher zugreifen.
Die Existenz von VFS bietet die Möglichkeit, Code wiederzuverwenden, da die mit Dateisystemen verbundenen grundlegenden Methoden nicht von jedem Dateisystemtyp neu implementiert werden müssen. Die Wiederverwendung von Code ist unter Softwareentwicklern eine gängige Praxis! Wenn der wiederverwendbare Code jedoch enthält schwerwiegende Fehler, alle Implementierungen, die gemeinsame Methoden erben, leiden darunter.

/tmp: Einfacher Hinweis

Eine einfache Möglichkeit, festzustellen, ob VFS auf einem System vorhanden ist, ist die Eingabe mount | grep -v sd | grep -v :/, das alle montierten (mounted) Dateisysteme, die nicht festplattenresident und nicht NFS-fähig sind, was auf den meisten Computern der Fall ist. Eines der aufgeführten Reittiere (mounts) VFS wird zweifellos /tmprichtig?

Virtuelle Dateisysteme unter Linux: Warum werden sie benötigt und wie funktionieren sie? Teil 1

Jeder kennt diesen Speicher / tmp auf einem physischen Medium - Wahnsinn! Quelle.

Warum ist die Lagerung unerwünscht? /tmp auf physischen Medien? Weil die Dateien in /tmp sind temporär und Speichergeräte sind langsamer als der Speicher, in dem tmpfs erstellt wird. Darüber hinaus sind physische Medien beim Überschreiben anfälliger für Abnutzung als Speicher. Schließlich können Dateien in /tmp vertrauliche Informationen enthalten, daher ist es eine wesentliche Funktion, sie bei jedem Neustart verschwinden zu lassen.

Leider erstellen einige Installationsskripte der Linux-Distribution standardmäßig /tmp auf dem Speichergerät. Verzweifeln Sie nicht, wenn dies auch Ihrem System passiert. Befolgen Sie ein paar einfache Anweisungen mit Arch WikiUm dies zu beheben, achten Sie darauf, dass der Speicher dafür reserviert ist tmpfs für andere Zwecke nicht mehr verfügbar ist. Mit anderen Worten: Ein System mit riesigen tmpfs und großen Dateien kann nicht mehr über genügend Arbeitsspeicher verfügen und abstürzen. Noch ein Hinweis: beim Bearbeiten einer Datei /etc/fstab, denken Sie daran, dass es mit einer neuen Zeile enden muss, sonst startet Ihr System nicht.

/proc und /sys

Neben /tmp, VFS (virtuelle Dateisysteme), die Linux-Benutzern am vertrautesten sind /proc и /sys. (/dev befindet sich im gemeinsamen Speicher und hat keinen file_operations). Warum diese beiden Komponenten? Schauen wir uns dieses Problem an.

procfs erstellt einen Snapshot des Kernels und der Prozesse, die er überwacht userspace. In /proc Der Kernel gibt Informationen darüber aus, was ihm zur Verfügung steht, z. B. Interrupts, virtuellen Speicher und den Scheduler. Außerdem, /proc/sys ist der Ort, an dem die mit dem Befehl konfigurierten Parameter gespeichert werden sysctl, verfügbar für userspace. Status und Statistiken einzelner Prozesse werden in Katalogen angezeigt /proc/.

Virtuelle Dateisysteme unter Linux: Warum werden sie benötigt und wie funktionieren sie? Teil 1

Hier /proc/meminfo ist eine leere Datei, die dennoch wertvolle Informationen enthält.

Verhalten /proc files zeigt, wie unterschiedlich VFS-Festplattendateisysteme sein können. Einerseits, /proc/meminfo enthalten Informationen, die mit dem Befehl angezeigt werden können free. Andererseits ist es leer! Wie funktioniert es? Die Situation erinnert an den berühmten Artikel mit dem Titel Existiert der Mond, wenn niemand ihn ansieht? Realität und Quantentheorie“geschrieben von David Mermin, Physikprofessor an der Cornell University, im Jahr 1985. Tatsache ist, dass der Kernel Speicherstatistiken sammelt, wenn eine Anfrage gestellt wird /proc, und zwar in Dateien /proc Es gibt nichts, wenn niemand hinschaut. Wie gesagt Mermin„Die fundamentale Quantenlehre besagt, dass die Messung im Allgemeinen keinen bereits bestehenden Wert der gemessenen Eigenschaft offenbart.“ (Und betrachten Sie die Frage nach dem Mond als Hausaufgabe!)
Scheinbare Leere procfs macht Sinn, weil die Informationen dort dynamisch sind. Eine etwas andere Situation mit sysfs. Vergleichen wir, wie viele Dateien mit einer Größe von mindestens einem Byte vorhanden sind /proc und /sys.

Virtuelle Dateisysteme unter Linux: Warum werden sie benötigt und wie funktionieren sie? Teil 1

Procfs verfügt über eine Datei, nämlich die exportierte Kernel-Konfiguration, was eine Ausnahme darstellt, da diese nur einmal pro Boot generiert werden muss. Andererseits in /sys Es gibt viele größere Dateien, von denen viele eine ganze Seite Speicher beanspruchen. Normalerweise Dateien sysfs enthalten genau eine Zahl oder Zeile, im Gegensatz zu Tabellen mit Informationen, die durch das Lesen von Dateien wie z. B. erhalten werden /proc/meminfo.

Ziel sysfs - Bereitstellung von Lese-/Schreibeigenschaften dessen, was der Kernel aufruft «kobjects» im Userspace. Das einzige Ziel kobjects ist die Linkzählung: Wenn der letzte Link zu einem Kobject entfernt wird, stellt das System die damit verbundenen Ressourcen wieder her. Dennoch, /sys macht die meisten berühmten aus „stabile ABI für Userspace“ Kern, den niemand jemals und unter keinen Umständen erreichen kann "brechen". Dies bedeutet nicht, dass Dateien in sysfs statisch sind, was im Widerspruch zur Referenzzählung instabiler Objekte stehen würde.
Die stabile ABI des Kernels begrenzt, was darin erscheinen kann /sys, nicht das, was in diesem bestimmten Moment tatsächlich vorhanden ist. Das Auflisten von Dateiberechtigungen in sysfs bietet Einblicke in die konfigurierbaren Einstellungen für Geräte, Module, Dateisysteme usw. konfigurierbar bzw. auslesbar. Die logische Schlussfolgerung ist, dass procfs auch Teil der stabilen ABI des Kernels ist, obwohl dies in nicht explizit angegeben ist Dokumentation.

Virtuelle Dateisysteme unter Linux: Warum werden sie benötigt und wie funktionieren sie? Teil 1

Dateien in sysfs beschreiben eine bestimmte Eigenschaft für jede Entität und können lesbar, beschreibbar oder beides sein. „0“ in der Datei bedeutet, dass die SSD nicht entfernt werden kann.

Beginnen wir den zweiten Teil der Übersetzung mit der Überwachung von VFS mit den Tools eBPF und bcc. Jetzt warten wir auf Ihre Kommentare und laden Sie traditionell dazu ein offenes Webinar, das am 9. April von unserem Lehrer abgehalten wird - Wladimir Drozdetsky.

Source: habr.com

Kommentar hinzufügen