Modul 8 · 8.2
Slovenčina
Zálohy pomocou restic
Modul 8: Zálohy a monitorovanie · Čas čítania: 12 minút
Cieľ lekcie: Po tejto lekcii dokážete pomocou restic vytvárať šifrované zálohy na úložisko mimo vášho servera, mazať staré verzie podľa plánu uchovávania, kontrolovať zálohu a obnovovať súbory a celé to nechať bežať automaticky.
Kľúčové pojmy: restic, repozitár, init, heslo (súbor s heslom), backend (sftp, S3, rest-server), backup, snapshots, forget, --keep-daily/--keep-weekly/--keep-monthly, prune, check, restore, mount, deduplikácia, append-only, systemd časovač
Prečo restic?
Zálohovacích programov je veľa. restic je dobrá voľba pre vlastný server, pretože:
- všetko zašifruje skôr, ako to opustí server; úložisko vidí len nečitateľné bloky;
- deduplikuje: súbor, ktorý sa nezmenil, sa znova neukladá, takže denné zálohy zaberú málo miesta;
- pozná veľa druhov úložísk: priečinok, iný server cez SFTP, úložisko kompatibilné s S3, vlastný rest-server;
- je to jeden program, dostupný v repozitári balíkov Debianu aj Ubuntu (
apt install restic).
Alternatívou s podobnými vlastnosťami je BorgBackup. Princípy z tejto lekcie platia aj tam.
Pojmy
- Repozitár: miesto, kam restic ukladá zálohy. Vždy mimo servera, ktorý zálohujete.
- Snapshot: jedna záloha v jednom okamihu. (Pozor: ide o niečo iné ako snapshot od vášho poskytovateľa z lekcie 8.1.)
- Heslo: každý repozitár má heslo, ktorým sa všetko šifruje. Dokumentácia restic je v tom jasná: kto stratí heslo, nenávratne stratí aj dáta.
Vytvorenie repozitára
Predpokladajme, že máte úložný server backup.example.net, ku ktorému sa dostanete cez SFTP s kľúčom ako používateľ web1. Najprv na serveri vytvorte súbor s heslom (a rovnaké heslo uložte aj do svojho správcu hesiel, lekcia 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.Vďaka premenným prostredia RESTIC_REPOSITORY a RESTIC_PASSWORD_FILE nemusíte zakaždým písať voľby -r a --password-file.
Vytvorenie zálohy
Najprv výpis databázy (lekcia 8.1), potom záloha:
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 savedNa druhý deň je záloha oveľa rýchlejšia: prenesie sa len to, čo sa zmenilo.
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 snapshotsUpratovanie: forget a prune
Každý deň jeden snapshot navyše znamená po roku 365 snapshotov. Príkazom forget pomocou plánu uchovávania určíte, ktoré si ponecháte:
root@web1:~# restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prunePlán funguje takto:
--keep-daily 7: pozrie sa na posledných sedem dní, v ktoré existuje snapshot, a z každého dňa ponechá najnovší;--keep-weekly 4: to isté pre posledné štyri týždne (pondelok až nedeľa);--keep-monthly 6: to isté pre posledných šesť mesiacov.
Snapshot zostane, ak spĺňa aspoň jedno z pravidiel. Všetko, čo nespĺňa žiadne pravidlo, sa zabudne. Nový plán najprv vyskúšajte s --dry-run: uvidíte, čo by sa odstránilo, bez toho, aby sa čokoľvek zmenilo.
Dôležitý rozdiel: forget odstráni len odkaz na snapshot. Dáta zostanú v repozitári, kým prune neuprace bloky, ktoré už nepoužíva žiadny snapshot. Voľba --prune pri forget to urobí naraz. Prune trvá dlhšie a uzamkne repozitár, preto ho neplánujte na rovnaký čas ako zálohu.
Kontrola: check
Zálohu, ktorá sa potichu poškodí, odhalíte až pri obnove. Nechajte restic pravidelne kontrolovať repozitár:
root@web1:~# restic check
...
no errors were found
root@web1:~# restic check --read-data-subset=5%Samotný check kontroluje štruktúru. S --read-data-subset aj skutočne načíta časť dát a skontroluje ich obsah. Robte to napríklad raz týždenne s niekoľkými percentami; po čase sa tak všetko aspoň raz prečíta.
Obnova: restore a mount
Obnovujte do samostatného priečinka, nikdy rovno cez originál:
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 je najnovší snapshot; môžete použiť aj ID (restic restore 3c7e91d4 ...). Pomocou restic mount /mnt/restic (vyžaduje FUSE) vidíte všetky snapshoty ako priečinky, môžete si ich prezerať a kopírovať jednotlivé súbory. Ukončíte to klávesmi Ctrl+C.
Databázu obnovíte tak, že vrátite výpis a naimportujete ho, napríklad gunzip < alles.sql.gz | mariadb.
Automaticky, každú noc
Vytvorte skript a systemd časovač (lekcia 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Ďalej .service s Type=oneshot a ExecStart=/usr/local/sbin/backup.sh a .timer s OnCalendar=*-*-* 03:10:00 a Persistent=true. set -eu zabezpečí, že sa skript zastaví pri prvej chybe, takže systemd vyhodnotí beh ako neúspešný. Pripojte k tomu upozornenie (lekcia 8.3), inak si neúspešnú zálohu nevšimnete.
Proti ransomvéru: append-only
V skripte vyššie môže zálohu zmazať aj samotný server (forget a prune). Ak útočník ovládne server, môže to teda urobiť aj on. Dá sa tomu zabrániť dvoma spôsobmi:
- rest-server v režime append-only: na úložnom serveri spustíte vlastný rest-server od restic s voľbou
--append-only. Webový server potom môže zálohy pridávať, ale nič nezmaže. Upratovanie (forget --prune) robíte z iného, dobre zabezpečeného počítača s plnými právami. - Úložisko s verziovaním alebo uzamknutím objektov u poskytovateľa S3, takže odstránené objekty sa dajú ešte istý čas obnoviť.
Pozor na zákernú pascu, ktorú uvádza samotná dokumentácia restic: útočník, ktorý pridá falošné snapshoty, môže plán ako --keep-weekly prinútiť zabudnúť skutočné snapshoty. S --keep-within (napríklad --keep-within 30d) zostane všetko z daného obdobia, falošné aj skutočné.
Zhrnutie
- restic šifruje, deduplikuje a vie zálohovať na veľa druhov úložísk mimo vášho servera; stratené heslo znamená stratené všetko.
initvytvorí repozitár,backupsnapshot,snapshotsich zobrazí.forgets--keep-*určuje, čo si ponecháte; dáta skutočne uprace ažprune(alebo--prune). Skúšajte s--dry-run.check(s--read-data-subset) kontroluje,restore --targetobnovuje do samostatného priečinka,mountvám umožní prezerať zálohy.- Automatizujte pomocou časovača a upozornenia a aspoň jeden repozitár majte mimo dosahu servera (append-only).
Kvíz
Úloha
Úloha Z8.2: Čo zostane po príkaze forget? V ukážkovom súbore restic-snapshots.txt je zoznam snapshotov a plán uchovávania. Určte, ktoré snapshoty zostanú po restic forget s týmto plánom. Program to porovná s pevným kľúčom.
Úloha O8.2: Test obnovy. Na vlastnom serveri vytvorte repozitár restic mimo servera, zálohujte /etc a svoje dáta a jeden priečinok obnovte do /tmp/terug. Porovnajte pomocou diff, zapíšte si, ako dlho to trvalo, a odpovedzte, kde mimo servera máte uložené heslo a prístupové údaje k úložisku.
Úloha O8.2: Test obnovy
Túto úlohu vykonávate sami, nikto ju nekontroluje. Odškrtnite, čo ste urobili, a označte úlohu ako splnenú.
Repository je u iného poskytovateľa než server. diff neukazuje žiadne rozdiely, alebo len súbory, ktoré sa zmenili po zálohe. Heslo v správcovi hesiel a na papieri; kópia append-only chráni pred vymazaním útočníkom.
Vaše zaškrtnutia a poznámky zostávajú iba v tomto prehliadači, nikam ich neposielame. Po prihlásení si v sekcii Moje kurzy uchovávame iba to, že ste úlohu splnili.
Ďalšie čítanie
- Stratégia zálohovania: pravidlo 3-2-1 pre vašu vlastnú firmu
- Dokumentácia restic, Preparing a new repository: https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html
- Dokumentácia restic, Removing backup snapshots (forget a prune): https://restic.readthedocs.io/en/stable/060_forget.html
- Dokumentácia restic, Restoring from backup: https://restic.readthedocs.io/en/stable/050_restore.html
- rest-server (append-only): https://github.com/restic/rest-server
