FUSE¶
Siehe auch
- Verwandte Artikel
- Offizielle Dokumentation
man mount.fuse3,man fusermount3
FUSE (Filesystem in Userspace) ist kein eigenes Dateisystem, sondern ein Kernel-Mechanismus, mit dem ein Dateisystem als normaler Prozess im User Space laufen kann statt als Kernel-Modul. Damit lassen sich Dateisysteme bereitstellen, ohne Kernel-Code zu schreiben, und je nach Konfiguration auch ohne root-Rechte mounten.
Funktionsweise¶
Drei Teile spielen zusammen:
Das Kernel-Modul
fusestellt das Gerät/dev/fusebereit und meldet den Dateisystem-Typ beim VFS an.Ein Userspace-Prozess (gegen die Bibliothek
libfusegelinkt) implementiert die eigentliche Dateisystem-Logik.Greift ein Programm auf den Mountpoint zu, reicht der Kernel die VFS-Operation (open, read, readdir und so weiter) über
/dev/fusean den Userspace-Prozess weiter, der sie beantwortet.
Der Vorteil: Die Dateisystem-Logik liegt im User Space, ein Absturz reisst nicht den Kernel mit, und das Mounten ist über das setuid-Hilfsprogramm fusermount3 auch unprivilegiert möglich. Der Preis sind die zusätzlichen Kontextwechsel zwischen Kernel und Userspace, die FUSE-Dateisysteme langsamer machen als ein im Kernel implementiertes Dateisystem.
Beispiele für FUSE-basierte Dateisysteme¶
sshfs: ein entferntes Verzeichnis per SSH einbinden
s3fs: S3-Object-Storage als Verzeichnis
rclone mount: Cloud-Storage (S3, WebDAV, Google Drive und weitere) als Verzeichnis
GlusterFS: Mount per Modul
glusterfs-fuse. KVM und oVirt können Gluster auch direkt per API ohne FUSE anbinden.macFUSE: bringt FUSE auf macOS, etwa um NTFS-Volumes einzubinden
Ein FUSE-Dateisystem einbinden¶
Am Beispiel von sshfs. Unter RHEL und Rocky liegt das Paket in EPEL (fuse-sshfs), die FUSE-Laufzeit (fuse3) ist im Basissystem vorhanden:
dnf install --assumeyes epel-release
dnf install --assumeyes fuse-sshfs
# mount a remote directory over SSH
mkdir --parents /mnt/remote
sshfs linuxfabrik@server.example.com:/srv/data /mnt/remote
# unmount (no root required for an own FUSE mount)
fusermount3 -u /mnt/remote
Dauerhaft über die /etc/fstab. Der Dateisystem-Typ ist fuse.<programm>, hier fuse.sshfs; _netdev verzögert das Mounten bis das Netz steht:
linuxfabrik@server.example.com:/srv/data /mnt/remote fuse.sshfs _netdev,IdentityFile=/home/linuxfabrik/.ssh/id_ed25519,reconnect 0 0
Zugriff für andere Benutzer¶
Standardmässig sieht nur der Benutzer, der das FUSE-Dateisystem gemountet hat, dessen Inhalt, auch nicht root. Sollen andere Benutzer zugreifen, braucht es die Mount-Option allow_other. Diese ist nur erlaubt, wenn in /etc/fuse.conf die Direktive user_allow_other gesetzt ist:
user_allow_other
sshfs linuxfabrik@server.example.com:/srv/data /mnt/remote -o allow_other
Troubleshooting¶
Transport endpoint is not connectedDer Userspace-Prozess des FUSE-Mounts ist abgestürzt oder die Verbindung (bei sshfs) ist weggebrochen; der Mountpoint bleibt als Leiche zurück. Mit
fusermount3 -u /mnt/remoteaushängen (notfallsumount --lazy) und neu mounten. Bei sshfs hilft die Optionreconnectgegen abbrechende Verbindungen.fusermount3: option allow_other only allowed if 'user_allow_other' is setDie Direktive
user_allow_otherfehlt in/etc/fuse.conf. Setzen und erneut mounten.