astrid-runtime/astrid · error

FUSE mount completed but is absent from the Linux mount tabl

Error message

FUSE mount completed but is absent from the Linux mount table

What it means

This error means the fuser `Session` was created and spawned successfully, but a follow-up check against the Linux mount table (/proc/mounts via `mountinfo_contains`) could not find the mountpoint. The library treats a mount that the kernel mount table does not acknowledge as failed, because unmounted-but-spawned sessions would silently serve nothing. It is thrown from `start_session` in crates/astrid-storage-provider-fuse/src/filesystem.rs:65 right after `session.spawn()`.

Source

Thrown at crates/astrid-storage-provider-fuse/src/filesystem.rs:65

    };
    let mut config = Config::default();
    config.mount_options = vec![
        MountOption::FSName(info.volume_name),
        MountOption::Subtype("astrid".to_owned()),
        mount_option,
        MountOption::DefaultPermissions,
        MountOption::NoDev,
        MountOption::NoSuid,
        MountOption::NoExec,
    ];
    config.acl = SessionACL::Owner;
    config.n_threads = Some(1);
    config.clone_fd = false;
    let session = Session::new(filesystem, mountpoint, &config)
        .with_context(|| format!("mount Astrid FUSE filesystem at {}", mountpoint.display()))?;
    let background = session.spawn()?;
    if !crate::mountpoint::mountinfo_contains(mountpoint)? {
        bail!("FUSE mount completed but is absent from the Linux mount table");
    }
    Ok(background)
}

/// FUSE filesystem bound to one immutable owner, access mode, and lease token.
pub(crate) struct AstridFuseFilesystem {
    callback: CallbackClient,
    inodes: Mutex<InodeTable>,
    read_only: bool,
    uid: u32,
    gid: u32,
}

impl AstridFuseFilesystem {
    pub(crate) fn new(lease: StorageMountLeaseV1) -> Self {
        let read_only = lease.access == StorageProviderAccessV1::ReadOnly;
        let (uid, gid) = owner_ids();
        let mut inodes = InodeTable::default();

View on GitHub (pinned to affd8760f4)

Solutions

  1. Verify the environment supports FUSE: /dev/fuse exists and the fuse kernel module is loaded (modprobe fuse).
  2. Check the mountpoint still exists and is the same inode between mount and verification.
  3. Run outside restricted containers or grant the container FUSE capabilities (--device /dev/fuse, CAP_SYS_ADMIN as needed).
  4. Check /proc/mounts and kernel logs (dmesg) for the fuse mount entry and any mount errors.

Example fix

// environment check before mounting
// before
let bg = start_session(fs, &mp)?;
// after
if !Path::new("/dev/fuse").exists() {
    bail!("FUSE unavailable: /dev/fuse missing");
}
let bg = start_session(fs, &mp)?;
Defensive patterns

Strategy: validation

Validate before calling

if !Path::new("/dev/fuse").exists() {
    return Err(anyhow!("FUSE unavailable: /dev/fuse missing"));
}
if !mountpoint.exists() { return Err(anyhow!("mountpoint missing")); }

Try / catch

match start_session(fs, &mp) {
    Err(e) if e.to_string().contains("absent from the Linux mount table") => {
        // check /dev/fuse, container privileges, remount
    }
    r => r?,
}

Prevention

When it happens

Trigger: Calling `start_session` on Linux where `Session::spawn` returns Ok but `crate::mountpoint::mountinfo_contains(mountpoint)` returns false — the kernel never registered the FUSE mount at that path.

Common situations: FUSE kernel module not loaded (/dev/fuse unavailable or fuser falling back oddly); the mountpoint raced away or was replaced between mount and the mountinfo check; container environments without FUSE privileges where fuser reports success spuriously; stale /proc/mounts visibility inside namespaces.

Understand the failure class

Background: "unsupported platform" / "not supported on this platform" errors: what they mean and how to fix them — this error's family across 47 libraries.

Related errors


AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09). Data as JSON: /api/errors/ecf9a051872973f5. Report an issue: GitHub.