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
- Verify the environment supports FUSE: /dev/fuse exists and the fuse kernel module is loaded (modprobe fuse).
- Check the mountpoint still exists and is the same inode between mount and verification.
- Run outside restricted containers or grant the container FUSE capabilities (--device /dev/fuse, CAP_SYS_ADMIN as needed).
- 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
- Verify /dev/fuse and the fuse kernel module exist before mounting
- Grant FUSE privileges in containers (--device /dev/fuse)
- Re-read /proc/mounts if mount table visibility lags; avoid racing mountpoint removal
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
- mountpoint is not empty: {}
- read FUSE volume metadata: {error:?}
- lazy unmount {}: {error}
- legacy source crosses a mount or device boundary: {}
- mountpoint is already registered: {}
AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09).
Data as JSON: /api/errors/ecf9a051872973f5.
Report an issue: GitHub.