Přejít na obsah

Nastavení cookies

Zvolte, které druhy cookies povolíte. Svou volbu můžete kdykoli změnit přes Nastavení cookies v dolní části každé stránky. Prohlášení o ochraně osobních údajů

Nezbytné

Vždy zapnuté

Potřebné pro přihlášení, uchování košíku a zapamatování vašich voleb. Jsou vždy zapnuté.

Které cookies?
  • weboke_sessie, weboke_klant, weboke_remember: vaše relace a trvalé přihlášení
  • weboke_basket: váš košík
  • wkBtwIncl: zobrazení cen s DPH nebo bez DPH
  • wok_cookies: vaše volba cookies, 12 měsíců

Měří, která reklama vede k návštěvě nebo objednávce, abychom neplatili za reklamy, které nic nepřinášejí.

Které cookies?
  • Google Ads přes Google Tag Manager (_gcl_au, _gcl_aw), až 90 dní
  • OpenAI Ads, reklamy v ChatGPT
  • wok_aff: partner, který vás k nám doporučil (partnerský program), 60 dní

4,6

Země a jazyk

Každá země má vlastní web s cenami a DPH dané země.

Zobrazit

Zálohy pomocí nástroje restic

Modul 8: Zálohy a monitoring · Doba čtení: 12 min.

Cíl lekce: Po této lekci budete umět pomocí nástroje restic vytvářet šifrované zálohy na úložiště mimo Váš server, mazat staré verze podle plánu uchovávání, kontrolovat zálohu, obnovovat soubory a nechat celý proces běžet automaticky.

Klíčové pojmy: restic, repozitář, init, heslo (soubor s heslem), backend (sftp, S3, rest-server), backup, snapshots, forget, --keep-daily/--keep-weekly/--keep-monthly, prune, check, restore, mount, deduplikace, append-only, systemd časovač

Proč restic?

Zálohovacích programů existuje mnoho. restic je dobrou volbou pro vlastní server, protože:

  • vše zašifruje dříve, než data opustí server; úložiště vidí jen nečitelné bloky;
  • deduplikuje: soubor, který se nezměnil, se znovu neukládá, takže denní zálohy zaberou málo místa;
  • podporuje mnoho druhů úložišť: adresář, jiný server přes SFTP, úložiště kompatibilní s S3, vlastní rest-server;
  • je to jediný program, dostupný v repozitáři balíčků Debianu i Ubuntu (apt install restic).

Alternativou s podobnými vlastnostmi je BorgBackup. Principy z této lekce platí i pro něj.

Základní pojmy

  • Repozitář: místo, kam restic ukládá zálohy. Vždy mimo server, který zálohujete.
  • Snapshot: jedna záloha v jednom okamžiku. (Pozor: jde o něco jiného než snapshot od Vašeho poskytovatele z lekce 8.1.)
  • Heslo: každý repozitář má heslo, kterým se vše šifruje. Dokumentace nástroje restic je v tom jednoznačná: kdo heslo ztratí, ztratí data nenávratně.

Vytvoření repozitáře

Předpokládejme, že máte úložný server backup.example.net, ke kterému se dostanete přes SFTP pomocí klíče jako uživatel web1. Nejprve na serveru vytvořte soubor s heslem (a totéž heslo si uložte do svého správce hesel, lekce 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.

Díky proměnným prostředí RESTIC_REPOSITORY a RESTIC_PASSWORD_FILE nemusíte pokaždé zadávat volby -r a --password-file.

Vytvoření zálohy

Nejprve výpis databáze (lekce 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 saved

Následující den proběhne mnohem rychleji: zálohuje se jen to, co se změnilo.

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

Úklid: forget a prune

Každý den jeden snapshot navíc znamená po roce 365 snapshotů. Příkazem forget určíte, které si ponecháte, a to pomocí plánu uchovávání:

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

Plán funguje takto:

  • --keep-daily 7: podívá se na posledních sedm dní, ve kterých existuje snapshot, a z každého dne ponechá ten nejnovější;
  • --keep-weekly 4: totéž pro poslední čtyři týdny (pondělí až neděle);
  • --keep-monthly 6: totéž pro posledních šest měsíců.

Snapshot zůstane zachován, pokud splňuje alespoň jedno z pravidel. Vše, co nesplňuje žádné pravidlo, bude zapomenuto. Nový plán si nejprve vyzkoušejte s volbou --dry-run: uvidíte, co by se odstranilo, aniž by se cokoli změnilo.

Důležitý rozdíl: forget odstraní pouze odkaz na snapshot. Data zůstávají v repozitáři, dokud prune neuklidí bloky, které už žádný snapshot nepoužívá. Volba --prune u příkazu forget to provede najednou. Prune zabere čas a uzamkne repozitář; neplánujte jej proto současně se zálohou.

Kontrola: check

Zálohu, která se tiše poškodí, odhalíte až při obnově. Nechte proto restic repozitář pravidelně kontrolovat:

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

Samotný check kontroluje strukturu. S volbou --read-data-subset skutečně načte i část dat zpět a zkontroluje jejich obsah. Provádějte to například jednou týdně s několika procenty; za čas tak budou všechna data alespoň jednou přečtena.

Obnova: restore a mount

Obnovujte do samostatného adresáře, nikdy rovnou přes 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
gelijk

latest je nejnovější snapshot; můžete použít i ID (restic restore 3c7e91d4 ...). Pomocí restic mount /mnt/restic (vyžaduje FUSE) uvidíte všechny snapshoty jako adresáře, můžete se v nich rozhlédnout a kopírovat jednotlivé soubory. Ukončíte to klávesami Ctrl+C.

Databázi obnovíte tak, že vytáhnete výpis ze zálohy a naimportujete jej, například gunzip < alles.sql.gz | mariadb.

Automaticky, každou noc

Vytvořte skript a systemd časovač (lekce 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

K tomu .service s Type=oneshot a ExecStart=/usr/local/sbin/backup.sh a .timer s OnCalendar=*-*-* 03:10:00 a Persistent=true. set -eu zajistí, že se skript zastaví při první chybě, takže systemd vyhodnotí běh jako neúspěšný. Připojte k tomu upozornění (lekce 8.3), jinak si nepovedené zálohy nevšimnete.

Proti ransomwaru: append-only

Ve skriptu výše může server zálohu také sám smazat (forget a prune). Pokud útočník server ovládne, může to tedy udělat i on. Existují dva způsoby, jak tomu zabránit:

  • rest-server v režimu append-only: na úložném serveru provozujete vlastní rest-server od restic s volbou --append-only. Webový server pak může zálohy přidávat, ale nic mazat. Úklid (forget --prune) provádíte z jiného, dobře zabezpečeného počítače s plnými oprávněními.
  • Úložiště se správou verzí nebo uzamčením objektů u poskytovatele S3, takže smazané objekty lze ještě nějakou dobu obnovit.

Dejte pozor na záludnou past, kterou zmiňuje sama dokumentace nástroje restic: útočník, který přidá falešné snapshoty, může plán jako --keep-weekly přimět k zapomenutí skutečných snapshotů. S --keep-within (například --keep-within 30d) zůstane zachováno vše z daného období, falešné i skutečné.

Shrnutí

  • restic šifruje, deduplikuje a umí zálohovat na mnoho druhů úložišť mimo Váš server; ztracené heslo znamená ztracená data.
  • init vytvoří repozitář, backup snapshot, snapshots je zobrazí.
  • forget s --keep-* určuje, co si ponecháte; teprve prune (nebo --prune) data skutečně uklidí. Zkoušejte s --dry-run.
  • check (s --read-data-subset) kontroluje, restore --target obnovuje do samostatného adresáře, mount Vám umožní se v zálohách rozhlédnout.
  • Automatizujte pomocí časovače a upozornění a mějte alespoň jeden repozitář mimo dosah serveru (append-only).

Kvíz

1. Co se stane, když spustíte restic forget --keep-daily 7 bez --prune?



2. Heslo ke svému repozitáři restic máte uložené pouze v /root/.restic-wachtwoord na serveru. Server byl ztracen. Co teď?



3. Proč obnovujete zálohu do /tmp/terug, a ne rovnou na původní místo?



4. Co přidává restic check --read-data-subset=5% oproti běžnému restic check?



5. Útočník, který ovládne Váš webový server, může přes zálohovací skript spustit i restic forget --prune. Co Vás před tím ochrání?



Úkol

Úkol Z8.2: Co zůstane po příkazu forget? V ukázkovém souboru restic-snapshots.txt najdete seznam snapshotů a plán uchovávání. Určete, které snapshoty zůstanou po restic forget s tímto plánem. Program odpověď porovná s pevným klíčem.

Úkol Z8.2: Co zůstane po příkazu forget?

Soubor k tomuto úkolu: restic-snapshots.txt





Co vyplníte a co zjistíme, neukládáme. Váš prohlížeč si pamatuje Vaše odpovědi a to, zda jste úkol splnili. Pokud jste přihlášeni, ukládáme v sekci Moje kurzy pouze to, že jste úkol měli (téměř) správně; i to tam můžete odstranit.

Úkol O8.2: Test obnovy. Na svém vlastním serveru vytvořte repozitář restic mimo server, zazálohujte /etc a svá data a jeden adresář obnovte do /tmp/terug. Porovnejte pomocí diff, zapište si, jak dlouho to trvalo, a odpovězte, kde máte mimo server uložené heslo a přístupové údaje k úložišti.

Úkol O8.2: Test obnovy

Tento úkol provádíte sami; nikdo ho nekontroluje. Odškrtněte, co jste udělali, a označte úkol jako splněný.




Vaše zaškrtnutí a poznámky zůstávají pouze v tomto prohlížeči; nikam je neposíláme. Pokud jste přihlášeni, ukládáme v sekci Moje kurzy pouze to, že jste úkol splnili.

Doporučujeme k přečtení

Chvíli strpení…

Nastavení vašich domén

U každé domény nastavte jmenné servery, propojení s hostingem a to, kdo bude držitelem.

Načítání vašich domén…