qBittorrent: migrera seedande torrents Windows → Linux
qBittorrent: migrera seedande torrents Windows → Linux (Docker)
Guide för att flytta ett stort antal seedande torrents från en qBittorrent-klient på Windows till qBittorrent i Docker på Linux – utan att bryta seedningen (viktigt för privata trackers som TorrentLeech och deras Hit-and-Run-regler).
Genomfört 2026-06-29: 193 torrents (filmer, anime, TV, PC-spel, OS-ISO) migrerade från
WindowsenServer (VM 103)Windows-server till Docker-qBit på arr-server (VM 109).servern. Alla 193 seedar, verifierat reboot-säkert.
Förutsättningar
- Källfilerna ligger redan på NAS (samma fysiska filer som Linux-klienten ska seeda).
- Både Windows- och Linux-qBit kör en standard-release (ej beta/forkad) – annars kan trackern banna klienten. qBittorrent 5.2.2 är OK för TL.
- Torrents har redan uppfyllt trackerns minsta seed-tid (annars: migrera ändå, men var medveten om HnR).
NAS-layout (NFS på arr-server)
| NAS |
|---|
/volume1/Movies
/mnt/media/movies
NAS01
/volume1/Apps
/mnt/media/apps
NAS02/volume1/TV
/mnt/media/tv
NAS02
/volume1/Anime
/mnt/media/anime
NAS02/volume1/Games-PC
/mnt/media/games-pc
Steg 1 – Exportera från Windows
.torrent- och .fastresume-filerna finns i:
C:\Users\<user>\AppData\Local\qBittorrent\BT_backup\
Kopiera hela mappen (både .torrent OCH .fastresume) till en plats Linux når, t.ex. en temp-mapp på NAS.
Obs: ta ALLTID en orörd kopia som "pristine source" – rör den aldrig, återskapa alltid från den.
Steg 2 – Docker-volym
qBit-containern måste se filerna på samma sökväg som .fastresume pekar på. Lägg till NAS-mounten i docker-compose.yml:
qbittorrent:
volumes:
- ./config/qbittorrent:/config
- /mnt/media/movies:/mnt/media/movies
- /mnt/media/tv:/mnt/media/tv
# ...osv för varje share
Steg 3 – Skriv om sökvägarna i .fastresume
.fastresume är bencode-kodat (binärt, med längd-prefix). En enkel sed funkar INTE – man måste avkoda, byta fälten och re-koda. Två fält innehåller sökvägar:
save_path(libtorrents – den som faktiskt räknas)qBt-savePath(qBittorrents egna)
Mappningsregel (Windows → Linux), prefix-bevarande:
| Windows save_path | Linux |
|---|---|
//nas01/Movies (film i undermapp) |
/mnt/media/movies |
//nas01/Movies/<film> (fil direkt) |
/mnt/media/movies/<film> |
//nas02/Anime/<x> |
/mnt/media/anime/<x> |
//nas02/TV/<x> |
/mnt/media/tv/<x> |
Viktigt: blanket-byt inte allt till samma mapp. Om
save_pathinkluderar filmnamnet betyder det att innehållet är filen direkt – då måste undermappen bevaras.
Python-scriptet använder en egen bencode decode/encode med en säkerhetsspärr: encode(decode(fil)) == fil måste vara byte-identiskt innan något skrivs (annars är kodaren inte kanonisk → avbryt). Stoppa qBit innan filerna redigeras (qBit skriver över .fastresume vid avstängning).
Steg 4 – Ladda in och recheck
- Kopiera
.torrent+ omskrivna.fastresumetill Linux-qBitsBT_backup. docker compose up -d qbittorrent(recreate om volymer ändrats).- qBit rechecker och börjar seeda. Torrents som hittar sina filer går till
stalledUP/uploading.
Vanliga fel:
missingFiles= qBit hittar inte filerna → fel sökväg, saknad docker-volym, eller mappnamn som inte matchar (t.ex. dedup som döpt om).- Trailing space i mappnamn: Windows tillåter/strippar efterföljande mellanslag annorlunda än Linux. Fixa qBit-native med
torrents/renameFolder-API:t (döp INTE om disk-mappen – Radarr/Jellyfin förväntar utan mellanslag).
Steg 5 – Stäng av seeding-kön
För en seedbox som ska seeda allt för alltid: stäng av köandet så alla torrents announcerar samtidigt.
POST /api/v2/app/setPreferences json={"queueing_enabled":false}
Annars begränsar max_active_uploads/max_active_torrents hur många som faktiskt seedar.
Steg 6 – Gör det reboot-säkert (kritiskt!)
fstab med _netdev överlever reboot – men Docker väntar inte på NFS-mountsen som standard. Om Docker startar qBit innan NFS är klart bind-monteras tomma mappar → alla torrents blir missingFiles.
Fix – systemd drop-in /etc/systemd/system/docker.service.d/wait-for-nfs.conf:
[Unit]
After=remote-fs.target
Wants=remote-fs.target
Sen systemctl daemon-reload. Detta ordnar Docker efter att alla _netdev-mounts är klara.
Verifiera med en faktisk reboot: efter omstart ska alla mounts vara aktiva, qBit uppe, och alla torrents seeda (0 missingFiles).
Verifieringskommandon
# Mounts aktiva?
findmnt -t nfs4 -o TARGET,SOURCE
# fstab giltig?
sudo findmnt --verify
# qBit ser filerna?
docker exec qbittorrent ls /mnt/media/movies
# Torrent-states (via API, efter login-cookie)
curl -s -b cookie 'http://localhost:8080/api/v2/torrents/info' \
| grep -o '"state":"[^"]*"' | sort | uniq -c
# Tracker announcerar? (status 2 = working)
curl -s -b cookie 'http://localhost:8080/api/v2/torrents/trackers?hash=<HASH>'