Hallo zusammen! Wir setzen die Einführung neuer Streams für die Ihnen bereits bekannten Kurse fort und freuen uns, Ihnen mitteilen zu können, dass wir einen neuen Kurs starten. Dieser wird Ende April beginnen. Zu diesem Anlass wird eine neue Veröffentlichung erscheinen. Das Originalmaterial kann .
Virtuelle Dateisysteme fungieren als eine Art magische Abstraktion, die es der Philosophie von Linux ermöglicht zu sagen, dass „alles eine Datei ist“.

Was ist ein Dateisystem? Basierend auf den Worten eines der ersten Mitwirkenden und Autoren von Linux, ist „ein Dateisystem ein hierarchisches Datenspeicher, das gemäß einer bestimmten Struktur angeordnet ist“. Wie dem auch sei, diese Definition passt genauso gut zu VFAT (Virtual File Allocation Table), Git und (). Was definiert also das Konzept eines „Dateisystems“?
Grundlagen des Dateisystems
Der Linux-Kernel hat bestimmte Anforderungen an die Entität, die als Dateisystem betrachtet werden kann. Es muss Methoden implementieren open(), read() und write() für permanente Objekte, die Namen tragen. Aus der Sicht der objektorientierten definiert der Kernel ein generelles Dateisystem (generic filesystem) als abstraktes Interface, und diese drei großen Funktionen gelten als „virtuell“ und haben keine spezifische Definition. Dementsprechend wird die Standardimplementierung eines Dateisystems als virtuelles Dateisystem (VFS) bezeichnet.

Wenn wir eine Entität öffnen, lesen und darin schreiben können, wird diese Entität als Datei betrachtet, wie im obigen Beispiel im Konsolenfenster.
Das Phänomen VFS unterstreicht nur die Beobachtung, die für Unix-ähnliche Systeme charakteristisch ist, nämlich dass „alles eine Datei ist“. Denken Sie einmal darüber nach, wie seltsam es ist, dass das kleine Beispiel oben mit /dev/console zeigt, wie die Konsole tatsächlich funktioniert. Das Bild zeigt eine interaktive Bash-Sitzung. Das Senden einer Zeile an die Konsole (virtuelles Konsolengerät) wird auf dem virtuellen Bildschirm angezeigt. VFS hat noch andere, noch seltsamere Eigenschaften. Zum Beispiel ermöglicht es, Suchen über .
Bekannte Systeme wie ext4, NFS und /proc haben drei wichtige Funktionen in der C-Datenstruktur, die . Darüber hinaus erweitern und überschreiben bestimmte Dateisysteme VFS-Funktionen auf eine vertraute objektorientierte Weise. Wie Robert Love feststellt, ermöglicht die VFS-Abstraktion Linux-Benutzern, Dateien sorglos in oder aus anderen Betriebssystemen oder abstrakten Entitäten wie Pipes zu kopieren, ohne sich um deren internes Datenformat kümmern zu müssen. Vom Benutzerspeicher aus kann der Prozess durch einen Systemaufruf von einer Datei in die Datenstrukturen des Kernels unter Verwendung der Methode read() eines Dateisystems kopieren und dann die Methode write () eines anderen Dateisystems zum Schreiben der Daten verwenden.
Die Definitionen der Funktionen, die zu den grundlegenden VFS-Typen gehören, befinden sich in den Dateien des Quellcodes des Kernels, während die Unterverzeichnisse fs/ bestimmte Dateisysteme enthalten. Im Kernel sind auch Entitäten wie cgroups, /dev und tmpfs, die im Ladeprozess benötigt werden und daher im Unterverzeichnis des Kernels definiert sind init/. Beachten Sie, dass cgroups, /dev und tmpfs keine der „großen drei“ Funktionen aufruft file_operations, sondern direkt in den Speicher liest und schreibt.
Im folgenden Diagramm ist dargestellt, wie der Userspace auf verschiedene Arten von Dateisystemen zugreift, die üblicherweise in Linux-Systemen eingehängt sind. Konstrukte wie Pipes, dmesg und POSIX-Uhren, die ebenfalls die Struktur implementieren, werden nicht angezeigt, deren Zugriff über die VFS-Schicht erfolgt. file_operationsVFS ist eine „Schicht“ zwischen Systemaufrufen und Implementierungen bestimmter

procfs file_operations, wie zum Beispiel ext4 und . Funktionenkönnen entweder mit Gerätetreibern oder mit Speichermedien kommunizieren. file_operations devtmpfs tmpfs, , greift jedoch direkt auf den Speicher zu. und cgroups nicht file_operationsDas Bestehen von VFS ermöglicht die Wiederverwendung von Code, da die grundlegenden Methoden im Zusammenhang mit Dateisystemen nicht von jedem Dateisystemtyp erneut implementiert werden müssen. Code-Wiederverwendung ist eine weit verbreitete Praxis unter Software-Ingenieuren! Wenn der wiederverwendbare Code jedoch
ernsthafte Fehler Ein einfacher Weg festzustellen, dass VFS im System vorhanden ist, besteht darin, einzugeben
/tmp: Простая подсказка
mount | grep -v sd | grep -v :/ , was alle eingehängten (mounted) Dateisysteme anzeigt, die nicht auf der Festplatte resident sind und kein NFS, was auf den meisten Computern zutrifft. Eines der aufgeführten Mounts (mounts) von VFS wird sicherlich sein, oder? /tmp, richtig?

Jeder weiß, dass die Speicherung / tmp auf physischen Trägern Wahnsinn ist! .
Warum ist es unerwünscht, sie zu speichern /tmp auf physischen Trägern? Weil Dateien in /tmp temporär sind und Speichergeräte langsamer sind als der Speicher, in dem tmpfs erstellt wird. Darüber hinaus sind physische Träger anfälliger für Abnutzung durch das Überschreiben als der Speicher. Schließlich können Dateien in /tmp vertrauliche Informationen enthalten, weshalb ihr Verschwinden bei jedem Neustart eine unvermeidbare Funktion ist.
Leider erstellen einige Installationsskripte von Linux-Distributionen standardmäßig /tmp auf dem Speichermedium. Verzweifeln Sie nicht, wenn dies auch bei Ihrem System passiert ist. Führen Sie einige einfache Anweisungen von , um dies zu beheben, und denken Sie daran, dass der Speicher, der für tmpfs reserviert ist, für andere Zwecke nicht mehr verfügbar wird. Mit anderen Worten, ein System mit einem riesigen tmpfs und großen Dateien darin kann den gesamten Speicher verbrauchen und abstürzen. Ein weiterer Tipp: Denken Sie beim Bearbeiten der Datei /etc/fstab, daran, dass sie mit einer neuen Zeile enden muss, andernfalls wird Ihr System nicht starten.
/proc и /sys
Neben /tmp, VFS (virtuelle Dateisysteme), die den Linux-Nutzern am vertrautesten sind, befinden sich /proc und /sys. (/dev im gemeinsamen Speicher und haben keinen file_operations). Warum gerade diese beiden Komponenten? Lassen Sie uns diese Frage klären.
. Funktionen erstellt einen Snapshot des aktuellen Zustands des Kernels und der Prozesse, die es steuert, für userspace. In /proc gibt der Kernel Informationen darüber aus, welche Ressourcen ihm zur Verfügung stehen, wie z.B. Interrupts, virtueller Speicher und Scheduler. Darüber hinaus /proc/sys ist der Ort, an dem Parameter, die mit dem Befehl sysctl, konfiguriert werden, für userspace. Der Status und die Statistiken einzelner Prozesse werden in Verzeichnissen ausgegeben. /proc/.

Hier /proc/meminfo — das ist eine leere Datei, die jedoch wertvolle Informationen enthält.
Das Verhalten /proc von Dateien zeigt, wie unterschiedlich die Dateisysteme von VFS sein können. Einerseits /proc/meminfo enthalten Informationen, die mit dem Befehl freeabgerufen werden können. Andererseits ist da nichts! Wie kommt das? Die Situation erinnert an den berühmten Artikel mit dem Titel , geschrieben von dem Physikprofessor der Cornell University, David Mermin, im Jahr 1985. Tatsache ist, dass der Kernel Statistiken über den Speicher sammelt, wenn eine Anfrage an /procgestellt wird, und in der Tat in den Dateien. /proc Es gibt nichts, wenn niemand hinschaut. Wie gesagt , „Die fundamentale quantenmechanische Doktrin besagt, dass eine Messung normalerweise keinen zuvor existierenden Wert der gemessenen Eigenschaft enthüllt.“ (Denken Sie über die Frage zum Mond als Hausaufgabe nach!)
Der scheinbare Leerraum . Funktionen hat Bedeutung, da die dort vorhandene Information dynamisch ist. Eine etwas andere Situation herrscht bei sysfs. Lassen Sie uns vergleichen, wie viele Dateien mit einer Größe von mindestens einem Byte es im /proc und in /sys.

Procfs gibt, das eine Datei enthält, nämlich die exportierte Konfiguration des Kernels, die eine Ausnahme darstellt, da sie nur einmal pro Boot generiert werden muss. Im Gegensatz dazu gibt es im /sys eine Vielzahl von größeren Dateien, von denen viele einen ganzen Speicherbereich einnehmen. In der Regel enthalten Dateien sysfs genau eine Zahl oder einen String, im Gegensatz zu den Informationsdaten, die beim Lesen solcher Dateien wie /proc/meminfo.
Ziel sysfs bereitstellen, Eigenschaften, die für das Lesen und Schreiben von dem, was der Kernel als „kobjects“ im Userspace bezeichnet, verfügbar sind. Der einzige Zweck von kobjects ist das Zählen von Referenzen: Wenn die letzte Referenz auf ein kobject gelöscht wird, wird das System die mit diesem kobject verbundenen Ressourcen wiederherstellen. Dennoch /sys macht den Großteil der berühmten des Kernels aus, die niemand jemals unter keinen Umständen kann. Das bedeutet nicht, dass die Dateien in sysfs statisch sind, was der Zählung von Referenzen auf instabile Objekte widersprechen würde.
Die stabile binäre Programmierschnittstelle des Kernels (kernel’s stable ABI) begrenzt, was erscheinen kann /sys, nicht das, was zu einem bestimmten Zeitpunkt tatsächlich vorhanden ist. Die Auflistung der Dateiberechtigungen in sysfs bietet ein Verständnis dafür, wie konfigurierbare Parameter von Geräten, Modulen, Dateisystemen usw. eingestellt oder gelesen werden können. Daraus folgt logisch, dass procfs ebenfalls Teil der stabilen ABI des Kernels ist, obwohl dies nicht ausdrücklich in .

angegeben ist. Dateien in sysfs beschreiben eine bestimmte Eigenschaft für jede Entität und können lesbar, beschreibbar oder beides gleichzeitig sein. „0“ in der Datei deutet darauf hin, dass das SSD nicht entfernt werden kann.
Mit dem zweiten Teil der Übersetzung beginnen wir damit, wie man VFS mit den Werkzeugen eBPF und bcc beobachtet, und jetzt warten wir auf Ihre Kommentare und laden traditionell ein zu , die unser Dozent am 9. April durchführen wird — .
Quelle: habr.com
