Back to blog
FILE 0xDD·THE ARR-STACK DISK-FULL TRAP

The arr-stack disk-full trap

May 7, 2026 · homelab, qbittorrent, debugging

The home media pipeline went quiet. Nothing new was finishing. CPU on the torrent boxes was high but throughput was zero. Time to actually look at why.

What was happening

qBittorrent on the movies and TV containers were each running at 60–80% CPU. Stalls everywhere — torrents stuck in metadata fetch, downloads sitting at 0 B/s, error counts climbing. The arr apps were healthy and connected. The indexers were healthy. So what was qBittorrent so mad about?

What I found

The download volume on the NAS was at 92% — 16 TB used of 18 TB total. That number is the answer to a lot of qBittorrent symptoms that look like network or peer problems.

When qBittorrent can't preallocate space for a new torrent piece, it doesn't fail loudly. It marks the torrent as errored, pauses, then retries on the next pass. The retries compound. The CPU spike was qBittorrent shoveling thousands of allocation attempts per minute against a nearly-full volume.

The state breakdown on movies alone:

State Count
stalledUP 1,116
stalledDL 160
uploading 50
metaDL 33
downloading 21
error 7

1,116 completed-but-seeding torrents holding 13.76 TB. The "active downloads" capacity was being burned by dead torrents the system couldn't even start writing.

The fix

Two paths. Short-term, clear space:

# stalled downloads with no seeds, age > 24h
curl -s "$QBT/api/v2/torrents/info?filter=stalled_downloading" \
  | jq -r '.[] | select(.num_seeds==0 and (now-.added_on) > 86400) | .hash' \
  | xargs -I{} curl -X POST "$QBT/api/v2/torrents/delete" \
      -d "hashes={}&deleteFiles=true"

Long-term, fix the upstream policy. The arr apps were configured to import-and-keep — files went to the media pool but stayed on the download volume too. Flip removeCompletedDownloads=true on each arr (Sonarr, Radarr, Lidarr) and let the import flow actually move the bytes off the temp pool.

What I'd do differently

Add a "downloads volume free space" check to my daily homelab maintenance script and have it post to push notifications below 20% free. The cleanup pattern is well-known; the only reason I noticed late is that nothing was alerting on the cause, only the symptoms. Symptoms here are always queue stalls, never disk pressure messages.