{"record":{"id":"a307695f1939dc4a","repo":"ipfs/kubo","slug":"s-path-q-does-not-exist-w","errorCode":null,"errorMessage":"%s path (%q) does not exist: %w","messagePattern":"(.+?) path \\(%q\\) does not exist: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/ipfs/kubo/daemon.go","lineNumber":1291,"sourceCode":"\t\treturn err\n\t}\n\t// Extra space after \"MFS\" so \"mounted at:\" lines up with IPFS and\n\t// IPNS in the column above. Matches MountCmd's output formatter.\n\tfmt.Printf(\"IPFS mounted at: %s\\n\", fsdir)\n\tfmt.Printf(\"IPNS mounted at: %s\\n\", nsdir)\n\tfmt.Printf(\"MFS  mounted at: %s\\n\", mfsdir)\n\treturn nil\n}\n\nfunc checkFusePath(name, path string) error {\n\tif path == \"\" {\n\t\treturn fmt.Errorf(\"%s path cannot be empty\", name)\n\t}\n\n\tfileInfo, err := os.Stat(path)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn fmt.Errorf(\"%s path (%q) does not exist: %w\", name, path, err)\n\t\t}\n\t\treturn fmt.Errorf(\"error while inspecting %s path (%q): %w\", name, path, err)\n\t}\n\n\tif !fileInfo.IsDir() {\n\t\treturn fmt.Errorf(\"%s path (%q) is not a directory\", name, path)\n\t}\n\n\treturn nil\n}\n\nfunc maybeRunGC(req *cmds.Request, node *core.IpfsNode) (<-chan error, error) {\n\tenableGC, _ := req.Options[enableGCKwd].(bool)\n\tif !enableGC {\n\t\treturn nil, nil\n\t}\n\n\terrc := make(chan error)","sourceCodeStart":1273,"sourceCodeEnd":1309,"githubUrl":"https://github.com/ipfs/kubo/blob/329838acdfafae224582930457efe80aa217afc0/cmd/ipfs/kubo/daemon.go#L1273-L1309","documentation":"checkFusePath stats the configured mount path and, when os.Stat reports the path does not exist, returns \"%s path (%q) does not exist\" wrapping the stat error. FUSE mounts require the mountpoint to be a pre-existing directory (the OS refuses to mount over a nonexistent path), so kubo validates this before attempting the mount.","triggerScenarios":"Running `ipfs daemon --mount` where cfg.Mounts.IPFS/IPNS/MFS (or the corresponding --mount-* flags) name a directory that is absent on disk, e.g. /ipfs on a system where the mount dirs were never created, or a path on a drive that is not currently mounted.","commonSituations":"Containers/minimal installs that skip the conventional /ipfs and /ipns directories; typo in the configured mount path; network volume holding the mountpoint not yet mounted at daemon start; path removed after config was written.","solutions":["Create the missing directory: `sudo mkdir -p /ipfs /ipns` (match the path named in the error)","Or change config to an existing directory: `ipfs config Mounts.IPFS /some/existing/dir`","Verify the parent filesystem is mounted and the path exists: `ls -ld <path>` before starting the daemon","In containers, add a RUN mkdir step or an entrypoint that creates the mount directories before `ipfs daemon --mount`"],"exampleFix":"// before\n$ ipfs daemon --mount\nError: Mounts.IPFS path (\"/ipfs\") does not exist: stat /ipfs: no such file or directory\n// after\n$ sudo mkdir -p /ipfs /ipns\n$ ipfs daemon --mount","handlingStrategy":"validation","validationCode":"for _, p := range []string{cfg.Mounts.IPFS, cfg.Mounts.IPNS, cfg.Mounts.MFS} {\n\tif fi, err := os.Stat(p); err != nil || !fi.IsDir() {\n\t\tos.MkdirAll(p, 0o755) // or fail with a clear message before daemon start\n\t}\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Create /ipfs and /ipns (and MFS dir) as part of provisioning before starting the daemon","Add mount-dir creation to container entrypoints","Avoid configuring mount paths on removable/network volumes that may be unmounted at boot","Verify with `ls -ld <path>` before `ipfs daemon --mount`"],"tags":["go","daemon","fuse","mount","filesystem"],"backgroundTag":"mount-path-does-not-exist","analyzedSha":"329838acdfafae224582930457efe80aa217afc0","analyzedAt":"2026-09-03T18:30:52.135Z","contentChangedAt":"2026-09-03T18:30:52.135Z","schemaVersion":2},"datasetVersion":"2026-09-11T00:17:11.886Z"}