Instalace Restic
Restic je dostupný pro Linux, macOS, Windows, FreeBSD a OpenBSD. Díky tomu, že je napsaný v Go a kompiluje se do jediného binárního souboru, je instalace velmi jednoduchá na všech platformách.
Linux – balíčkovací systémy
Nejsnadnější způsob instalace na Linuxu je přes balíčkovací systém vaší distribuce:
# Debian / Ubuntu
sudo apt install restic
# Fedora
sudo dnf install restic
# Arch Linux
sudo pacman -S restic
# openSUSE
sudo zypper install restic
# Alpine Linux
sudo apk add restic
# Nix
nix-env -i restic
restic self-update (vyžaduje root oprávnění).
macOS
# Homebrew
brew install restic
# MacPorts
sudo port install restic
Windows
# Scoop
scoop install restic
# Chocolatey
choco install restic
# WinGet
winget install restic
Docker
# Oficiální Docker obraz
docker run --rm -v /data:/data -v /repo:/repo \
restic/restic -r /repo backup /data
Stažení binárního souboru
Pokud preferujete manuální instalaci, stáhněte si binární soubor z oficiální stránky vydání na GitHubu (github.com/restic/restic/releases). Soubor rozbalte, přesuňte do adresáře v PATH (např. /usr/local/bin/) a nastavte oprávnění ke spuštění:
# Stažení a instalace na Linux (amd64)
wget https://github.com/restic/restic/releases/download/v0.17.3/restic_0.17.3_linux_amd64.bz2
bunzip2 restic_0.17.3_linux_amd64.bz2
chmod +x restic_0.17.3_linux_amd64
sudo mv restic_0.17.3_linux_amd64 /usr/local/bin/restic
# Ověření instalace
restic version
Inicializace repozitáře
Před vytvořením první zálohy je nutné inicializovat repozitář – datovou strukturu, do které bude Restic ukládat zálohy. Při inicializaci zadáte heslo, které chrání veškerá data v repozitáři.
Lokální repozitář
# Inicializace repozitáře na lokálním disku
restic init --repo /mnt/backup/restic-repo
# Systém vás požádá o heslo:
# enter password for new repository:
# enter password again:
Repozitář na vzdáleném serveru (SFTP)
# Inicializace přes SFTP
restic init --repo sftp:user@server:/backup/restic-repo
Repozitář na Backblaze B2
# Nastavení přihlašovacích údajů
export B2_ACCOUNT_ID="váš-account-id"
export B2_ACCOUNT_KEY="váš-application-key"
# Inicializace na B2
restic init --repo b2:nazev-bucketu:cesta/v/bucketu
Repozitář na S3 (AWS nebo kompatibilní)
# Nastavení přihlašovacích údajů
export AWS_ACCESS_KEY_ID="váš-access-key"
export AWS_SECRET_ACCESS_KEY="váš-secret-key"
# Inicializace na S3
restic init --repo s3:s3.amazonaws.com/nazev-bucketu/restic
--password-file /cesta/k/heslu) nebo proměnné prostředí (RESTIC_PASSWORD). Soubor s heslem by měl mít oprávnění 600 (čitelný pouze vlastníkem). Nikdy neukládejte heslo přímo do skriptů v Git repozitářích.
Vytvoření první zálohy
Po inicializaci repozitáře můžete vytvořit první zálohu pomocí příkazu restic backup:
# Záloha jednoho adresáře
restic -r /mnt/backup/restic-repo backup /home/user/dokumenty
# Záloha více adresářů
restic -r /mnt/backup/restic-repo backup /home /etc /var/www
# Záloha s vyloučením souborů
restic -r /mnt/backup/restic-repo backup /home \
--exclude="*.tmp" \
--exclude=".cache" \
--exclude="node_modules"
# Záloha s tagy
restic -r /mnt/backup/restic-repo backup --tag server,daily /data
# Záloha s omezením šířky pásma (5 MiB/s upload)
restic -r b2:muj-bucket:zalohy backup --limit-upload 5120 /data
První záloha nahraje všechna data. Následné zálohy budou mnohem rychlejší, protože Restic díky deduplikaci nahraje pouze změněné a nové bloky. Typicky druhá záloha trvá jen zlomek času první.
Výpis snapshotů
# Zobrazení všech snapshotů
restic -r /mnt/backup/restic-repo snapshots
# Výstup:
# ID Time Host Tags Paths
# ---------------------------------------------------------------
# abc12345 2024-01-15 02:00:05 server1 daily /data
# def67890 2024-01-16 02:00:03 server1 daily /data
# ghi24680 2024-01-17 02:00:07 server1 daily /data
# Filtrování podle hostname
restic -r /mnt/backup/restic-repo snapshots --host server1
# Filtrování podle tagu
restic -r /mnt/backup/restic-repo snapshots --tag daily
Obnovení dat
Restic nabízí několik způsobů obnovení dat z zálohy:
Obnovení celého snapshotu
# Obnovení posledního snapshotu do adresáře
restic -r /mnt/backup/restic-repo restore latest --target /tmp/restore
# Obnovení konkrétního snapshotu
restic -r /mnt/backup/restic-repo restore abc12345 --target /tmp/restore
# Obnovení pouze konkrétních souborů/adresářů
restic -r /mnt/backup/restic-repo restore latest \
--target /tmp/restore \
--include "/data/dokumenty" \
--include "/data/fotky"
Procházení záloh pomocí mount
# Připojení repozitáře jako souborového systému (vyžaduje FUSE)
mkdir /mnt/restic
restic -r /mnt/backup/restic-repo mount /mnt/restic
# Nyní můžete procházet zálohy jako běžné soubory:
ls /mnt/restic/snapshots/
ls /mnt/restic/hosts/server1/latest/data/
# Po dokončení odpojte:
# (Ctrl+C v terminálu, kde běží mount, nebo fusermount -u /mnt/restic)
Správa snapshotů – forget a prune
Časem se v repozitáři nahromadí velké množství snapshotů. Příkaz restic forget s politikami retence umožňuje automaticky mazat starší snapshoty:
# Zachovat posledních 7 denních, 4 týdenní a 12 měsíčních snapshotů
restic -r /mnt/backup/restic-repo forget \
--keep-last 7 \
--keep-weekly 4 \
--keep-monthly 12 \
--keep-yearly 3 \
--prune
# Dry-run – zobrazí, co by smazal, aniž by skutečně smazal
restic -r /mnt/backup/restic-repo forget \
--keep-last 7 \
--keep-weekly 4 \
--dry-run
Parametr --prune zajistí, že po smazání snapshotů budou uvolněny i nepotřebné datové bloky. Bez --prune by snapshoty byly odstraněny, ale data by zůstala na úložišti.
Automatizace s cron a systemd
Pro spolehlivé zálohování je nezbytné zálohy automatizovat. Na Linuxu máte dvě hlavní možnosti: tradiční cron nebo modernější systemd timers.
Automatizace pomocí cron
# Vytvořte zálohovací skript /usr/local/bin/backup.sh
#!/bin/bash
export RESTIC_REPOSITORY="b2:muj-bucket:zalohy"
export RESTIC_PASSWORD_FILE="/root/.restic-password"
export B2_ACCOUNT_ID="váš-account-id"
export B2_ACCOUNT_KEY="váš-application-key"
# Vytvoření zálohy
restic backup /home /etc /var/www \
--exclude=".cache" \
--exclude="node_modules" \
--tag auto,daily
# Retence – zachovat posledních 7 denních, 4 týdenní, 12 měsíčních
restic forget \
--keep-last 7 \
--keep-weekly 4 \
--keep-monthly 12 \
--prune
# Kontrola integrity (jednou za čas)
if [ "$(date +%u)" -eq 7 ]; then
restic check
fi
# Přidejte do crontab:
# sudo crontab -e
# 0 2 * * * /usr/local/bin/backup.sh >> /var/log/restic-backup.log 2>&1
Automatizace pomocí systemd
# /etc/systemd/system/restic-backup.service
[Unit]
Description=Restic záloha
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
EnvironmentFile=/etc/restic/env
# /etc/systemd/system/restic-backup.timer
[Unit]
Description=Spouštění Restic zálohy každý den ve 2:00
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
RandomizedDelaySec=900
[Install]
WantedBy=timers.target
# Aktivace:
# sudo systemctl enable --now restic-backup.timer
# Kontrola stavu:
# sudo systemctl status restic-backup.timer
# sudo journalctl -u restic-backup.service
Použití s rclone backendem
Pro přístup k úložištím, které Restic nativně nepodporuje, můžete použít rclone jako backend. rclone podporuje přes 70 cloudových služeb, takže Restic tak získá přístup prakticky kamkoli:
# Nejprve nakonfigurujte rclone:
rclone config
# (vytvořte remote s názvem např. "onedrive")
# Inicializace Restic repozitáře přes rclone
restic -r rclone:onedrive:restic-backup init
# Záloha přes rclone
restic -r rclone:onedrive:restic-backup backup /data
Proměnné prostředí
Restic podporuje řadu proměnných prostředí pro zjednodušení příkazů a automatizaci:
| Proměnná | Popis |
|---|---|
RESTIC_REPOSITORY |
Cesta k repozitáři (náhrada za -r) |
RESTIC_PASSWORD |
Heslo k repozitáři (méně bezpečné než password-file) |
RESTIC_PASSWORD_FILE |
Cesta k souboru s heslem |
RESTIC_PASSWORD_COMMAND |
Příkaz, který vrátí heslo (integrace se správcem hesel) |
B2_ACCOUNT_ID |
Backblaze B2 Account ID |
B2_ACCOUNT_KEY |
Backblaze B2 Application Key |
AWS_ACCESS_KEY_ID |
AWS/S3 Access Key |
AWS_SECRET_ACCESS_KEY |
AWS/S3 Secret Key |
Řešení běžných problémů
Zapomenuté heslo
Pokud zapomenete heslo k repozitáři, data nelze obnovit. Restic neukládá heslo nikam a neexistuje žádný způsob, jak šifrování obejít. Proto je naprosto kritické heslo bezpečně uložit na více místech (správce hesel, trezor, zapečetěná obálka).
Chyba „Fatal: unable to open config file"
Tato chyba obvykle znamená, že repozitář na zadané cestě neexistuje nebo k němu nemáte přístup. Ověřte cestu, přihlašovací údaje a oprávnění. Pokud používáte cloudové úložiště, zkontrolujte proměnné prostředí s přihlašovacími údaji.
Pomalá záloha
Pokud je záloha pomalá, zkontrolujte rychlost připojení k úložišti. Pro SFTP zkuste použít rest-server, který je výrazně rychlejší díky paralelním přenosům. Pro cloudové úložiště zvažte zvýšení paralelismu pomocí proměnné RESTIC_PACK_SIZE a parametru -o s3.connections=10.