Moodul 8 · 8.2
Varukoopiad resticuga
Moodul 8: Varukoopiad ja jälgimine · Lugemisaeg: 12 minutit
Õpieesmärk: Pärast seda õppetundi oskad resticuga teha krüpteeritud varukoopiaid väljaspool serverit asuvasse hoidlasse, koristada vanu versioone säilitusskeemi järgi, varukoopiat kontrollida ja faile taastada ning panna kõik see automaatselt tööle.
Põhimõisted: restic, repositoorium, init, parool(ifail), taustsüsteem (sftp, S3, rest-server), backup, snapshots, forget, --keep-daily/--keep-weekly/--keep-monthly, prune, check, restore, mount, deduplitseerimine, append-only, systemd-taimer
Miks restic?
Varundusprogramme on palju. restic on oma serveri jaoks hea valik, sest see:
- krüpteerib kõik enne, kui andmed serverist lahkuvad; hoidla näeb ainult loetamatuid plokke;
- deduplitseerib: faili, mis pole muutunud, uuesti ei salvestata, nii et igapäevased varukoopiad võtavad vähe ruumi;
- tunneb palju erinevaid hoidlaid: kausta, teist serverit SFTP kaudu, S3-ühilduvat salvestust, oma rest-serverit;
- on üks programm, mis on Debiani ja Ubuntu pakiallikas (
apt install restic).
Sarnaste omadustega alternatiiv on BorgBackup. Selle õppetunni põhimõtted kehtivad ka seal.
Mõisted
- Repositoorium: koht, kuhu restic varukoopiad salvestab. Alati väljaspool serverit, mida varundad.
- Hetktõmmis (snapshot): üks varukoopia ühel ajahetkel. (NB! See on midagi muud kui sinu teenusepakkuja hetktõmmis õppetunnist 8.1.)
- Parool: igal repositooriumil on parool, millega kõik krüpteeritakse. resticu dokumentatsioon ütleb selgelt: kes parooli kaotab, kaotab andmed pöördumatult.
Repositooriumi loomine
Oletame, et sul on salvestusserver backup.example.net, kuhu pääsed SFTP kaudu võtmega ligi kasutajana web1. Loo kõigepealt serverisse paroolifail (ja hoia sama parooli ka oma paroolihalduris, õppetund 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.Keskkonnamuutujatega RESTIC_REPOSITORY ja RESTIC_PASSWORD_FILE ei pea sa valikuid -r ja --password-file iga kord sisestama.
Varukoopia tegemine
Kõigepealt andmebaasi tõmmis (õppetund 8.1), seejärel varukoopia:
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 savedJärgmisel päeval on see palju kiirem: kaasa läheb ainult see, mis muutus.
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 snapshotsKoristamine: forget ja prune
Kui iga päev lisandub üks hetktõmmis, on aasta pärast neid 365. Käsuga forget määrad säilitusskeemiga, milliseid alles hoiad:
root@web1:~# restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --pruneSkeem töötab nii:
--keep-daily 7: vaata viimast seitset päeva, millel on hetktõmmis, ja hoia igast päevast alles uusim;--keep-weekly 4: sama viimase nelja nädala kohta (esmaspäevast pühapäevani);--keep-monthly 6: sama viimase kuue kuu kohta.
Hetktõmmis jääb alles, kui see vastab vähemalt ühele reeglile. Kõik, mis ei vasta ühelegi reeglile, unustatakse. Proovi uut skeemi kõigepealt valikuga --dry-run: siis näed, mis kustuks, ilma et midagi muutuks.
Oluline erinevus: forget eemaldab ainult viite hetktõmmisele. Andmed jäävad repositooriumi alles, kuni prune koristab plokid, mida ükski hetktõmmis enam ei kasuta. Valik --prune käsu forget juures teeb selle korraga ära. Prune võtab aega ja lukustab repositooriumi, seega ära planeeri seda varundusega samale ajale.
Kontrollimine: check
Varukoopia, mis vaikselt kahjustub, avastad alles taastamisel. Lase resticul repositooriumi regulaarselt kontrollida:
root@web1:~# restic check
...
no errors were found
root@web1:~# restic check --read-data-subset=5%Lihtsalt check kontrollib struktuuri. Valikuga --read-data-subset loeb see ka päriselt osa andmetest tagasi ja kontrollib sisu. Tee seda näiteks kord nädalas paari protsendiga; nii on mõne aja pärast kõik korra läbi loetud.
Taastamine: restore ja mount
Taasta eraldi kausta, mitte kunagi kohe originaali peale:
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 on uusim hetktõmmis; võid kasutada ka ID-d (restic restore 3c7e91d4 ...). Käsuga restic mount /mnt/restic (vajab FUSE-t) näed kõiki hetktõmmiseid kaustadena, saad ringi vaadata ja üksikuid faile kopeerida. Lõpeta klahvidega Ctrl+C.
Andmebaasi taastad nii, et tood tõmmise tagasi ja impordid selle, näiteks gunzip < alles.sql.gz | mariadb.
Automaatselt, igal ööl
Loo skript ja systemd-taimer (õppetund 6.3). Skript:
#!/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Üks .service, milles on Type=oneshot ja ExecStart=/usr/local/sbin/backup.sh, ning üks .timer, milles on OnCalendar=*-*-* 03:10:00 ja Persistent=true. set -eu tagab, et skript peatub esimese vea juures, nii et systemd näeb käivitust ebaõnnestununa. Seo sellega teavitus (õppetund 8.3), muidu ebaõnnestunud varukoopiat ei märka.
Lunavara vastu: append-only
Ülaltoodud skriptis saab server ise varukoopia ka kustutada (forget ja prune). Kui ründaja serveri üle võtab, saab tema seda samuti teha. Selle vältimiseks on kaks võimalust:
- rest-server append-only-režiimis: salvestusserveris käivitad resticu enda rest-serveri valikuga
--append-only. Veebiserver saab siis varukoopiaid küll lisada, aga mitte midagi kustutada. Koristamise (forget --prune) teed teisest, hästi kaitstud masinast täisõigustega. - Versioonihaldusega või objektilukustusega salvestus S3-teenusepakkuja juures, nii et kustutatud objekte saab veel mõnda aega tagasi tuua.
Pane tähele peent lõksu, mida resticu dokumentatsioon ise mainib: ründaja, kes lisab võlts-hetktõmmiseid, võib panna sellise skeemi nagu --keep-weekly päris hetktõmmiseid unustama. Valikuga --keep-within (näiteks --keep-within 30d) jääb kõik sellest perioodist alles, olgu võlts või päris.
Kokkuvõte
- restic krüpteerib, deduplitseerib ja oskab salvestada paljudesse hoidlatesse väljaspool serverit; parool kadunud tähendab, et kõik on kadunud.
initloob repositooriumi,backupteeb hetktõmmise,snapshotsnäitab neid.forgetkoos--keep-*määrab, mida alles hoiad; allesprune(või--prune) koristab andmed päriselt. Proovi valikuga--dry-run.check(koos--read-data-subset) kontrollib,restore --targettaastab eraldi kausta,mountlaseb ringi vaadata.- Automatiseeri taimeri ja teavitusega ning hoia vähemalt üks repositoorium serveri käeulatusest väljas (append-only).
Test (quiz)
Ülesanne
Ülesanne Z8.2: Mis jääb alles pärast forget-käsku? Näidisfailis restic-snapshots.txt on hetktõmmiste loend ja säilitusskeem. Tee kindlaks, millised hetktõmmised jäävad alles pärast käsku restic forget selle skeemiga. Programm võrdleb sinu vastust kindla võtmega.
Ülesanne O8.2: Taastamise test. Loo oma serveris restic-repositoorium väljaspool serverit, tee varukoopia kaustast /etc ja oma andmetest ning taasta üks kaust kausta /tmp/terug. Võrdle käsuga diff, pane kirja, kui kaua see aega võttis, ja vasta, kus väljaspool serverit on hoitud sinu parool ja salvestusteenuse andmed.
Ülesanne O8.2: Taastamise test
Selle ülesande teed ise, keegi ei kontrolli seda. Märgi ära, mida tegid, ja märgi ülesanne tehtuks.
Repositoorium asub serverist erineva teenusepakkuja juures. diff ei näita erinevusi või ainult faile, mis muutusid pärast varundust. Parool on paroolihalduris ja paberil; append-only koopia kaitseb sissetungija tehtud kustutamise eest.
Su linnukesed ja märkmed jäävad ainult sellesse brauserisse, me ei saada neid kuhugi. Kui oled sisse loginud, salvestame Minu kursustes ainult info, et tegid ülesande ära.
Loe edasi
- Varundusstrateegia: 3-2-1 reegel sinu enda ettevõtte jaoks
- resticu dokumentatsioon, Preparing a new repository: https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html
- resticu dokumentatsioon, Removing backup snapshots (forget ja prune): https://restic.readthedocs.io/en/stable/060_forget.html
- resticu dokumentatsioon, Restoring from backup: https://restic.readthedocs.io/en/stable/050_restore.html
- rest-server (append-only): https://github.com/restic/rest-server
