---
name: "mount_fusefs"
section: "8"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/mount_fusefs"
---

# mount\_fusefs(8)

mount a Fuse file system daemon

## NAME

**mount\_fusefs** – mount a Fuse file system daemon

## SYNOPSIS

**mount\_fusefs** \[**-A**\] \[**-S**\] \[**-v**\] \[**-D** *fuse\_daemon*\] \[**-O** *daemon\_opts*\] \[**-s** *special*\] \[**-m** *node*\] \[**-h**\] \[**-V**\] \[**-o** *option* *...*\] *special* *node* \[*fuse\_daemon* *...*\]

## DESCRIPTION

Basic usage is to start a fuse daemon on the given *special* file. In practice, the daemon is assigned a *special* file automatically, which can then be identified via [fstat(1)](/fstat/1.md). That special file can then be mounted by **mount\_fusefs**.

However, the procedure of spawning a daemon will usually be automated so that it is performed by **mount\_fusefs**. If the command invoking a given *fuse\_daemon* is appended to the list of arguments, **mount\_fusefs** will call the *fuse\_daemon* via that command. In that way the *fuse\_daemon* will be instructed to attach itself to *special*. From that on mounting goes as in the simple case. (See DAEMON MOUNTS.)

The *special* argument will normally be treated as the path of the special file to mount.

However, if *auto* is passed as *special*, then **mount\_fusefs** will look for a suitable free fuse device by itself.

Finally, if *special* is an integer it will be interpreted as the number of the file descriptor of an already open fuse device (used when the Fuse library invokes **mount\_fusefs**. See DAEMON MOUNTS).

The options are as follows:

- **-A**, **--reject-allow\_other**

  Prohibit the **allow\_other** mount flag. Intended for use in scripts and the [sudoers(5)](/sudoers/5.md) (*ports/security/sudo*) file.

- **-S**, **--safe**

  Run in safe mode (i.e., reject invoking a filesystem daemon).

- **-v**

  Be verbose.

- **-D**, **--daemon** *daemon*

  Call the specified *daemon*.

- **-O**, **--daemon\_opts** *opts*

  Add *opts* to the daemon's command line.

- **-s**, **--special** *special*

  Use *special* as special.

- **-m**, **--mountpath** *node*

  Mount on *node*.

- **-h**, **--help**

  Show help.

- **-V**, **--version**

  Show version information.

- **-o**

  Mount options are specified via **-o**. The following options are available (and also their negated versions, by prefixing them with “no”):

  - **allow\_other**

    Do not apply STRICT ACCESS POLICY. Only root can use this option.

  - **async**

    I/O to the file system may be done asynchronously. Writes may be delayed and/or reordered.

  - **default\_permissions**

    Enable traditional (file mode based) permission checking in kernel.

  - **intr**

    Allow signals to interrupt operations that are blocked waiting for a reply from the server. When this option is in use, system calls may fail with EINTR whenever a signal is received.

  - **max\_read**=*n*

    Limit size of read requests to *n*.

  - **neglect\_shares**

    Do not refuse unmounting if there are secondary mounts.

  - **private**

    Refuse shared mounting of the daemon. This is the default behaviour, to allow sharing, explicitly use **-o** **noprivate**.

  - **push\_symlinks\_in**

    Prefix absolute symlinks with the mountpoint.

  - **subtype**=*fsname*

    Suffix *fsname* to the file system name as reported by [statfs(2)](/statfs/2.md). This option can be used to identify the file system implemented by *fuse\_daemon*.

  - **auto\_unmount**

    Instructs the kernel to unmount the mount point when the FUSE device gets closed. This ensures a proper cleanup if the FUSE daemon exits abnormally.

Besides the above mount options, there is a set of pseudo-mount options which are supported by the Fuse library. One can list these by passing **-h** to a Fuse daemon. Most of these options only have effect on the behavior of the daemon (that is, their scope is limited to userspace). However, there are some which do require in-kernel support. Currently the options supported by the kernel are:

- **direct\_io**

  Bypass the buffer cache system.

- **kernel\_cache**

  By default cached buffers of a given file are flushed at each [open(2)](/open/2.md). This option disables this behaviour.

## DAEMON MOUNTS

Usually users do not need to use **mount\_fusefs** directly, as the Fuse library enables Fuse daemons to invoke **mount\_fusefs**. That is,

```
fuse_daemon device mountpoint
```

has the same effect as

```
mount_fusefs auto mountpoint fuse_daemon
```

This is the recommended usage when you want basic usage (eg, run the daemon at a low privilege level but mount it as root).

## STRICT ACCESS POLICY

The strict access policy for Fuse filesystems lets one use the filesystem only if the filesystem daemon has the same credentials (uid, real uid, gid, real gid) as the user.

This is applied for Fuse mounts by default and only root can mount without the strict access policy (i.e., the **allow\_other** mount option).

This is to shield users from the daemon “spying” on their I/O activities.

Users might opt to willingly relax strict access policy (as far as they are concerned) by doing their own secondary mount (See SHARED MOUNTS).

## SHARED MOUNTS

A Fuse daemon can be shared (i.e., mounted multiple times). When doing the first (primary) mount, the spawner and the mounter of the daemon must have the same uid, or the mounter should be the superuser.

After the primary mount is in place, secondary mounts can be done by anyone unless this feature is disabled by **private**. The behaviour of a secondary mount is analogous to that of symbolic links: they redirect all filesystem operations to the primary mount.

Doing a secondary mount is like signing an agreement: by this action, the mounter agrees that the Fuse daemon can trace her I/O activities. From then on she is not banned from using the filesystem (either via her own mount or via the primary mount), regardless whether **allow\_other** is used or not.

The device name of a secondary mount is the device name of the corresponding primary mount, followed by a '#' character and the index of the secondary mount; e.g., */dev/fuse0#3*.

## SECURITY

System administrators might want to use a custom mount policy (ie., one going beyond the *vfs.usermount* sysctl). The primary tool for such purposes is [sudo(8)](/sudo/8.md) (*ports/security/sudo*). However, given that **mount\_fusefs** is capable of invoking an arbitrary program, one must be careful when doing this. **mount\_fusefs** is designed in a way such that it makes that easy. For this purpose, there are options which disable certain risky features ( **-S** and **-A**), and command line parsing is done in a flexible way: mixing options and non-options is allowed, but processing them stops at the third non-option argument (after the first two have been utilized as device and mountpoint). The rest of the command line specifies the daemon and its arguments. (Alternatively, the daemon, the special and the mount path can be specified using the respective options.) Note that **mount\_fusefs** ignores the environment variable POSIXLY\_CORRECT and always behaves as described.

In general, to be as scripting / [sudoers(5)](/sudoers/5.md) (*ports/security/sudo*) friendly as possible, no information has a fixed position in the command line, but once a given piece of information is provided, subsequent arguments/options cannot override it (with the exception of some non-critical ones).

## ENVIRONMENT

- MOUNT\_FUSEFS\_SAFE

  This has the same effect as the **-S** option.

- MOUNT\_FUSEFS\_VERBOSE

  This has the same effect as the **-v** option.

- MOUNT\_FUSEFS\_IGNORE\_UNKNOWN

  If set, **mount\_fusefs** will ignore unknown mount options.

- MOUNT\_FUSEFS\_CALL\_BY\_LIB

  Adjust behavior to the needs of the FUSE library. Currently it effects help output.

Although the following variables do not have any effect on **mount\_fusefs** itself, they affect the behaviour of fuse daemons:

- FUSE\_DEV\_NAME

  Device to attach. If not set, the multiplexer path */dev/fuse* is used.

- FUSE\_DEV\_FD

  File descriptor of an opened Fuse device to use. Overrides FUSE\_DEV\_NAME.

- FUSE\_NO\_MOUNT

  If set, the library will not attempt to mount the filesystem, even if a mountpoint argument is supplied.

## FILES

- */dev/fuse*

  Fuse device with which the kernel and Fuse daemons can communicate.

- */dev/fuse*

  The multiplexer path. An [open(2)](/open/2.md) performed on it automatically is passed to a free Fuse device by the kernel (which might be created just for this puprose).

## EXAMPLES

Mount the example filesystem in the Fuse distribution (from its directory): either

```
./fusexmp /mnt/fuse
```

or

```
mount_fusefs auto /mnt/fuse ./fusexmp
```

Doing the same in two steps, using */dev/fuse0*:

```
FUSE_DEV_NAME=/dev/fuse ./fusexmp &&
```

```
mount_fusefs /dev/fuse /mnt/fuse
```

A script wrapper for fusexmp which ensures that **mount\_fusefs** does not call any external utility and also provides a hacky (non race-free) automatic device selection:

```
#!/bin/sh -e
```

```
FUSE_DEV_NAME=/dev/fuse fusexmp
```

```
mount_fusefs -S /dev/fuse /mnt/fuse “$@”
```

## SEE ALSO

[fstat(1)](/fstat/1.md), [mount(8)](/mount/8.md), [sudo(8)](/sudo/8.md) (*ports/security/sudo*), [umount(8)](/umount/8.md)

## HISTORY

**mount\_fusefs** was written as the part of the FreeBSD implementation of the Fuse userspace filesystem framework (see **https://github.com/libfuse/libfuse**) and first appeared in the *sysutils/fusefs-kmod* port, supporting FreeBSD 6.0. It was added to the base system in FreeBSD 10.0.

## CAVEATS

This user interface is FreeBSD specific. Secondary mounts should be unmounted via their device name. If an attempt is made to unmount them via their filesystem root path, the unmount request will be forwarded to the primary mount path. In general, unmounting by device name is less error-prone than by mount path (although the latter will also work under normal circumstances).

If the daemon is specified via the **-D** and **-O** options, it will be invoked via [system(3)](/system/3.md), and the daemon's command line will also have an “&” control operator appended, so that we do not have to wait for its termination. You should use a simple command line when invoking the daemon via these options.

## BUGS

*special* is treated as a multiplexer if and only if it is literally the same as *auto* or */dev/fuse*. Other paths which are equivalent with */dev/fuse* (eg., */../dev/fuse*) are not.
