Troubleshooting¶
Container unhealthy / won't start¶
- Check
docker logs nzbdavfor migration or backend health failures. - Ensure
CONFIG_PATH(/config) exists as a directory and is writable byPUID/PGID. Startup now fails before migrations with a message that names the path and expectedPUID/PGIDinstead of a later SQLite/EF error. /config/session.keyis the frontend cookie-signing secret and is mode0600. It must be owned byPUID/PGID; supervisors that chown only selected config files must include it. Fix that file directly rather than recursively chowningblobs/.- A
/configpath inside the image is not proof a persistent volume is mounted. Confirm the Composevolumes:mapping on the host. - Frontend
/healthzshould pass during long migrations; backend/healthmust eventually succeed.
Locked out of the web UI¶
If you forgot the administrator username or password, reset the local admin account
with the RESET_ADMIN_PASSWORD environment variable:
- Add
RESET_ADMIN_PASSWORD: "true"to your Composeenvironment(or pass-e RESET_ADMIN_PASSWORD=truetodocker run). - Restart the container.
- Visit the UI — you will land on the onboarding page to set new credentials.
- Remove
RESET_ADMIN_PASSWORDfrom your environment. - Restart again. If you skip this step, the next restart deletes the admin account again.
While RESET_ADMIN_PASSWORD remains set, the UI shows a persistent warning banner
and the backend logs a matching warning on every startup.
Security
Anyone who can reach the UI while no admin account exists can create the new administrator account. Re-register promptly after the reset and remove the variable before the next restart.
Manual reset (without restarting)¶
If you have shell access to /config and prefer not to restart:
Then visit the UI and complete onboarding. Queue, history, settings, and WebDAV credentials are untouched.
Sign-in fails with "The sign-in request could not be verified"¶
The login form posts to the same origin the page was loaded from. The request is rejected with
this message when the browser's Origin header does not match the host InfiniDysk believes it
is serving, and the frontend logs a throttled
Action request origin rejected. Request URL: …, Origin: … warning.
- Behind a reverse proxy: the container sees its internal
Host(for examplenzbdav:3000) while the browser sends the public origin. Either enable Settings → General → Trust reverse-proxy headers (or setTRUST_PROXY=1) and have the proxy sendX-Forwarded-HostandX-Forwarded-Proto, or set Base URL to the public HTTPS address. - Direct access (no proxy): Base URL and Trust reverse-proxy headers do not restrict direct
sign-in;
http://<lan-ip>:3000keeps working alongside the proxied address. If direct sign-in still fails, something between the browser and the container is injectingX-Forwarded-*headers (tunnels, NAS app portals, ingress controllers). Route those connections through the proxy that sets correct headers, or disable proxy trust for them. - Cross-site requests: a form submitted from a different origin is rejected on purpose (CSRF protection).
Streaming readiness (/ready) since 0.10.0¶
The backend readiness endpoint reports whether InfiniDysk can make progress on new streams. It returns
503 Service Unavailable when Article RAM remains at least 90% leased with no active reads for 30
seconds. A high Article RAM value while reads are active is normal backpressure and remains ready.
/ready is separate from the cheap liveness endpoints (/health on the backend and /healthz on
the frontend). The default container healthcheck stays on /healthz, so temporary streaming load
does not trigger restarts. To opt into readiness for routing or monitoring, probe the backend port:
healthcheck:
test: ["CMD-SHELL", "curl -fsSL http://localhost:8080/ready > /dev/null || exit 1"]
interval: 30s
timeout: 5s
retries: 3
start_period: 60s
Use /ready as a restart trigger only if restarting a streaming-wedged container is the intended
policy. This check detects a stuck in-flight article budget; it does not test provider connectivity.
Queue coordinator liveness (/health) since 1.3.0¶
The backend /health endpoint reports 503 Service Unavailable if the queue coordinator fails or
exits unexpectedly. The backend also exits with a nonzero code, allowing the documented Compose
restart: unless-stopped policy to restart the container automatically. Previously, the SAB API and
health endpoint could continue responding while queued items no longer progressed.
/ready continues to report streaming admission readiness. The default frontend /healthz remains
a lightweight process endpoint; queue-coordinator recovery does not depend on a healthcheck watcher
because the backend process exits on failure.
WebDAV or playback fails¶
- Confirm WebDAV username/password.
- Behind a proxy: TLS,
/wsUpgrade,SECURE_COOKIES, Base URL /TRUST_PROXY. - Overview Active Reads: unexpected traffic → rclone VFS or media-server scans.
- Try disabling segment cache or adjusting Max Download Connections — WebDAV.
Activity totals since 1.4.3¶
The Overview Activity summary uses the selected time window:
- Successful reads counts article retrievals reported successful, including segment-cache hits. It excludes recorded misses and errors, but is not a count of unique articles, completed files, or successful playback sessions.
- Peak download is the highest average Usenet download rate among the displayed buckets: downloaded bytes divided by bucket duration. It is not an instantaneous peak. Older folded all-time history is excluded, and N/A means no chart data. This metric works with or without segment caching, including rclone installations.
- Errors counts attempt errors other than provider misses. A retry or fallback can still recover the request.
- Served counts bytes served by client read sessions ending in the window.
The client/app chart lines and legend count attempts, including recorded misses and errors. Their totals therefore need not match Successful reads. Historical availability probes contribute failures but not successful checks, so these totals must not be used to calculate an availability rate.
Provider miss attempts remain in Error breakdown and bucket details. Retries and multiple providers can produce several misses for one article that is eventually retrieved. Negative-cache skips do not add misses. Unexpected BODY responses are recorded as protocol errors going forward; existing history is not rewritten.
Playback slowed but nothing failed¶
When streams buffer without hard errors, read support-pack latency phases first
(metrics/recent.json → latency24Hours):
- High
responsewith lowpool-wait/permit-wait→ provider/server latency. - High provider
pool-wait→ that provider's connections are saturated or churning. - High streaming/queue
permit-wait→ that workload's configured connection cap is saturated. - High stream-trace
consumerWaitMswith low values in all three phases → prefetch geometry or consumer pacing — compare withbodyDrainMson RangeEnd events.
Generate a pack from Settings → Support — Technical support pack.
*Arr won't import¶
- Paths must match exactly between InfiniDysk completed path and *Arr containers.
- Symlinks: rclone mount healthy?
lsshowscompleted-symlinksand.ids? - STRM: Base URL reachable from Emby/Jellyfin?
- Check Automatic Queue Management rules — Arrs.
403 / 405 on MKCOL, PUT or DELETE¶
The mount is a read-only virtual filesystem — /content, /completed-symlinks and /.ids
serve data streamed from Usenet and accept no writes. Refused writes are expected, not a fault:
403 Forbidden— a client tried to create, copy, move or upload something.405 Method Not Allowed—MKCOLtargeted a directory that already exists.
Logs show one aggregated warning per read-only path every 5 minutes (Refused to create item under
read-only path …), with per-attempt detail at LOG_LEVEL=debug. InfiniDysk cannot stop a client from
re-attempting, so fix it at the source — the warning and the access-log line both name the client IP
and User-Agent:
- Media servers (Emby/Jellyfin/Plex/Kodi): turn off saving metadata, artwork or
.nfo/.srtsidecars into media folders, or scan your library rather than the InfiniDysk mount. - *Arr: disable metadata/extra-file writing for the affected root folder.
- rclone: mount with
--read-onlyso it stops probing for writability.
addurl SSRF / private indexer since 0.8.0¶
Allow Docker DNS or LAN hosts under Trusted local hosts — SABnzbd API.
Why did files disappear?¶
See Deletion audit — history retention ≠ deleting mounts; orphan cleanup and Arr actions can remove content. History rows disappearing after import are usually the Arr or a /completed-symlinks folder delete, not InfiniDysk deleting the file. If Remove Orphaned Files lists imported files, check that Library Directory* is your organized library root, not the rclone mount.
Plex marks old episodes as newly added since 1.3.0¶
InfiniDysk does not change WebDAV Last-Modified after import, and it does not issue ETags. Plex keys library items by file path, so an old episode showing up as newly added means Plex deleted its library row and then re-created it on a later scan.
The most common cause on an rclone mount of /content is a transient scan-time failure (container restart, rclone re-list after vfs/forget, lazy RAR size correction, proxy timeout) combined with Plex's Empty trash automatically after every scan. The path is briefly unavailable, trash collection removes the item, and the next clean scan re-adds it — triggering intro/credits analysis again.
Quick check: compare the file's mtime in the mount (ls -l) with Plex's added date. An old mtime with a new added date means the server never recreated the file. For the full checklist see Plex “newly added” churn on /content mounts.
Provider / missing articles¶
- Circuit breaker may pause a bad provider — check Usenet settings and Overview.
- Storage groups skip sibling resellers after a miss — only group identical upstream storage.
- Health/repairs can replace unhealthy library items — Health and repairs.
Still stuck¶
Generate a technical support pack from Settings → Support, review it for personal paths and names, then open an issue. For local stream debugging, see Contributing.