· lenovo m70q · pool · 2,4/8 TB · nattbackup … · USB-backup …

Det som kör hemma.
Och varför jag skrev ner det.

Det här är inte ett datacenter. Det är en begagnad Lenovo M70q med Proxmox, LXCs för appar, en OMV-vm för lagring — och en hög markdown-filer. Texten här är en kortversion; den riktiga dokumentationen skriver jag för mig själv.

git log --oneline --graph hela sidan i korthet · ~3 min
* a1b2c3d test: USB-sticka på gamingdatorn

OpenMediaVault på sticka, en gammal disk — billigt sätt att testa self-hosting. Belastade GPU:n och drog el när jag ville spela.

* d4e5f6a hårdvara: Lenovo M70q + 2×8 TB

Begagnad minipc, diskar i USB-kabinetter. Proxmox dygnet runt — snapshots och LXCs utan att sabba gamingdatorn.

* 7b8c9d0 lagring: Proxmox kör appar · OMV sköter diskarna

OMV i VM med USB-passthrough. MergerFS-pool + SnapRAID-paritet. Immich mountar via NFS — en sökväg, inte RAID-detaljer.

* e1f2a3b backup: tre lager, en kabel

SnapRAID mot diskdöd. Nattjobb fyller poolen. Offline: märkt USB-port → udev → rsync → mejl. Samma disk som nödlösning vid haveri.

* c4d5e6f utåt: Tailscale + Strato VPS

Subnet router utan port forward. ismargutic.se terminierar HTTPS och tunnlar via Tailscale — publik domän, privat homelab.

idag · drift

M70q med Proxmox, OMV-VM (2×8 TB pool), Immich för foton i stället för iCloud-hyra, Tailscale för fjärråtkomst, Strato-VPS för ismargutic.se. Backup sköter sig själv om nätterna; offline-kopian kräver bara rätt USB-port. Det som tog tid var inte verktygen — utan att lita på att det håller när någon annan faktiskt bryr sig om bilderna.

Vad som faktiskt tog tid

Setup tar en helg. Drift tar år — om man gör det ordentligt. Det jag lärt mig hemma har mest kommit från saker som gick sönder: backup som inte gick att lita på, nätverk som såg rätt ut i ett webbgränssnitt men inte utifrån, en domän som behövde peka någonstans utan att blotta hela hemnätet.

Det här handlar mindre om vilka verktyg jag valde och mer om vilka problem jag stötte på — och hur jag tänkte mig igenom dem.

Internet → min webbsida (hyrd server) → säker tunnel hem → router → lilla datorn → bildalbum & filer → USB-backup ibland.

Proxmox och OMV — vem gör vad

Det började inte så här. Först körde jag OpenMediaVault på en USB-sticka kopplad till gamingdatorn, med en gammal hårddisk som enda lagring — rimligt sätt att testa om self-hosting var värt det. Det fungerade, men var inte hållbart: disken och containrarna belastade GPU:n, datorn blev varm och drog el även när jag egentligen ville spela.

Så jag köpte en begagnad Lenovo ThinkCentre M70q och två 8 TB-diskar till — interna hårddiskar i externa kabinetter via USB. Proxmox på egen hårdvara, NAS:en kör dygnet runt utan att störa gamingdatorn. Snapshots, schemalagd backup och isolerade LXCs/VM:er var bonus — inte huvudskälet, men det som gjorde att jag vågade experimentera mer utan att vara rädd att sabba allt.

Jag delade upp det med flit. Proxmox kör själva hårdvaran och håller appar isolerade i egna LXCs. OMV (OpenMediaVault) är en VM dedikerad till det tråkiga men viktiga: diskar, pool, paritet, Docker för saker som hör hemma vid lagringen.

Apparna behöver inte veta hur SnapRAID fungerar — de mountar bara en sökväg. OMV behöver inte köra Immich — den delar ut filer via NFS till en LXC som sköter appen. När något strular vet jag ungefär vilken box jag ska öppna först.

proxmox · hypervisor

Lenovo M70q i hemmet. Här skapas och startas allt.

  • LXCs för appar (Immich, Tailscale, …)
  • OMV som VM — inte direkt på värden
  • USB-passthrough av diskar till OMV-vm:en
  • Veckovis backup av VM/LXC-konfig

omv 7 · lagring & tjänster

NAS-rollen. Det mesta som landar på disk går hit.

  • MergerFS-pool — appar pekar på en sökväg
  • SnapRAID-paritet mot diskhaveri
  • Extern disk för offline-kopia (kopplas in vid behov)
  • Docker Compose (t.ex. nedladdning)
  • NFS ut till Immich-LXC

Fyra saker som inte var självklara

Foton som någon annan faktiskt bryr sig om

Apple ville ha 129 kr i månaden för 2 TB i iCloud — i princip resten av livet. Räknade på det och insåg att det blir tiotusentals kronor, kanske mer, för att lagra bilder jag redan äger.

kostnad.ts
const PRIS_2TB = 129; // kr/mån

function hyraFörEvigt(år: number) {
  return PRIS_2TB * 12 * år;
}

hyraFörEvigt(30); // → 46 440 kr

129 kr/mån för 2 TB i iCloud.

30 år → 46 440 kr

Då blev Immich inte ett tech-experiment utan ett ekonomiskt beslut. Migreringen från iCloud tog tid — export i omgångar, upp till egen server utan att fylla Mac-skivan — men målet var enkelt: sluta betala hyra på samma foton varje månad.

Nästa steg var att faktiskt lita på setupen. Det räckte inte att bilderna låg hemma — jag behövde veta vad som händer om en disk dör. SnapRAID-paritet, offline-backup, nattlig databas-dump, mejl om något går fel. Mer som något andra personer är beroende av, mindre som ett hobbyprojekt.

icloud-migrering · immich · snapraid · offline-backup · nattlig pg_dump

Ut från hemmet utan att öppna dörren

Jag ville nå tjänster hemifrån när jag inte var hemma. Inte exponera hela LAN:et.

Port forwarding mot allt i hemnätet kändes fel. Tailscale löste det mesta — subnet router så telefonen når samma adresser som hemma, Serve för HTTPS utan att varje app behöver egen klient.

Sedan ville jag att ismargutic.se skulle betyda något publikt, utan att lägga hela homelabben direkt på internet. En VPS i kanten som terminierar HTTPS och tunnlar vidare via Tailscale blev kompromissen: publik domän, privat infra bakom.

Tailscale subnet router · Serve · Caddy på VPS

Drift som inte beror på att jag kommer ihåg

Setup är engångsjobb. Det som faller mellan stolarna är allt som ska hända varje natt — och varje vecka.

Jag ville slippa manuella SSH-rutiner: logga in, kolla containrar, köra backup, hoppas att inget missats. Istället landade det i script och schemalagda jobb — Postgres-dump, app-data, SnapRAID-sync, veckovis VM-backup — plus mejl när något faktiskt går fel så jag inte upptäcker det först när någon frågar var foton tagit vägen.

Deploy och uppdateringar följer samma tänk: pull, build, compose up — ett kommando, inte tjugo steg i huvudet. Och när något strular finns det en felsökningsfil som börjar där jag slutade sist, inte på Google sida ett.

cron · bash · systemd · deploy-script · mejl vid backup-fel

Backup — tre lager, en kabel

När foton andra bryr sig om låg hemma räckte inte "två diskar och hoppas". Jag behövde förstå vad som skyddar mot vad — och göra offline-kopian enkel nog att jag faktiskt kör den.

SnapRAID + MergerFS istället för klassisk RAID: en datadisk, en paritetsdisk, skydd på filnivå. Pariteten är matematik vid diskdöd — inte en läsbar kopia. En extern disk offline skyddar mot radering och misstag som pariteten redan hunnit synca in.

Vad gick sönder?

1 · SnapRAID-paritet
2 · Nattjobb → pool
3 · Offline USB

Välj ett scenario — lagren ovan är de tre jag menar i texten.

Offline hjälper bara om den körs. Därför automatiserade jag den: stick in kabeln i märkta USB-porten (Proxmox port-mappar bara den till OMV — fel port = inget händer), vänta på mejl, dra ur. udev känner igen diskens UUID, systemd startar scriptet, rsync över hela MediaPool, avmontering, klart. Samma disk är också tänkt som hot swap vid haveri — pausfil, montera read-only, peka om appar till backup-kopian medan arrayen fixas. Iterationer längs vägen: pausfil-logik, hantera dubbel mount, OMV som hinner före.

Nattjobb fyller poolen (Postgres, app-data, SnapRAID, vzdump) så offline-kopian fångar allt i ett svep. Lärdomen som kostade mest: trodde Proxmox redan backades till poolen; hittade istället 58 GB rå avbild på NVMe som varken var schemalagd eller följde kedjan.

Hela kedjan — natt, pool, offline — sammanfattad:

snapraid · udev hotplug · rsync · pausfil · hot swap · vzdump

Det som egentligen är poängen

Om ett halvår frågar jag mig "varför satte jag det så här?" ska svaret finnas skrivet — inte i mitt huvud. Varje del av homelabben har samma upplägg, från vardag till katastrof. Det är kanske det mest användbara jag tagit med mig, mer än själva stacken.