Gå direkte til indholdet

Cookieindstillinger

Vælg for hver type, hvilke cookies du tillader. Du kan altid ændre dit valg via Cookieindstillinger nederst på hver side. Privatlivspolitik

Nødvendige

Altid slået til

Nødvendige for at logge ind, gemme din kurv og huske dine valg. De er altid slået til.

Hvilke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: din session og at forblive logget ind
  • weboke_basket: din kurv
  • wkBtwIncl: vise priser med eller uden moms
  • wok_cookies: dit cookievalg, 12 måneder

Måler, hvilken annonce der fører til et besøg eller en bestilling, så vi ikke betaler for annoncer, der ikke virker.

Hvilke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), op til 90 dage
  • OpenAI Ads, annoncer i ChatGPT
  • wok_aff: hvilken partner der henviste dig til os (affiliateprogram), 60 dage

4,6

Land og sprog

Hvert land har sin egen side med landets priser og moms.

Se

Backup med restic

Modul 8: Backup og overvågning · Læsetid: 12 minutter

Læringsmål: Efter denne lektion kan du med restic tage krypterede backups til lager uden for din server, rydde gamle versioner op efter en opbevaringsplan, kontrollere backuppen og gendanne filer, og lade det hele køre automatisk.

Centrale begreber: restic, repository, init, adgangskode(fil), backend (sftp, S3, rest-server), backup, snapshots, forget, --keep-daily/--keep-weekly/--keep-monthly, prune, check, restore, mount, deduplikering, append-only, systemd-timer

Hvorfor restic?

Der findes mange backupprogrammer. restic er et godt valg til en egen server, fordi det:

  • krypterer alt, før det forlader serveren; lageret ser kun ulæselige blokke;
  • deduplikerer: en fil, der ikke er ændret, gemmes ikke igen, så daglige backups fylder meget lidt;
  • kender mange slags lager: en mappe, en anden server via SFTP, S3-kompatibelt lager, en egen rest-server;
  • er ét program, der findes i pakkekilderne til Debian og Ubuntu (apt install restic).

Et alternativ med lignende egenskaber er BorgBackup. Principperne fra denne lektion gælder også der.

Begreberne

  • Repository: stedet, hvor restic gemmer backupperne. Altid uden for den server, du tager backup af.
  • Snapshot: én backup på ét tidspunkt. (Bemærk: det er noget andet end snapshottet hos din udbyder fra lektion 8.1.)
  • Adgangskode: hvert repository har en adgangskode, som alt krypteres med. restic-dokumentationen er klar på det punkt: mister du adgangskoden, mister du dataene for altid.

Opret et repository

Lad os sige, at du har en lagerserver backup.example.net, som du kan nå via SFTP med en nøgle, som brugeren web1. Opret først en adgangskodefil på serveren (og gem den samme adgangskode i din adgangskodeadministrator, 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øvariablerne RESTIC_REPOSITORY og RESTIC_PASSWORD_FILE behøver du ikke skrive indstillingerne -r og --password-file hver gang.

Tag en backup

Først databasedumpet (lektion 8.1), derefter backuppen:

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æste dag går det meget hurtigere: kun det, der er ændret, kommer 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

Ryd op: forget og prune

Et nyt snapshot hver dag betyder 365 snapshots efter et år. Med forget bestemmer du, hvilke du beholder, med en opbevaringsplan:

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

Sådan virker planen:

  • --keep-daily 7: se på de seneste syv dage, hvor der findes et snapshot, og behold det nyeste for hver dag;
  • --keep-weekly 4: det samme for de seneste fire uger (mandag til og med søndag);
  • --keep-monthly 6: det samme for de seneste seks måneder.

Et snapshot bliver bevaret, hvis det opfylder mindst én af reglerne. Alt, der ikke opfylder nogen regel, bliver glemt. Prøv en ny plan først med --dry-run: så ser du, hvad der ville forsvinde, uden at noget ændres.

Vigtig forskel: forget fjerner kun henvisningen til et snapshot. Dataene bliver i repositoryet, indtil prune rydder de blokke op, som intet snapshot længere bruger. Indstillingen --prune til forget gør det i ét hug. Prune tager tid og låser repositoryet; planlæg det derfor ikke samtidig med din backup.

Kontrollér: check

En backup, der stille og roligt bliver beskadiget, opdager du først, når du skal gendanne. Lad restic kontrollere repositoryet jævnligt:

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

Almindelig check kontrollerer strukturen. Med --read-data-subset læser den også rent faktisk en del af dataene tilbage og kontrollerer indholdet. Gør det for eksempel ugentligt med et par procent; så er alt efter et stykke tid blevet læst én gang.

Gendan: restore og mount

Gendan til en separat mappe, aldrig direkte oven i 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
gelijk

latest er det nyeste snapshot; du kan også bruge et ID (restic restore 3c7e91d4 ...). Med restic mount /mnt/restic (kræver FUSE) ser du alle snapshots som mapper og kan kigge rundt og kopiere enkelte filer. Stop med Ctrl+C.

En database gendanner du ved at hente dumpet tilbage og importere det, for eksempel gunzip < alles.sql.gz | mariadb.

Automatisk, hver nat

Lav et script og en systemd-timer (lektion 6.3). Scriptet:

#!/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 og ExecStart=/usr/local/sbin/backup.sh, og en .timer med OnCalendar=*-*-* 03:10:00 og Persistent=true. set -eu sørger for, at scriptet stopper ved den første fejl, så systemd ser kørslen som mislykket. Knyt en notifikation til (lektion 8.3), ellers opdager du ikke en mislykket backup.

Mod ransomware: append-only

I scriptet ovenfor kan serveren selv også slette backuppen (forget og prune). Overtager en angriber serveren, kan han altså også det. To måder at forhindre det på:

  • rest-server i append-only-tilstand: på lagerserveren kører du restics egen rest-server med indstillingen --append-only. Webserveren kan så godt tilføje backups, men ikke slette noget. Oprydning (forget --prune) gør du fra en anden, godt sikret maskine med fulde rettigheder.
  • Lager med versionsstyring eller objektlåsning hos en S3-udbyder, så slettede objekter kan hentes tilbage i en periode.

Pas på en lumsk faldgrube, som restic-dokumentationen selv nævner: en angriber, der tilføjer falske snapshots, kan narre en plan som --keep-weekly til at glemme ægte snapshots. Med --keep-within (for eksempel --keep-within 30d) bliver alt fra den periode stående, falsk eller ægte.

Opsummering

  • restic krypterer, deduplikerer og kan gemme til mange slags lager uden for din server; mister du adgangskoden, mister du alt.
  • init opretter repositoryet, backup et snapshot, snapshots viser dem.
  • forget med --keep-* bestemmer, hvad du beholder; først prune (eller --prune) rydder dataene rigtigt op. Prøv med --dry-run.
  • check (med --read-data-subset) kontrollerer, restore --target gendanner til en separat mappe, mount lader dig kigge rundt.
  • Automatisér med en timer og en notifikation, og hold mindst ét repository uden for serverens rækkevidde (append-only).

Quiz

1. Hvad sker der, hvis du kører restic forget --keep-daily 7 uden --prune?



2. Du har kun adgangskoden til dit restic-repository i /root/.restic-wachtwoord på serveren. Serveren er gået tabt. Hvad nu?



3. Hvorfor gendanner du en backup til /tmp/terug og ikke direkte til det oprindelige sted?



4. Hvad tilføjer restic check --read-data-subset=5% i forhold til en almindelig restic check?



5. En angriber, der overtager din webserver, kan via backupscriptet også køre restic forget --prune. Hvad beskytter mod det?



Opgave

Opgave Z8.2: Hvad er der tilbage efter forget? I eksempelfilen restic-snapshots.txt står en liste over snapshots og en opbevaringsplan. Find ud af, hvilke snapshots der er tilbage efter restic forget med den plan. Programmet sammenligner med den faste nøgle.

Opgave Z8.2: Hvad er der tilbage efter forget?

Fil til denne opgave: restic-snapshots.txt





Det, du udfylder, og hvad vi finder, gemmer vi ikke. Din browser husker dine svar, og om du har bestået opgaven. Er du logget ind, gemmer vi kun, at du (næsten) bestod opgaven, i Mine kurser; der kan du også slette det.

Opgave O8.2: En gendannelsestest. Opret på din egen server et restic-repository uden for serveren, tag en backup af /etc og dine data, og gendan én mappe til /tmp/terug. Sammenlign med diff, notér hvor lang tid det tog, og svar på, hvor din adgangskode og dine lageroplysninger er gemt uden for serveren.

Opgave O8.2: En gendannelsestest

Denne opgave laver du selv; ingen tjekker den. Afkryds hvad du har gjort, og markér opgaven som udført.




Dine afkrydsninger og noter forbliver kun i denne browser; vi sender dem ingen steder hen. Er du logget ind, gemmer vi kun i Mine kurser, at du har udført opgaven.

Læs mere

Et øjeblik…

Opsæt dine domæner

Angiv for hvert domæne navneserverne, tilknytningen til din hosting, og hvem der bliver ejer.

Indlæser dine domæner…