juicedata/juicefs · error
path %s is not a mount point
Error message
path %s is not a mount point
What it means
After looking up the mount point's inode, `juicefs debug` compares it with `meta.RootInode` of the volume. If they differ, the given path is inside the JuiceFS filesystem but is not the mount point itself, so the command aborts with this error.
Source
Thrown at cmd/debug.go:520
return nil
}
func debug(ctx *cli.Context) error {
setup(ctx, 1)
mp := ctx.Args().First()
var inode uint64
if err := utils.WithTimeout(context.TODO(), func(context.Context) error {
var err error
if inode, err = utils.GetFileInode(mp); err != nil {
return fmt.Errorf("failed to lookup inode for %s: %s", mp, err)
}
return nil
}, 3*time.Second); err != nil {
logger.Warn(err.Error())
logger.Warnf("assuming the mount point is JuiceFS mount point")
} else {
if inode != uint64(meta.RootInode) {
return fmt.Errorf("path %s is not a mount point", mp)
}
}
amp, err := filepath.Abs(mp)
if err != nil {
return fmt.Errorf("failed to get absolute path: %v", err)
}
timestamp := time.Now().Format("20060102150405")
prefix := strings.Trim(strings.Join(strings.Split(amp, "/"), "-"), "-")
if runtime.GOOS == "windows" {
prefix = strings.ReplaceAll(prefix, ":", "")
}
outDir := ctx.String("out-dir")
currDir := filepath.Join(outDir, fmt.Sprintf("%s-%s", prefix, timestamp))
if err := os.MkdirAll(currDir, os.ModePerm); err != nil {
return fmt.Errorf("failed to create current out dir %s: %v", currDir, err)
}
View on GitHub (pinned to c9a67b23e8)
Solutions
- Run `juicefs debug` with the actual mount point root (e.g. `/jfs`), not a subdirectory.
- Find the mount point with `mount | grep juicefs` or `df -T` and use that path.
- If a bind mount of a subdirectory is intended, debug via the original mount point instead.
Example fix
// before $ juicefs debug /jfs/logs // after (use the mount root) $ juicefs debug /jfs
Defensive patterns
Strategy: validation
Validate before calling
func isMountRoot(mp string) bool {
root, err := os.FindMountPoint(mp) // or compare with `mount` output
return err == nil && root == mp
}
if !isMountRoot(mp) { return fmt.Errorf("%s is not a mount point root", mp) } Type guard
null
Try / catch
null
Prevention
- Always pass the mount point root, not subdirectories
- Find the mount point via `mount`/`df` first
- Don't confuse bind-mounted subdirs with the FUSE mount point
When it happens
Trigger: Running `juicefs debug <path>` where `<path>` is a subdirectory or file inside a JuiceFS mount rather than the mount point root, so its inode != `meta.RootInode`.
Common situations: User passes a nested directory like `/jfs/logs` instead of the mount root `/jfs`; confusion between the FUSE mount point and a bind-mounted subdirectory.
Understand the failure class
Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.
Related errors
- the clone DST path should be at the same mount point as the
- %s is not inside JuiceFS
- abs of %s: %s
- lookup inode for %s: %s
- %s already exists
AI-assisted analysis of juicedata/juicefs@c9a67b23e8 (2026-09-06).
Data as JSON: /api/errors/c48b030d7deac640.
Report an issue: GitHub.