Hallo allerseits! Wir starten weiterhin neue Threads in Kursen, die Sie bereits lieben, und haben es eilig, Ihnen mitzuteilen, dass wir einen neuen Satz im
Linux Administrator- Kurs starten, der Ende April beginnen wird. Eine neue Veröffentlichung wird zeitlich auf diese Veranstaltung abgestimmt. Das Originalmaterial finden
Sie hier .
Virtuelle Dateisysteme fungieren als eine Art magische Abstraktion, mit der die Linux-Philosophie sagen kann, dass „alles eine Datei ist“.

Was ist ein Dateisystem? Basierend auf den Worten eines der ersten Linux-Autoren und Autoren,
Robert Love : „Ein Dateisystem ist ein hierarchisches Data Warehouse, das gemäß einer bestimmten Struktur zusammengestellt wurde.“ Wie auch immer, diese Definition eignet sich gleichermaßen für VFAT (Virtual File Allocation Table), Git und
Cassandra (
NoSQL Database ). Was genau definiert ein Konzept wie „Dateisystem“?
Grundlagen des DateisystemsDer Linux-Kernel hat spezielle Anforderungen an eine Entität, die als Dateisystem betrachtet werden kann. Es sollte die Methoden
open()
,
read()
und
write()
für persistente Objekte mit Namen implementieren. Unter dem Gesichtspunkt der objektorientierten
Programmierung definiert der Kernel ein generisches Dateisystem (generisches Dateisystem) als abstrakte Schnittstelle, und diese drei großen Funktionen werden als "virtuell" betrachtet und haben keine spezifische Definition. Dementsprechend wird die Standardimplementierung des Dateisystems als virtuelles Dateisystem (VFS) bezeichnet.

Wenn wir eine Entität öffnen, lesen und in sie schreiben können, wird diese Entität als Datei betrachtet, wie aus dem obigen Beispiel in der Konsole hervorgeht.
Das VFS-Phänomen unterstreicht nur die Beobachtungscharakteristik von Unix-ähnlichen Systemen, die besagt, dass "alles eine Datei ist". Denken Sie daran, 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. Durch das Senden einer Zeichenfolge an die Konsole (virtuelles Konsolengerät) wird diese auf einem virtuellen Bildschirm angezeigt. VFS hat andere, noch seltsamere Eigenschaften. Zum Beispiel ist es möglich, sie zu durchsuchen.
Bekannte Systeme wie ext4, NFS und / proc haben drei wichtige Funktionen in der C-Datenstruktur, die als
file_operations bezeichnet werden . Darüber hinaus erweitern und definieren bestimmte Dateisysteme VFS-Funktionen auf vertraute, objektorientierte Weise. Wie Robert Love bemerkt, können Linux-Benutzer mit der VFS-Abstraktion problemlos Dateien auf oder von Betriebssystemen von Drittanbietern oder abstrakten Entitäten wie Pipes kopieren, ohne sich um ihr internes Datenformat kümmern zu müssen. Auf der Benutzerseite (Userspace) kann ein Prozess mithilfe eines Systemaufrufs mithilfe der
read()
-Methode eines Dateisystems aus einer Datei in die Kerneldatenstrukturen kopieren und anschließend mit der
write()
-Methode eines anderen Dateisystems Daten ausgeben.
Funktionsdefinitionen, die zu den grundlegenden VFS-Typen gehören, befinden sich in
fs / *. C- Dateien
aus der Kernelquelle, während
fs/
-Unterverzeichnisse bestimmte Dateisysteme enthalten. Der Kernel enthält auch Entitäten wie
cgroups
,
/dev
und
tmpfs
, die während des Startvorgangs benötigt werden und daher im Unterverzeichnis
init/
kernel definiert sind. Beachten Sie, dass
cgroups
,
/dev
und
tmpfs
nicht die Big Three-Funktionen von
file_operations
, sondern direkt lesen und in den Speicher schreiben.
Das folgende Diagramm zeigt, wie Userspace auf die verschiedenen Arten von Dateisystemen zugreift, die normalerweise auf Linux-Systemen bereitgestellt werden. Konstruktionen wie
pipes
,
dmesg
und
POSIX clocks
, die auch die
file_operations
Struktur implementieren, auf die über die VFS-Schicht
file_operations
wird, werden nicht angezeigt.

VFS ist die „Shell-Schicht“ zwischen Systemaufrufen und Implementierungen bestimmter
file_operations
wie
ext4
und
procfs
. Die Funktionen
file_operations
können entweder mit Gerätetreibern oder Speicherzugriffsgeräten interagieren.
tmpfs
,
devtmpfs
und
cgroups
verwenden keine
file_operations
, sondern greifen direkt auf den Speicher zu.
Das Vorhandensein 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 eine weit verbreitete Praxis für Softwareentwickler! Wenn der wiederverwendbare Code jedoch
schwerwiegende Fehler enthält, leiden alle Implementierungen, die allgemeine Methoden erben, darunter.
/ tmp: Einfacher HinweisEine einfache Möglichkeit, um festzustellen, ob VFS auf dem System vorhanden ist, ist die Eingabe von
mount | grep -v sd | grep -v :/
mount | grep -v sd | grep -v :/
mount | grep -v sd | grep -v :/
, das alle gemounteten Dateisysteme anzeigt, die sich nicht auf der Festplatte befinden, und nicht NFS, was auf den meisten Computern der Fall ist. Eines der oben aufgeführten VFS-Mounts wird zweifellos
/tmp
, oder?

Jeder weiß, dass das Speichern von
/tmp
auf einem physischen Medium verrückt ist!
QuelleWarum ist es unerwünscht,
/tmp
auf physischen Medien zu speichern? Weil die Dateien in
/tmp
temporär sind und Speichergeräte langsamer sind als der Speicher, in dem tmpfs erstellt wird. Darüber hinaus sind physische Medien anfälliger für das Überschreiben von Verschleiß als Speicher. Schließlich können die Dateien in / tmp vertrauliche Informationen enthalten, sodass ihr Verschwinden bei jedem Neustart eine integrale Funktion ist.
Leider erstellen einige Installationsskripte für die Linux-Distribution / tmp auf dem Standardspeichergerät. Verzweifeln Sie nicht, wenn dies Ihrem System passiert ist. Befolgen Sie einige einfache Anweisungen aus dem
Arch-Wiki , um dies zu beheben, und denken Sie daran, dass der für
tmpfs
zugewiesene Speicher für andere Zwecke nicht mehr zugänglich ist. Mit anderen Worten, ein System mit riesigen tmpfs und großen Dateien kann keinen Speicher mehr haben und abstürzen. Ein weiterer Hinweis: Denken Sie beim Bearbeiten der
/etc/fstab
daran, dass sie mit einer neuen Zeile enden muss, da Ihr System sonst nicht startet.
/ proc und / sysNeben
/tmp
sind
/proc
und
/sys
die VFS (Virtual File Systems), mit denen Linux-Benutzer am besten vertraut sind. (
/dev
befindet sich im gemeinsamen Speicher und hat keine
file_operations
). Warum genau diese beiden Komponenten? Schauen wir uns dieses Problem an.
procfs
eine Momentaufnahme des Kernels und der Prozesse, die es für den
userspace
überwacht. In
/proc
Kernel Informationen darüber an, über welche Tools er verfügt, z. B. Interrupts, virtueller Speicher und den Scheduler. Darüber hinaus ist
/proc/sys
der Ort, an dem mit dem Befehl
sysctl
konfigurierte Optionen für den
sysctl
verfügbar sind. Der Status und die Statistik der einzelnen Prozesse werden in den Verzeichnissen
/proc/
angezeigt.

Hier ist
/proc/meminfo
eine leere Datei, die dennoch wertvolle Informationen enthält.
Das Verhalten von
/proc
Dateien zeigt, wie unterschiedlich VFS-Festplattendateisysteme sein können.
/proc/meminfo
enthält
/proc/meminfo
Informationen, die mit dem Befehl
free
angezeigt werden können. Andererseits ist es dort leer! Wie ist das Die Situation ähnelt einem berühmten Artikel mit dem Titel
"Existiert der Mond, wenn niemand darauf schaut?" Realität und Quantentheorie “, geschrieben 1985 von David Mermin, Physikprofessor an der Cornell University. Tatsache ist, dass der Kernel Speicherstatistiken sammelt, wenn eine Anforderung an
/proc
, und tatsächlich nichts in den
/proc
Dateien vorhanden ist, wenn niemand dort sucht. Wie
Mermin sagte: "Die grundlegende Quantenlehre besagt, dass die Messung in der Regel nicht den bereits vorhandenen Wert der gemessenen Eigenschaft offenbart." (Stellen Sie sich die Mondfrage als Hausaufgabe vor!)
Die scheinbare Leere von
procfs
macht Sinn, weil die Informationen dort dynamisch sind. Eine etwas andere Situation mit
sysfs
. Vergleichen wir, wie viele Dateien mit mindestens einem Byte in
/proc
und
/sys
.

Procfs
verfügt über eine Datei, nämlich die exportierte Kernelkonfiguration. Dies ist eine Ausnahme, da sie nur einmal pro Start generiert werden muss.
/sys
hingegen enthält viel mehr umfangreiche Dateien, von denen viele eine ganze Seite des Speichers belegen. Normalerweise enthalten
sysfs
Dateien genau eine Zahl oder Zeile, im Gegensatz zu Informationstabellen, die durch Lesen von Dateien wie
/proc/meminfo
.
Der Zweck von
sysfs
besteht darin, lesbare und beschreibbare Eigenschaften dessen bereitzustellen, was der Kernel im
«kobjects»
nennt. Der einzige Zweck von
kobjects
besteht darin, Links zu zählen: Wenn der letzte Link zu kobject gelöscht wird, stellt das System die damit verbundenen Ressourcen wieder her.
/sys
macht jedoch den größten Teil des berühmten Kernels
"Stable ABI for Userspace" aus , den unter keinen Umständen
beschädigt werden kann . Dies bedeutet nicht, dass die Dateien in sysfs statisch sind, was dem Zählen von Links zu instabilen Objekten widersprechen würde.
Die stabile Kernel-Anwendungsschnittstelle eines Kernels (der stabile ABI des Kernels) begrenzt, was in
/sys
angezeigt werden kann, und nicht, was in diesem bestimmten Moment tatsächlich vorhanden ist. Das Auflisten von Dateiberechtigungen in sysfs bietet einen Überblick darüber, wie konfigurierbare Einstellungen für Geräte, Module, Dateisysteme usw. möglich sind. kann angepasst oder gelesen werden. Wir schließen daraus, dass procfs auch Teil des stabilen ABI-Kernels ist, obwohl dies in der
Dokumentation nicht explizit angegeben ist.

Dateien in
sysfs
beschreiben eine bestimmte Eigenschaft für jede Entität und können gleichzeitig lesbar, wiederbeschreibbar oder beides sein. Eine "0" in der Datei zeigt an, dass die SSD nicht gelöscht werden kann.
Wir beginnen den
zweiten Teil der Übersetzung mit der Beobachtung von VFS mithilfe der eBPF- und bcc-Tools. Jetzt warten wir auf Ihre Kommentare und laden Sie traditionell zu dem
offenen Webinar ein , das am 9. April von unserem Lehrer
Vladimir Drozdetsky abgehalten wird.
Der zweite Teil.