You will mount a userspace filesystem at a directory, verify that the kernel sees it, and unmount it without leaving a dead mountpoint behind. The examples use the fuse3 package version 3.14.0-5build1 installed on this machine. Allow about 10 minutes if the filesystem program is already installed and configured. mount.fuse3 does not provide a filesystem by itself: replace the example source and filesystem type with values documented by the FUSE filesystem you are actually using.
First check the helper syntax and create a directory you own. The directory must exist before mounting. Creating a directory below your home directory needs no elevated privilege.
mount.fuse3 --help
mkdir -p "$HOME/mnt/example-fuse"
test -d "$HOME/mnt/example-fuse" && echo "mountpoint ready"
On this installation, the help text starts with:
usage: mount.fuse3 type#[source] destination [-t type] [-o opt[,opts...]]
The first argument is a FUSE type and optional source in the form type#source; the final positional argument is the destination. The filesystem-specific program normally supplies or interprets the source value, so do not copy the literal type#[source].
FUSE mounts are restricted to the filesystem owner by default. That is a useful boundary: other users, including root, cannot access the mounted contents unless the filesystem is mounted with a broader access option. Read the policy file before choosing one of those options.
grep -E '^[[:space:]]*(mount_max|user_allow_other)([[:space:]]|=|$)' /etc/fuse.conf || true
mount_max = NNN limits the number of mounts available to non-root users, with a documented default of 1000. The user_allow_other line permits non-root users to request allow_other or allow_root. Editing /etc/fuse.conf changes host-wide mount policy and requires elevated privilege. Treat that as an administrator change, not as a routine fix for a failed mount.
Security boundary: allow_other permits all users, including root, to access the mounted filesystem. allow_root permits the filesystem owner and root, and cannot be combined with allow_other. Only use either option when the filesystem's contents and its permission handling are suitable for that audience.
Use the command supplied by the filesystem's own documentation, adapting the type, source, destination and options. This shape is illustrative; the placeholder filesystem will not work as written.
mount.fuse3 example#[SOURCE] "$HOME/mnt/example-fuse" \
-o ro,default_permissions
ro requests a read-only mount, while default_permissions makes the kernel perform normal Unix permission checks as well as any checks performed by the filesystem. The latter is generally appropriate for filesystems that do not implement permission checks themselves. FUSE mounts are otherwise given nodev,nosuid by default; a privileged user can override those generic mount defaults, so do not add dev or suid casually.
A successful mount normally returns no output. Verify it without changing state:
findmnt --target "$HOME/mnt/example-fuse"
ls -la "$HOME/mnt/example-fuse"
The mount record may show a fuse.TYPE filesystem type when the kernel supports subtypes. You can set a readable source and subtype with options such as fsname=example and subtype=example, but these are metadata choices and do not replace the filesystem program's required arguments.
High-level libfuse filesystems cache directory lookups and attributes. The local defaults are one second for both name lookups and attributes, and zero seconds for negative lookups, meaning a failed lookup is not cached by default. Fractions are accepted, for example entry_timeout=2.8.
Be cautious with kernel_cache. It keeps file data cached between opens and is intended for data that cannot change outside the mounted filesystem. It is not suitable for a network or other intermediate filesystem. auto_cache is the less absolute alternative: it invalidates cached data on open when the size or modification time changed. These settings trade freshness for performance and should be selected by the filesystem's operator, not added because a mount example happens to contain them.
Unmount with the FUSE helper as the same user who owns the mount:
fusermount3 -u "$HOME/mnt/example-fuse"
findmnt --target "$HOME/mnt/example-fuse" || echo "unmounted"
Do not remove the mountpoint directory while it is mounted. If the filesystem process dies first, the mountpoint can become inaccessible because the process normally has to release the mount. The auto_unmount option asks libfuse to release it when the process terminates, but it is not a universal substitute for orderly shutdown. If an ordinary unmount reports that the target is busy, stop programs using the directory, check with fuser -vm "$HOME/mnt/example-fuse", then retry. The -z lazy-unmount option exists on fusermount3, but it changes when the kernel detaches the mount and should be reserved for a deliberate recovery step.
If a mount fails, check the filesystem program's error output, confirm that the mountpoint is writable by the invoking user, and check the mount count and user_allow_other policy. Non-root users cannot mount on a sticky directory they do not own, such as the usual /tmp directory. A privileged-only option may also explain the failure: blkdev is privileged, while setuid=USER requires root or both CAP_SETUID and CAP_SETGID. drop_privileges requires root or at least CAP_SYS_ADMIN and CAP_SETPCAP, then starts the filesystem without capabilities that could be reacquired.
mount.fuse3 --help confirms the installed helper and syntax.findmnt --target shows the expected mounted filesystem.fusermount3 -u succeeds and the destination is no longer mounted.