{"record":{"id":"afbac2b2fc60fb74","repo":"spacedriveapp/spacedrive","slug":"io-error-volume-may-be-offline","errorCode":null,"errorMessage":"IO error, volume may be offline: {}","messagePattern":"IO error, volume may be offline: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"core/src/ops/indexing/change_detection/handler.rs","lineNumber":85,"sourceCode":"\t\tmatch backend.exists(path).await {\n\t\t\tOk(exists) => Ok(exists),\n\t\t\tErr(VolumeError::NotMounted(_)) => {\n\t\t\t\ttracing::warn!(\n\t\t\t\t\t\"Volume not mounted when checking path existence: {}\",\n\t\t\t\t\tpath.display()\n\t\t\t\t);\n\t\t\t\tErr(anyhow::anyhow!(\n\t\t\t\t\t\"Volume not mounted, cannot verify path existence\"\n\t\t\t\t))\n\t\t\t}\n\t\t\tErr(VolumeError::Io(ref e)) if e.kind() == std::io::ErrorKind::NotFound => Ok(false),\n\t\t\tErr(VolumeError::Io(io_err)) => {\n\t\t\t\ttracing::warn!(\n\t\t\t\t\t\"IO error when checking path existence for {}: {}\",\n\t\t\t\t\tpath.display(),\n\t\t\t\t\tio_err\n\t\t\t\t);\n\t\t\t\tErr(anyhow::anyhow!(\n\t\t\t\t\t\"IO error, volume may be offline: {}\",\n\t\t\t\t\tio_err\n\t\t\t\t))\n\t\t\t}\n\t\t\tErr(e) => {\n\t\t\t\ttracing::warn!(\n\t\t\t\t\t\"Volume error when checking path existence for {}: {}\",\n\t\t\t\t\tpath.display(),\n\t\t\t\t\te\n\t\t\t\t);\n\t\t\t\tErr(e.into())\n\t\t\t}\n\t\t}\n\t} else {\n\t\tmatch tokio::fs::try_exists(path).await {\n\t\t\tOk(exists) => Ok(exists),\n\t\t\tErr(e) => {\n\t\t\t\ttracing::warn!(","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/spacedriveapp/spacedrive/blob/6dfeccf2113039e35f2ce735f945e70dc3e4ea45/core/src/ops/indexing/change_detection/handler.rs#L67-L103","documentation":"The volume backend hit a non-NotFound IO error while checking path existence: the volume appears mounted but its storage returned an error. Distinct from NotMounted - this points at unhealthy or slow storage such as a failing disk, a stalled network share, or a hung cloud driver. The handler warn-logs the path and the IO error, then aborts verification for that path.","triggerScenarios":"Failing HDD or USB sectors returning EIO; NFS or SMB timeout and stale handles; cloud-sync driver hangs; permission errors at the volume root.","commonSituations":"Aging external drives, unstable Wi-Fi behind network shares, oversubscribed cloud sync clients.","solutions":["Check system logs (dmesg or Event Viewer) for device or filesystem errors on that volume","Reconnect or remount the volume and retry the indexing job","For network volumes, verify connectivity and credentials to the server","Run storage health diagnostics if errors persist on one device"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"// Volume IO errors are often transient (network shares recovering).\nlet mut attempt = 0;\nloop {\n    attempt += 1;\n    match backend.exists(path).await {\n        Ok(exists) => break Ok(exists),\n        Err(VolumeError::Io(_)) if attempt < 3 => {\n            tokio::time::sleep(std::time::Duration::from_secs(2 * attempt as u64)).await;\n        }\n        Err(e) => break Err(e.into()),\n    }\n}","preventionTips":["Monitor disk health and replace failing volumes","Keep network shares reachable during indexing windows","Treat repeated IO errors on one volume as a hardware signal"],"tags":["indexing","volume","io","hardware"],"backgroundTag":null,"analyzedSha":"6dfeccf2113039e35f2ce735f945e70dc3e4ea45","analyzedAt":"2026-08-16T11:26:17.074Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}