FUSE

Siehe auch

Verwandte Artikel
Offizielle Dokumentation
  • man mount.fuse3, man fusermount3

  • libfuse

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 fuse stellt das Gerät /dev/fuse bereit und meldet den Dateisystem-Typ beim VFS an.

  • Ein Userspace-Prozess (gegen die Bibliothek libfuse gelinkt) 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/fuse an 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:

/etc/fstab
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:

/etc/fuse.conf
user_allow_other
sshfs linuxfabrik@server.example.com:/srv/data /mnt/remote -o allow_other

Troubleshooting

Transport endpoint is not connected

Der 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/remote aushängen (notfalls umount --lazy) und neu mounten. Bei sshfs hilft die Option reconnect gegen abbrechende Verbindungen.

fusermount3: option allow_other only allowed if 'user_allow_other' is set

Die Direktive user_allow_other fehlt in /etc/fuse.conf. Setzen und erneut mounten.