Instalace a nastavení Restic

Kompletní průvodce od instalace přes první zálohu až po automatizaci – vše, co potřebujete vědět pro spolehlivé zálohování s Restic.

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
Pozor na verzi v repozitářích Distribuce mohou mít starší verzi Restic. Pokud potřebujete nejnovější verzi, doporučujeme stáhnout binární soubor přímo z GitHubu nebo použít příkaz 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
Tip: Bezpečné uložení hesla Pro automatizované zálohy můžete heslo uložit do souboru (--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.