Hoppa till innehållet

Cookieinställningar

Välj vilka typer av cookies du tillåter. Du kan alltid ändra ditt val via Cookieinställningar längst ned på varje sida. Integritetspolicy

Nödvändiga

Alltid på

Behövs för att logga in, spara din varukorg och komma ihåg dina val. De är alltid på.

Vilka cookies?
  • weboke_sessie, weboke_klant, weboke_remember: din session och att du förblir inloggad
  • weboke_basket: din varukorg
  • wkBtwIncl: visa priser med eller utan moms
  • wok_cookies: ditt cookieval, 12 månader

Mäter vilken annons som leder till ett besök eller en beställning, så att vi inte betalar för annonser som inte ger något.

Vilka cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), upp till 90 dagar
  • OpenAI Ads, annonser i ChatGPT
  • wok_aff: via vilken partner du kom till oss (affiliateprogram), 60 dagar

4,6

Land och språk

Varje land har en egen webbplats med landets priser och moms.

Visa

Säkerhetskopior med restic

Modul 8: Säkerhetskopior och övervakning · Lästid: 12 minuter

Lärandemål: Efter den här lektionen kan du med restic göra krypterade säkerhetskopior till lagring utanför din server, rensa gamla versioner enligt ett sparschema, kontrollera säkerhetskopian och återställa filer, och låta det hela köras automatiskt.

Nyckelbegrepp: restic, repository, init, lösenord(sfil), backend (sftp, S3, rest-server), backup, snapshots, forget, --keep-daily/--keep-weekly/--keep-monthly, prune, check, restore, mount, deduplicering, append-only, systemd-timer

Varför restic?

Det finns många program för säkerhetskopiering. restic är ett bra val för en egen server, eftersom det:

  • krypterar allt innan det lämnar servern; lagringen ser bara oläsbara block;
  • deduplicerar: en fil som inte har ändrats sparas inte igen, så dagliga säkerhetskopior tar lite utrymme;
  • stöder många typer av lagring: en mapp, en annan server via SFTP, S3-kompatibel lagring, en egen rest-server;
  • är ett enda program, i paketkällan för Debian och Ubuntu (apt install restic).

Ett alternativ med liknande egenskaper är BorgBackup. Principerna i den här lektionen gäller även där.

Begreppen

  • Repository: platsen där restic sparar säkerhetskopiorna. Alltid utanför servern som du säkerhetskopierar.
  • Snapshot: en säkerhetskopia vid ett visst tillfälle. (Obs: det är något annat än snapshoten hos din leverantör från lektion 8.1.)
  • Lösenord: varje repository har ett lösenord som allt krypteras med. Dokumentationen för restic är tydlig på den punkten: den som har tappat bort lösenordet har oåterkalleligen förlorat datan.

Skapa ett repository

Anta att du har en lagringsserver backup.example.net som du når via SFTP med en nyckel, som användaren web1. Skapa först en lösenordsfil på servern (och spara samma lösenord i din lösenordshanterare, lektion 8.1):

root@web1:~# install -m 600 /dev/null /root/.restic-wachtwoord
root@web1:~# openssl rand -base64 32 > /root/.restic-wachtwoord
root@web1:~# export RESTIC_REPOSITORY=sftp:web1@backup.example.net:/srv/restic/web1
root@web1:~# export RESTIC_PASSWORD_FILE=/root/.restic-wachtwoord
root@web1:~# restic init
created restic repository 5f1a9c2e3b at sftp:web1@backup.example.net:/srv/restic/web1

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

Med miljövariablerna RESTIC_REPOSITORY och RESTIC_PASSWORD_FILE slipper du skriva alternativen -r och --password-file varje gång.

Göra en säkerhetskopia

Först databasdumpen (lektion 8.1), sedan säkerhetskopian:

root@web1:~# restic backup /etc /var/www /opt /var/backups/db \
    --exclude /var/www/*/cache --tag dagelijks
repository 5f1a9c2e opened (version 2, compression level auto)
...
Files:        8421 new,     0 changed,     0 unmodified
Dirs:         1203 new,     0 changed,     0 unmodified
Added to the repository: 612.338 MiB (402.117 MiB stored)

processed 8421 files, 1.204 GiB in 0:41
snapshot 3c7e91d4 saved

Nästa dag går det mycket snabbare: bara det som har ändrats följer med.

root@web1:~# restic snapshots
ID        Time                 Host  Tags       Paths
-----------------------------------------------------------------------
3c7e91d4  2026-11-08 03:10:02  web1  dagelijks  /etc /opt /var/backups/db /var/www
a18f0b77  2026-11-09 03:10:05  web1  dagelijks  /etc /opt /var/backups/db /var/www
-----------------------------------------------------------------------
2 snapshots

Rensa: forget och prune

En ny snapshot varje dag betyder 365 snapshots efter ett år. Med forget bestämmer du vilka du sparar, med ett sparschema:

root@web1:~# restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

Så fungerar schemat:

  • --keep-daily 7: titta på de senaste sju dagarna där det finns en snapshot, och behåll den nyaste per dag;
  • --keep-weekly 4: samma sak för de senaste fyra veckorna (måndag till och med söndag);
  • --keep-monthly 6: samma sak för de senaste sex månaderna.

En snapshot finns kvar om den uppfyller minst en av reglerna. Allt som inte uppfyller någon regel glöms bort. Prova ett nytt schema först med --dry-run: då ser du vad som skulle försvinna utan att något ändras.

Viktig skillnad: forget tar bara bort hänvisningen till en snapshot. Datan finns kvar i repositoryt tills prune rensar bort de block som inte längre används av någon snapshot. Alternativet --prune till forget gör det i ett svep. Prune tar tid och låser repositoryt; schemalägg det därför inte samtidigt som din säkerhetskopiering.

Kontrollera: check

En säkerhetskopia som tyst blir skadad märker du först när du ska återställa. Låt restic kontrollera repositoryt regelbundet:

root@web1:~# restic check
...
no errors were found
root@web1:~# restic check --read-data-subset=5%

Ett vanligt check kontrollerar strukturen. Med --read-data-subset läser det även faktiskt tillbaka en del av datan och kontrollerar innehållet. Gör det till exempel varje vecka med några procent; då har allt lästs någon gång efter en tid.

Återställa: restore och mount

Återställ till en separat mapp, aldrig direkt över originalet:

root@web1:~# restic restore latest --target /tmp/terug --include /etc/nginx
restoring snapshot a18f0b77 of [/etc /opt /var/backups/db /var/www] at 2026-11-09 03:10:05 ...
Summary: Restored 41 files/dirs (88.104 KiB) in 0:00
root@web1:~# diff -r /tmp/terug/etc/nginx /etc/nginx && echo gelijk
gelijk

latest är den nyaste snapshoten; du kan också använda ett ID (restic restore 3c7e91d4 ...). Med restic mount /mnt/restic (kräver FUSE) ser du alla snapshots som mappar och kan titta runt och kopiera enskilda filer. Avsluta med Ctrl+C.

En databas återställer du genom att hämta tillbaka dumpen och importera den, till exempel gunzip < alles.sql.gz | mariadb.

Automatiskt, varje natt

Skapa ett skript och en systemd-timer (lektion 6.3). Skriptet:

#!/bin/sh
# /usr/local/sbin/backup.sh
set -eu
export RESTIC_REPOSITORY=sftp:web1@backup.example.net:/srv/restic/web1
export RESTIC_PASSWORD_FILE=/root/.restic-wachtwoord
mariadb-dump --single-transaction --all-databases | gzip > /var/backups/db/alles.sql.gz
restic backup /etc /var/www /opt /var/backups/db --tag dagelijks
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

En .service med Type=oneshot och ExecStart=/usr/local/sbin/backup.sh, och en .timer med OnCalendar=*-*-* 03:10:00 och Persistent=true. set -eu gör att skriptet stoppar vid första felet, så att systemd ser körningen som misslyckad. Koppla en avisering till det (lektion 8.3), annars märker du inte en misslyckad säkerhetskopia.

Mot ransomware: append-only

I skriptet ovan kan servern själv också radera säkerhetskopian (forget och prune). Tar en angripare över servern kan han alltså också göra det. Två sätt att förhindra det:

  • rest-server i append-only-läge: på lagringsservern kör du restics egen rest-server med alternativet --append-only. Webbservern kan då lägga till säkerhetskopior, men inte radera något. Rensningen (forget --prune) gör du från en annan, väl skyddad maskin med fullständiga rättigheter.
  • Lagring med versionshantering eller objektlåsning hos en S3-leverantör, så att borttagna objekt kan hämtas tillbaka under en tid.

Se upp för en subtil fälla som restic-dokumentationen själv nämner: en angripare som lägger till falska snapshots kan lura ett schema som --keep-weekly att glömma äkta snapshots. Med --keep-within (till exempel --keep-within 30d) finns allt från den perioden kvar, falskt eller äkta.

Sammanfattning

  • restic krypterar, deduplicerar och kan skriva till många typer av lagring utanför din server; tappar du lösenordet har du förlorat allt.
  • init skapar repositoryt, backup en snapshot, snapshots visar dem.
  • forget med --keep-* bestämmer vad du sparar; först prune (eller --prune) rensar datan på riktigt. Prova med --dry-run.
  • check (med --read-data-subset) kontrollerar, restore --target återställer till en separat mapp, mount låter dig titta runt.
  • Automatisera med en timer och en avisering, och håll minst ett repository utom räckhåll för servern (append-only).

Quiz

1. Vad händer om du kör restic forget --keep-daily 7 utan --prune?



2. Du har lösenordet till ditt restic-repository bara i /root/.restic-wachtwoord på servern. Servern har gått förlorad. Vad nu?



3. Varför återställer du en säkerhetskopia till /tmp/terug och inte direkt till den ursprungliga platsen?



4. Vad tillför restic check --read-data-subset=5% jämfört med ett vanligt restic check?



5. En angripare som tar över din webbserver kan via skriptet för säkerhetskopiering även köra restic forget --prune. Vad skyddar mot det?



Uppgift

Uppgift Z8.2: Vad finns kvar efter forget? I exempelfilen restic-snapshots.txt finns en lista med snapshots och ett sparschema. Avgör vilka snapshots som finns kvar efter restic forget med det schemat. Programmet jämför med den fasta nyckeln.

Uppgift Z8.2: Vad finns kvar efter forget?

Fil till den här uppgiften: restic-snapshots.txt





Det du fyller i och det vi hittar sparar vi inte. Din webbläsare kommer ihåg dina svar och om du klarade uppgiften. Är du inloggad sparar vi bara att du klarade uppgiften (nästan) i Mina kurser; där kan du också ta bort det.

Uppgift O8.2: Ett återställningstest. Skapa på din egen server ett restic-repository utanför servern, gör en säkerhetskopia av /etc och din data, och återställ en mapp till /tmp/terug. Jämför med diff, anteckna hur lång tid det tog, och svara på var ditt lösenord och dina lagringsuppgifter förvaras utanför servern.

Uppgift O8.2: Ett återställningstest

Den här uppgiften gör du själv; ingen kontrollerar den. Bocka av vad du har gjort och markera uppgiften som klar.




Dina bockar och anteckningar sparas bara i den här webbläsaren; vi skickar dem ingenstans. Är du inloggad sparar vi i Mina kurser bara att du har gjort uppgiften.

Läs mer

Ett ögonblick…

Ställ in dina domäner

Ställ in namnservrar, koppling till ditt webbhotell och vem som blir innehavare för varje domän.

Hämtar dina domäner…