Heim > Artikel > Betrieb und Instandhaltung > Was bedeutet Linux-Sicherung?
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.
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.
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“:
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.
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.
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:
#🎜 🎜#Diese Anfragen werden in eineAusstehende Warteschlange gestellt und auf die Antwort vom Daemon-Prozess gewartet, und der Benutzerprozess wird in den Ruhezustand versetzt:
#🎜🎜 ##🎜🎜 # 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_connAuf der Seite des Daemon-Prozesses gibt es noch ähnliche Vorgänge. Zu beachten ist der Unterschied zwischenFuse_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 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
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!