juicedata/juicefs · error
not a JuiceFS mount point
Error message
not a JuiceFS mount point
What it means
umount with --flush first reads the mount's config file via readConfig(mp) to locate the control file. If readConfig fails with an fs.ErrNotExist, the path is not a JuiceFS mount point (no .jfsconfig / control metadata exists there), and this error is returned. It distinguishes 'not our mount' from other config-read failures, which are wrapped separately.
Source
Thrown at cmd/umount.go:107
}
default:
return fmt.Errorf("OS %s is not supported", runtime.GOOS)
}
out, err := cmd.CombinedOutput()
if err != nil && len(out) != 0 {
err = errors.New(string(out))
}
return err
}
func umount(ctx *cli.Context) error {
setup(ctx, 1)
mp := ctx.Args().Get(0)
if ctx.Bool("flush") {
raw, err := readConfig(mp)
if err != nil {
if os.IsNotExist(err) {
return fmt.Errorf("not a JuiceFS mount point")
}
return errors.Wrap(err, "failed to read config")
}
var conf vfs.Config
if err = json.Unmarshal(raw, &conf); err != nil {
return errors.Wrap(err, "failed to parse config")
}
if conf.Chunk.Writeback {
stagingDir := path.Join(conf.Chunk.CacheDir, "rawstaging")
if err := waitWritebackComplete(stagingDir); err != nil {
return err
}
defer func() {
size, _ := fileSizeInDir(stagingDir)
clearLastLine()
if size == 0 {
fmt.Println("\rAll staging chunks are flushed")View on GitHub (pinned to c9a67b23e8)
Solutions
- Verify the path is an active JuiceFS mount (`mount | grep juicefs` or `cat <mp>/.control` presence).
- Check the path spelling — pass the exact mount point directory.
- If you don't need cache flushing, run `juicefs umount <mp>` without --flush.
- If the mount crashed but caches should be flushed, remount first or clean up manually.
Example fix
// before juicefs umount /mnt/nfs-data --flush // after juicefs umount /mnt/jfs --flush
Defensive patterns
Strategy: validation
Validate before calling
if _, err := os.Stat(filepath.Join(mp, ".stats")); err != nil {
return fmt.Errorf("%s is not a JuiceFS mount point", mp)
} Prevention
- Verify the target is a live JuiceFS mount with `mount | grep juicefs` before umount --flush
- Pass the exact mount point directory, not a subpath, volume name, or other filesystem's mount
- Drop --flush when you only need to detach and don't care about cache flush
When it happens
Trigger: `juicefs umount <path> --flush` where <path> is not a JuiceFS mount point, is a plain directory, or is a mount of another filesystem type.
Common situations: Typo in the mount point path; trying to flush-unmount an NFS/tmpfs mount; mount already crashed so config file was cleaned up; using the volume name instead of the mount path.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- OS %s is not supported
- failed to read config
- Unsupported ByteMultiple " + sMultiple
- wrong type
- random, backward, skip are only valid under read
AI-assisted analysis of juicedata/juicefs@c9a67b23e8 (2026-09-06).
Data as JSON: /api/errors/929bee6c11704be3.
Report an issue: GitHub.