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
Virtuelle Dateisysteme dienen als eine Art magische Abstraktion, die es der Linux-Philosophie 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
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
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
Bekannte Systeme wie ext4, NFS und /proc verfügen über drei wichtige Funktionen in einer C-Datenstruktur namens 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/
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.
VFS ist eine „Wrapper-Schicht“ zwischen Systemaufrufen und bestimmten Implementierungen file_operations
Wie 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
/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 /tmp
richtig?
Jeder kennt diesen Speicher / tmp
auf einem physischen Medium - Wahnsinn!
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 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/
.
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 /proc
, und zwar in Dateien /proc
Es gibt nichts, wenn niemand hinschaut. Wie gesagt
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
.
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
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
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
Source: habr.com