{"record":{"id":"c48b030d7deac640","repo":"juicedata/juicefs","slug":"path-s-is-not-a-mount-point","errorCode":null,"errorMessage":"path %s is not a mount point","messagePattern":"path (.+?) is not a mount point","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/debug.go","lineNumber":520,"sourceCode":"\treturn nil\n}\n\nfunc debug(ctx *cli.Context) error {\n\tsetup(ctx, 1)\n\tmp := ctx.Args().First()\n\tvar inode uint64\n\tif err := utils.WithTimeout(context.TODO(), func(context.Context) error {\n\t\tvar err error\n\t\tif inode, err = utils.GetFileInode(mp); err != nil {\n\t\t\treturn fmt.Errorf(\"failed to lookup inode for %s: %s\", mp, err)\n\t\t}\n\t\treturn nil\n\t}, 3*time.Second); err != nil {\n\t\tlogger.Warn(err.Error())\n\t\tlogger.Warnf(\"assuming the mount point is JuiceFS mount point\")\n\t} else {\n\t\tif inode != uint64(meta.RootInode) {\n\t\t\treturn fmt.Errorf(\"path %s is not a mount point\", mp)\n\t\t}\n\t}\n\n\tamp, err := filepath.Abs(mp)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to get absolute path: %v\", err)\n\t}\n\ttimestamp := time.Now().Format(\"20060102150405\")\n\tprefix := strings.Trim(strings.Join(strings.Split(amp, \"/\"), \"-\"), \"-\")\n\tif runtime.GOOS == \"windows\" {\n\t\tprefix = strings.ReplaceAll(prefix, \":\", \"\")\n\t}\n\toutDir := ctx.String(\"out-dir\")\n\tcurrDir := filepath.Join(outDir, fmt.Sprintf(\"%s-%s\", prefix, timestamp))\n\tif err := os.MkdirAll(currDir, os.ModePerm); err != nil {\n\t\treturn fmt.Errorf(\"failed to create current out dir %s: %v\", currDir, err)\n\t}\n","sourceCodeStart":502,"sourceCodeEnd":538,"githubUrl":"https://github.com/juicedata/juicefs/blob/c9a67b23e8e08ec23ec331aa6f1675e2319e921c/cmd/debug.go#L502-L538","documentation":"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.","triggerScenarios":"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`.","commonSituations":"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.","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."],"exampleFix":"// before\n$ juicefs debug /jfs/logs\n// after (use the mount root)\n$ juicefs debug /jfs","handlingStrategy":"validation","validationCode":"func isMountRoot(mp string) bool {\n  root, err := os.FindMountPoint(mp) // or compare with `mount` output\n  return err == nil && root == mp\n}\nif !isMountRoot(mp) { return fmt.Errorf(\"%s is not a mount point root\", mp) }","typeGuard":"null","tryCatchPattern":"null","preventionTips":["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"],"tags":["cli","filesystem","mount-point"],"backgroundTag":"invalid-argument-value","analyzedSha":"c9a67b23e8e08ec23ec331aa6f1675e2319e921c","analyzedAt":"2026-09-06T17:55:48.476Z","contentChangedAt":"2026-09-06T17:55:48.476Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}