Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Was bedeutet Linux-Sicherung?

Was bedeutet Linux-Sicherung?

青灯夜游
青灯夜游Original
2023-04-18 11:20:081937Durchsuche

Das Linux-Kernelmodul zur Unterstützung von User-Space-Dateisystemen heißt FUSE. Der vollständige Name von Fuse lautet „Filesystem in Userspace“, was auf Chinesisch „User Space File System“ bedeutet. Es bezieht sich auf ein Dateisystem, das vollständig im Benutzermodus implementiert ist und eine wichtige Komponente darstellt eines allgemeinen Betriebssystems.

Was bedeutet Linux-Sicherung?

Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Dell G3-Computer.

Was ist Linux Fuse

Dateisystem im Userspace bezieht sich auf ein Dateisystem, das vollständig im Benutzermodus implementiert ist. Es wird in Linux verwendet, um bestimmte Netzwerkbereiche, wie z. B. SSH, in lokale Dateien einzuhängen Systemmodule, relevante Inhalte können finden Sie auf SourceForge.

Das von Linux zur Unterstützung des User-Space-Dateisystems verwendete Kernel-Modul heißt FUSE. Der Begriff FUSE bezieht sich manchmal speziell auf das User-Space-Dateisystem unter Linux. Es ist ein wichtiger Teil eines allgemeinen Betriebssystems. Betriebssysteme bieten traditionell Unterstützung für Dateisysteme auf Kernel-Ebene. Im Allgemeinen ist Kernel-Modus-Code schwer zu debuggen und weist eine geringe Produktivität auf.

Das sogenannte „Benutzermodus-Dateisystem“ bedeutet, dass die Daten und Metadaten eines Dateisystems durch Benutzermodusprozesse bereitgestellt werden (dieser Prozess wird „Daemon“ genannt). Für Mikrokernel-Betriebssysteme ist die Implementierung eines Dateisystems im Benutzermodus nichts, aber für Makrokernel-Linux ist die Bedeutung anders.

Obwohl es als Benutzermodus-Dateisystem bezeichnet wird, bedeutet dies nicht, dass überhaupt keine Beteiligung des Kernels erforderlich ist, da der Zugriff auf Dateien unter Linux einheitlich über die vom VFS bereitgestellte Kernelschnittstelle erfolgt Daher muss ein Prozess (genannt „Benutzer“), der auf das vom Daemon implementierte Dateisystem zugreift, immer noch VFS durchlaufen.

Wenn VFS eine Dateizugriffsanforderung vom Benutzerprozess empfängt und feststellt, dass die Datei zu einem Dateisystem im Benutzermodus gehört (je nach Mount-Typ), überträgt es die Anforderung an ein Kernelmodul namens „fuse“. Anschließend wandelt „fuse“ die Anfrage in das mit dem Daemon vereinbarte Protokollformat um und übermittelt sie an den Daemon-Prozess.

Was bedeutet Linux-Sicherung?

Es ist ersichtlich, dass in dieser Drei-Parteien-Beziehung das Kernelmodul „Fuse“ eine Übertragungsrolle spielt. Es hilft beim Aufbau eines Kommunikationskanals zwischen VFS (es kann auch als Benutzerprozess bezeichnet werden) und Laienhaft ausgedrückt ist seine Rolle tatsächlich die eines „Agenten“.

Die Implementierung dieses vollständigen Frameworks in Linux ist FUSE (Filesystem in Userspace). Wie in Abbildung 1 dargestellt, handelt es sich bei dem Teil im roten Feld um die spezifische Implementierung des Dateisystems vom Typ FUSE und um den Platz, den Designer von Dateisystemen im Benutzermodus nutzen können. Derzeit sind mehr als hundert Dateisysteme basierend auf FUSE implementiert (einige Kernel-basierte Dateisysteme können auch in Benutzermodus-Dateisysteme wie ZFS und NTFS portiert werden). In diesem Artikel wird eine vorgefertigte Sicherung verwendet. sshfs zur Demonstration.

Installieren Sie zunächst das Softwarepaket „fuse-sshfs“ und verwenden Sie den folgenden Befehl, um das Dateisystem zu mounten (mounten Sie das Verzeichnis „remote-dir“ des Remote-Computers in das Verzeichnis „local-dir“ des lokalen Computers):

sshfs :

Danach wird ein Ordner mit dem Namen „fuse“ im Verzeichnis „/sys/fs“ generiert, und Sie können die Datei sehen Das Kernelmodul „fuse“ wurde geladen (das entsprechende Gerät ist „/dev/fuse“), und der Typ des lokalen Montageverzeichnisses wurde zu „fuse.sshfs“:

Was bedeutet Linux-Sicherung?

Der Zweck der Generierung von Geräteknoten ist Es Dies ist praktisch für die Benutzermodussteuerung, aber für Anwendungen auf Dateisystemebene ist es immer noch problematisch, ioctl () direkt für den Zugriff auf das Gerät zu verwenden, da zu viele Details angezeigt werden, sodass libfuse als Zwischenschicht entsteht und der Daemon-Prozess ausgeführt wird Tatsächlich werden Fuse-Gerätedateien über die von libfuse bereitgestellte Schnittstelle betrieben.

Du kommst und gehst

Nehmen Sie als Nächstes das Beispiel der Erstellung einer neuen Datei über den Befehl „touch“ im Dateisystem „fuse.sshfs“, um den spezifischen Interaktionsprozess zwischen dem Fuse-Kernelmodul und dem Daemon-Prozess anzuzeigen (d. h. „sshfs“) (Der Codeteil basiert auf der Kernel-Version 5.2.0):

[Erste Runde]

Der Anfang ist die Berechtigungsüberprüfung, aber die Überprüfung hier entspricht nicht der VFS-Berechtigungsüberprüfung Der Zweck besteht darin, zu verhindern, dass andere Benutzer auf ihr privates Fuse-Dateisystem zugreifen.

Was bedeutet Linux-Sicherung?

Dann wird der Inode der Datei anhand des Dateipfads gefunden. Da es sich um eine neu erstellte Datei handelt, befindet sich der Inode nicht im Inode-Cache des Kernels, daher müssen Sie eine „Lookup“-Anfrage an den Daemon senden:

Was bedeutet Linux-Sicherung?
#🎜 🎜#Diese Anfragen werden in eine

Ausstehende Warteschlange gestellt und auf die Antwort vom Daemon-Prozess gewartet, und der Benutzerprozess wird in den Ruhezustand versetzt:

#🎜🎜 #
Was bedeutet Linux-Sicherung? Als Daemon erhält der SSHFS-Prozess Daten, indem er die Gerätedatei „/dev/fuse“ liest. Wenn die ausstehende Warteschlange leer ist, fällt sie in die blockierende Warteschleife:
#🎜🎜 #

Wenn Anfragen in der ausstehenden Warteschlange eintreffen, wird der Daemon-Prozess aktiviert und verarbeitet diese Anfragen. Die verarbeitete Anfrage wird in die Was bedeutet Linux-Sicherung?Verarbeitungswarteschlange
verschoben. Nachdem der Daemon-Prozess auf das Fuse-Kernel-Modul geantwortet hat, wird der Benutzerprozess aktiviert und die entsprechende Anfrage aus der Verarbeitungswarteschlange entfernt. #🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜#【Zweite Runde

】#🎜🎜 ## 🎜 🎜#Der nächste Schritt sind weitere Systemaufrufe, die beim Ausführen des „touch“-Befehls ausgelöst werden. Wenn bereits zuvor auf Daten/Metadaten zugegriffen wurde, sind diese wahrscheinlich im Cache vorhanden Kernelmodul sichern Es kann von selbst gelöst werden, ohne dass ein Roundtrip in den Benutzerbereich erforderlich ist. Andernfalls muss es weiterhin zur Verarbeitung an den Daemon-Prozess gemeldet werden. Hier ruft get_fuse_conn() die Strukturinstanz „

fuse_conn
“ ab, die beim Mounten des Fuse-Typ-Dateisystems erstellt wird. Als Verbindung zwischen dem Daemon-Prozess und dem Kernel bleibt die Verbindung immer bestehen, es sei denn, der Daemon-Prozess stirbt ab oder das entsprechende Fuse-Dateisystem wird deinstalliert. Was bedeutet Linux-Sicherung?
Auf der Seite des Daemon-Prozesses gibt es noch ähnliche Vorgänge. Zu beachten ist der Unterschied zwischen

Fuse_write/read() und fuse_dev_write/read()

Ersteres wird vom Benutzerprozess verwendet, um auf die Sicherungsdatei zuzugreifen System. VFS-Lese- und Schreibanforderungen für Dateien sind Vorgänge für reguläre Dateien. Letzteres ist das Lesen und Schreiben von „/dev/fuse“, einem Gerät, das das Fuse-Kernelmodul darstellt, durch den Daemon-Prozess anfordern und antworten.

【Die dritte Runde
Was bedeutet Linux-Sicherung?
Der letzte Schritt des Fuse-Kernel-Moduls und Daemon-Prozess Die Rundeninteraktion besteht darin, die Inode-Nummer im Superblock abzurufen, der das Sicherungsdateisystem darstellt, und die relevanten Informationen dieser Metadaten einzugeben.

Zwei Seiten der Medaille

Es ist nicht schwer, das im Sicherungsdateisystem zu finden, auch wenn es relativ ist Es wird eine einfache „Berührung“ ausgeführt. Vorgänge erfordern einen häufigen Wechsel zwischen Benutzermodus und Kernelmodus und werden von mehreren Datenkopien begleitet. Im Vergleich zu herkömmlichen Kernel-Dateisystemen ist der gesamte E/A-Durchsatz geringer und die Latenz höher. Was bedeutet Linux-Sicherung?

Warum nimmt Fuse dann immer noch einen Platz in den vom Betriebssystem unterstützten Dateisystemen ein? Apropos: Die Entwicklung im Benutzermodus hat viele Vorteile. Erstens ist es einfach zu debuggen und eignet sich besonders für die schnelle Überprüfung eines neuen Dateisystem-Prototyps, weshalb es im Bereich der akademischen Forschung sehr beliebt ist. Im Kernel können Sie nur die Sprache C verwenden. Im Benutzermodus gibt es nicht so viele Einschränkungen. Verschiedene Funktionsbibliotheken und verschiedene Programmiersprachen können verwendet werden.

Zweitens führen Kernelfehler häufig dazu, dass das gesamte System bei der geringsten Meinungsverschiedenheit abstürzt (was bei virtualisierten Anwendungen schwerwiegender ist, da der Absturz des Hosts zum Absturz aller darauf ausgeführten virtuellen Maschinen führt) und im Benutzermodus Der Fehler ist relativ begrenzt. Die Vorderseite der Medaille ist also, dass es für die Entwicklung praktisch ist, aber wie praktisch es ist, ist schließlich ein

subjektives

Gefühl, während die andere Seite die Auswirkung auf die Leistung ist, die mit objektiv überprüft werden kann experimentelle Daten. Welche Methode sollte also verwendet werden, um den durch die Sicherung verursachten Verlust relativ genau zu messen? Wir verwenden immer noch die Fuse-SSHFS, die wir zuvor verwendet haben, aber hier verwenden wir kein Remote-Mounting mehr, sondern lokales Mounten (vorausgesetzt, das Verzeichnis „dir-src“ der lokalen Maschine befindet sich im ext4-Dateisystem):

sshfs localhost:
Wenn der Daemon-Prozess die Anfrage empfängt, muss er erneut in den Kernel eintreten, um auf das ext4-Kernelmodul zuzugreifen (dieser Dateisystemmodus wird als „stapelbar“ bezeichnet). "):

Was bedeutet Linux-Sicherung? Nehmen Sie als Beispiel den Benutzerprozess, der eine write()-Anfrage an das Fuse-Dateisystem sendet. Das rote Feld rechts ist ein nativer ext4-Aufrufpfad, und der zusätzliche Pfad links ist der Pfad nach der Einführung von Fuse hinzugefügt:

Was bedeutet Linux-Sicherung?Gemäß den in diesem Dokument angegebenen Daten erfordert die von „getxattr“ in diesem Systemaufruf verwendete Anforderung das Doppelte der „Benutzer-Kernel“-Interaktion. Beim
sequentiellen Schreiben

wird im Vergleich zum nativen ext4-Dateisystem der E/A-Durchsatz um 27 % und das zufällige Schreiben um 44 % reduziert. Allerdings hat sich in den vielen Jahren seit der Geburt des Fuse-Dateisystems immer noch jeder viele Optimierungsmaßnahmen dafür ausgedacht. Beim sequentiellen Lesen und Schreiben kann beispielsweise so konzipiert werden, dass Anforderungen stapelweise an den Daemon-Prozess gesendet werden (zufälliges Lesen und Schreiben ist jedoch nicht geeignet). Es gibt auch die Zero-Copy-Technologie des

Splicing

. Der vom Linux-Kernel bereitgestellte Spleißmechanismus ermöglicht es dem Benutzer, die Daten der Speicherpuffer der beiden Kernel ohne Kopieren zu übertragen . Das Fuse-Kernelmodul überträgt Daten direkt an das ext4-Kernelmodul (Spleißen wird jedoch normalerweise für Anforderungen über 4 KB verwendet und nicht zum Lesen und Schreiben kleiner Datenmengen).

Welche Leistung kann das Sicherungsdateisystem nach diesen Bemühungen erzielen? Den in diesem Bericht aufgeführten Testergebnissen zufolge kann der Leistungsverlust von Fuse im Vergleich zu nativem ext4 im besten Fall auf weniger als 5 % kontrolliert werden, im schlimmsten Fall beträgt er jedoch 83 %. Gleichzeitig stieg auch die CPU-Ressourcenauslastung um 31 %.

Vom SD-Karten-Daemon, der zwischen Android v4.4 und v7.0 existierte, bis hin zu Ceph und GlusterFS in den letzten Jahren haben alle FUSE-basierte Implementierungen übernommen oder übernehmen dies derzeit. FUSE hat seine Nützlichkeit in Netzwerk-Dateisystem- und Virtualisierungsanwendungen bewiesen. Seine Entstehung und Entwicklung dienen nicht dazu, das im Kernel-Modus implementierte Dateisystem zu ersetzen, sondern als nützliche Ergänzung (theoretisch kann FUSE auch zur Implementierung des Root-Dateisystems verwendet werden, dies jedoch). wird nicht empfohlen, „kann“ und „sollte“ sind zwei verschiedene Dinge). Verwandte Empfehlungen: „

Linux-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas bedeutet Linux-Sicherung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was ist Linux OpenSSL?Nächster Artikel:Was ist Linux OpenSSL?