Modul 8 · 8.2
Sikkerhetskopier med restic
Modul 8: Sikkerhetskopier og overvåking · Lesetid: 12 minutter
Læringsmål: Etter denne leksjonen kan du bruke restic til å lage krypterte sikkerhetskopier til lagring utenfor serveren din, rydde bort gamle versjoner etter en oppbevaringsplan, kontrollere sikkerhetskopien og gjenopprette filer, og la det hele kjøre automatisk.
Nøkkelbegreper: restic, repository, init, passord(fil), backend (sftp, S3, rest-server), backup, snapshots, forget, --keep-daily/--keep-weekly/--keep-monthly, prune, check, restore, mount, deduplisering, append-only, systemd-timer
Hvorfor restic?
Det finnes mange programmer for sikkerhetskopiering. restic er et godt valg for en egen server, fordi det:
- krypterer alt før det forlater serveren; lagringen ser bare uleselige blokker;
- dedupliserer: en fil som ikke er endret, lagres ikke på nytt, så daglige sikkerhetskopier tar lite plass;
- støtter mange typer lagring: en mappe, en annen server via SFTP, S3-kompatibel lagring, en egen rest-server;
- er ett program, i pakkekilden til Debian og Ubuntu (
apt install restic).
Et alternativ med lignende egenskaper er BorgBackup. Prinsippene fra denne leksjonen gjelder der også.
Begrepene
- Repository: stedet der restic lagrer sikkerhetskopiene. Alltid utenfor serveren du tar sikkerhetskopi av.
- Snapshot: én sikkerhetskopi på ett tidspunkt. (Merk: dette er noe annet enn snapshoten hos leverandøren din fra leksjon 8.1.)
- Passord: hvert repository har et passord som alt krypteres med. Dokumentasjonen til restic er tydelig på dette: mister du passordet, har du mistet dataene for godt.
Lag et repository
Si at du har en lagringsserver backup.example.net som du når via SFTP med en nøkkel, som brukeren web1. Lag først en passordfil på serveren (og ta vare på det samme passordet i passordbehandleren din, leksjon 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øvariablene RESTIC_REPOSITORY og RESTIC_PASSWORD_FILE slipper du å skrive opsjonene -r og --password-file hver gang.
Ta en sikkerhetskopi
Først databasedumpen (leksjon 8.1), så sikkerhetskopien:
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 savedNeste dag går det mye raskere: bare det som er endret, blir 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 snapshotsRydd opp: forget og prune
Én ny snapshot hver dag betyr 365 snapshots etter et år. Med forget bestemmer du hvilke du beholder, med en oppbevaringsplan:
root@web1:~# restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --pruneSlik virker planen:
--keep-daily 7: se på de siste sju dagene som har en snapshot, og behold den nyeste per dag;--keep-weekly 4: det samme for de siste fire ukene (mandag til og med søndag);--keep-monthly 6: det samme for de siste seks månedene.
En snapshot blir stående hvis den oppfyller minst én av reglene. Alt som ikke oppfyller noen regel, blir glemt. Prøv en ny plan først med --dry-run: da ser du hva som ville blitt fjernet, uten at noe endres.
Viktig forskjell: forget fjerner bare henvisningen til en snapshot. Dataene blir liggende i repositoryet til prune rydder bort blokkene som ingen snapshot lenger bruker. Opsjonen --prune til forget gjør det i én operasjon. Prune tar tid og låser repositoryet; planlegg det derfor ikke samtidig med sikkerhetskopien.
Kontroller: check
En sikkerhetskopi som blir skadet i det stille, merker du først når du skal gjenopprette. La restic kontrollere repositoryet jevnlig:
root@web1:~# restic check
...
no errors were found
root@web1:~# restic check --read-data-subset=5%Vanlig check kontrollerer strukturen. Med --read-data-subset leser den også faktisk tilbake en del av dataene og kontrollerer innholdet. Gjør det for eksempel ukentlig med noen få prosent; da er alt lest én gang etter en stund.
Gjenopprett: restore og mount
Gjenopprett til en egen mappe, aldri rett over originalen:
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
gelijklatest er den nyeste snapshoten; du kan også bruke en ID (restic restore 3c7e91d4 ...). Med restic mount /mnt/restic (krever FUSE) ser du alle snapshots som mapper og kan se deg rundt og kopiere enkeltfiler. Avslutt med Ctrl+C.
En database gjenoppretter du ved å hente tilbake dumpen og importere den, for eksempel gunzip < alles.sql.gz | mariadb.
Automatisk, hver natt
Lag et skript og en systemd-timer (leksjon 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 --pruneEn .service med Type=oneshot og ExecStart=/usr/local/sbin/backup.sh, og en .timer med OnCalendar=*-*-* 03:10:00 og Persistent=true. set -eu sørger for at skriptet stopper ved første feil, slik at systemd ser kjøringen som mislykket. Koble et varsel til (leksjon 8.3), ellers merker du ikke at en sikkerhetskopi har feilet.
Mot løsepengevirus: append-only
I skriptet over kan serveren selv også slette sikkerhetskopien (forget og prune). Tar en angriper over serveren, kan han altså gjøre det samme. To måter å hindre det på:
- rest-server i append-only-modus: på lagringsserveren kjører du restics egen rest-server med opsjonen
--append-only. Webserveren kan da legge til sikkerhetskopier, men ikke slette noe. Opprydding (forget --prune) gjør du fra en annen, godt sikret maskin med fulle rettigheter. - Lagring med versjonering eller objektlåsing hos en S3-leverandør, slik at slettede objekter kan hentes tilbake en stund etterpå.
Pass på en lumsk felle som restic-dokumentasjonen selv nevner: en angriper som legger til falske snapshots, kan få en plan som --keep-weekly til å glemme ekte snapshots. Med --keep-within (for eksempel --keep-within 30d) blir alt fra den perioden stående, falskt eller ekte.
Oppsummering
- restic krypterer, dedupliserer og kan lagre til mange typer lagring utenfor serveren din; mister du passordet, mister du alt.
initlager repositoryet,backupen snapshot,snapshotsviser dem.forgetmed--keep-*bestemmer hva du beholder; førstprune(eller--prune) rydder faktisk bort dataene. Prøv med--dry-run.check(med--read-data-subset) kontrollerer,restore --targetgjenoppretter til en egen mappe,mountlar deg se deg rundt.- Automatiser med en timer og et varsel, og hold minst ett repository utenfor serverens rekkevidde (append-only).
Quiz
Oppgave
Oppgave Z8.2: Hva blir igjen etter forget? I eksempelfilen restic-snapshots.txt står en liste over snapshots og en oppbevaringsplan. Finn ut hvilke snapshots som blir igjen etter restic forget med den planen. Programmet sammenligner med den faste fasiten.
Oppgave O8.2: En gjenopprettingstest. Lag et restic-repository utenfor din egen server, ta en sikkerhetskopi av /etc og dataene dine, og gjenopprett én mappe til /tmp/terug. Sammenlign med diff, noter hvor lang tid det tok, og svar på hvor passordet ditt og tilgangsopplysningene til lagringen er oppbevart utenfor serveren.
Oppgave O8.2: En gjenopprettingstest
Denne oppgaven gjør du selv; ingen kontrollerer den. Kryss av det du har gjort, og merk oppgaven som fullført.
Repositoryet ligger hos en annen leverandør enn serveren. diff viser ingen forskjeller, eller bare filer som er endret etter sikkerhetskopien. Passordet ligger i passordbehandleren og på papir; en append-only-kopi beskytter mot sletting fra en inntrenger.
Avkrysningene og notatene dine blir kun i denne nettleseren; vi sender dem ikke noe sted. Er du logget inn, lagrer vi kun i Mine kurs at du har gjort oppgaven.
Les mer
- Backup-strategi: 3-2-1-regelen for din egen bedrift
- restic-dokumentasjonen, Preparing a new repository: https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html
- restic-dokumentasjonen, Removing backup snapshots (forget og prune): https://restic.readthedocs.io/en/stable/060_forget.html
- restic-dokumentasjonen, Restoring from backup: https://restic.readthedocs.io/en/stable/050_restore.html
- rest-server (append-only): https://github.com/restic/rest-server
