Debian 12 se Snapper: Zálohování a obnova systému snadno a rychle

Úvod:

Chceš mít systém, který odolá chybám, nečekaným pádům nebo špatným aktualizacím? S kombinací Btrfs a Snapperu získáš automatické snapshoty, rychlé rollbacky a obnovu systému přímo z GRUB.

:small_blue_diamond: Co tě v návodu čeká?

  • Instalace Debianu 12 s Btrfs
  • Nastavení Snapperu a správy snapshotů
  • Možnost obnovy systému při startu
  • Ochrana před rozbitými aktualizacemi

:bulb: Výhody? Rychlé návraty do funkčního stavu, šetření místem a vyšší stabilita systému.


Prvotní instalace:

  • Spustíme instalaci Debian 12 a zvolíme ruční rozdělení systémového disku.
  • Následně nastavíme konfiguraci disku:
    • Tabulku oddílů nastavíme na GPT.
    • Přidáme následující oddíly:
      • /boot/efi/ s velikostí 1000M.
        *pozn.: pokud používáte stále bios použijeme /boot oddíl
      • / (kořenový adresář) – použijeme zbytek úložiště a přiřadíme mu souborový systém Btrfs. (v mém případě jsem oddelil /home kvůli šifrování a lepší záloze dat, což vy nemusíte.)
        • Minimální doporučená velikost:
          • Bez GUI (serverová instalace): 15–20 GB
          • S GUI (desktopová instalace): 25–30 GB
          • S více aplikacemi, aktualizacemi a Snapperem: 40+ GB
        • Poznámka: Jelikož Snapper využívá Btrfs snapshots, doporučuje se ponechat dostatečnou rezervu na zálohy. Pokud plánujete časté aktualizace a práci se snímky, doporučuje se 50+ GB.
      • /home (domovský adresář) – v mém případě jsem zvolil ext4 a zapnul šifrování pomocí LUKS.
      • SWAP – odkládací prostor nastavíme dle potřeby.

Poznámka:
Při prvním spuštění nového OS je klávesnice nastavena na EN. Pokud se vám nedaří odemknout šifrovaný OS, pište pomocí EN klávesnice, po spuštění OS a jeho následného restartu se to přenastaví na CZ.



Po instalaci OS

Po dokončení instalace je vhodné systém hned aktualizovat:

sudo apt update && sudo apt upgrade -y

Tento příkaz:

  • sudo apt update – aktualizuje seznam balíčků z repozitářů.
  • sudo apt upgrade -y – instaluje všechny dostupné aktualizace.

Pozn.:Doporučuje se provádět aktualizace pravidelně pro zajištění stability a bezpečnosti systému.



Zprovoznění Snapper záloh

Příprava adresářů pro Snapper

  1. Vytvoření hlavního adresáře pro Btrfs

    sudo mkdir -p /btrfsroot
    
  2. Zjištění ID hlavního disku (/)

    df --output=source / | tail -n 1
    
  3. Přidání hlavního Btrfs subsvazku (subvolid=5) do /etc/fstab

    printf "$(df --output=source / | tail -n 1) /btrfsroot    btrfs    defaults,subvolid=5    0    0\n" | sudo tee -a /etc/fstab
    
  4. Připojení Btrfs root subsvazku

    sudo mount /btrfsroot
    


Příprava /etc/fstab struktury

Přesun /home do samostatného subsvazku na Btrfs (pokud není šifrován a na samotném diskovém oddílu, jako v mém případě)

Přesunutí /home do subsvazku v běžícím systému může být složitější, ale následující postup funguje pro jednouživatelský systém:

  1. Vytvoření subsvazku pro /home

    sudo btrfs subvol create /btrfsroot/@home
    
  2. Zkopírování obsahu současného /home do nového subsvazku

    sudo cp -a --reflink=always /home/. /btrfsroot/@home
    
  3. Nastavení správných oprávnění

    sudo chown -R $(whoami):$(whoami) /btrfsroot/@home
    
  4. Úprava /etc/fstab pro nový /home

    printf "$(df --output=source / | tail -n 1) /home    btrfs    defaults,subvol=@home    0    0\n" | sudo tee -a /etc/fstab
    
  5. Restart systému, aby se změny projevily

    sudo reboot
    
  6. Po restartu a ověření správného připojení /home smažte starý adresář (pokud již není potřeba)

    sudo rm -rf /btrfsroot/@rootfs/home
    

Poznámka

Tento postup lze aplikovat i na další uživatelské složky, např. /home/${USER}/data, pokud chcete oddělit specifické adresáře. V takovém případě není nutný restart systému – stačí provést odpojení a připojení (umount a mount). Já osobně jsem se tomuto vyhnul, protože neplánuji dělat snapper zálohy domovského adresáře a jak jsem zmínil, mám adresář šifrovaný na jiném diskovém oddíle.


Příprava dalších podadresářů v Btrfs

Stejný postup jako u /home lze použít i pro přesunutí dalších systémových adresářů do vlastních subsvazků, bez změny vlastnictví souborů. V závislosti na konkrétní cestě nemusí být nutný restart systému.


Vytvoření samostatného subsvazku pro /var/log (nutné pro grub-btrfs)

Důvod: /var/log obsahuje logovací soubory, které mohou rychle růst. Oddělení do vlastního subsvazku zajistí lepší správu záloh.

  1. Vytvoření subsvazku pro /var/log

    sudo btrfs subvol create /btrfsroot/@var_log
    
  2. (Volitelně) Zkopírování stávajícího obsahu
    (Ignorujte případné chyby.)

    sudo cp -RT --reflink=always /var/log /btrfsroot/@var_log
    
  3. Přidání subsvazku do /etc/fstab

    printf "$(df --output=source / | tail -n 1) /var/log    btrfs    defaults,subvol=@var_log    0    0\n" | sudo tee -a /etc/fstab
    
  4. Připojení subsvazku bez restartu

    sudo systemctl daemon-reload
    sudo mount /var/log
    
  5. Odstranění starého obsahu /var/log

    sudo rm -rf /btrfsroot/@rootfs/var/log/*
    


Vytvoření samostatného subsvazku pro /tmp

Důvod: /tmp slouží k dočasným souborům, které se často mění. Samostatný subsvazek pomáhá zabránit jejich uchování v zálohách.

Pozor: Tento proces obvykle vyžaduje restart systému.

  1. Vytvoření subsvazku pro /tmp

    sudo btrfs subvol create /btrfsroot/@tmp
    
  2. Zkopírování stávajícího obsahu /tmp

    sudo cp -RT --reflink=always /tmp /btrfsroot/@tmp
    
  3. Přidání subsvazku do /etc/fstab

    printf "$(df --output=source / | tail -n 1) /tmp    btrfs    defaults,subvol=@tmp    0    0\n" | sudo tee -a /etc/fstab
    
  4. Restart systému

    sudo reboot
    
  5. Po restartu smazání starého obsahu /tmp

    sudo rm -rf /btrfsroot/@rootfs/tmp/*
    sudo rm -rf /btrfsroot/@rootfs/tmp/.* 2>/dev/null
    

    (Druhý příkaz odstraní i skryté soubory, ale může vyvolat chybu, pokud žádné nejsou – tu lze bezpečně ignorovat.)



Kontrola /etc/fstab po úpravách

Po dokončení všech kroků by měl soubor /etc/fstab obsahovat následující položky:

subvolid=5 -> /btrfsroot
subvol=@home -> /home
subvol=@var_log -> /var/log
subvol=@tmp -> /tmp (volitelné, ale doporučené)


Instalace aplikací pro zprovoznění Snapper záloh

K zajištění plné funkčnosti Snapperu budeme potřebovat tři základní aplikace:

  • Snapper – správa snapshotů (snímků systému).
  • Grub-BTRFS – integrace snapshotů do zavaděče GRUB.
  • Snapper-Rollback – nástroj pro obnovu systému ze snapshotu.

Než je nainstalujeme, je potřeba doinstalovat potřebné závislosti:

sudo apt-get install btrfs-progs python3-btrfsutil gawk inotify-tools make build-essential git

Instalace a konfigurace Snapperu

1️. Instalace Snapperu

sudo apt install snapper

2️. Konfigurace Snapperu

  1. Vytvoření základní konfigurace pro /
    sudo snapper -c root create-config /
    

  1. Vytvoření subsvazku pro snapshoty

    sudo btrfs subvol create /btrfsroot/@snapshots
    
  2. Vytvoření připojovacího adresáře pro snapshoty

    sudo mkdir -p /.snapshots
    
  3. Přidání subsvazku do /etc/fstab a jeho připojení

    printf "$(df --output=source / | tail -n 1) /.snapshots    btrfs    defaults,subvol=@snapshots    0    0\n" | sudo tee -a /etc/fstab
    sudo mount /.snapshots
    

Instalace Grub-BTRFS

  1. Stažení repozitáře
    git clone https://github.com/Antynea/grub-btrfs.git
    
  2. Přechod do složky a spuštění instalace
    cd grub-btrfs
    sudo make
    sudo make install
    
  3. Povolení služby pro automatickou detekci snapshotů
    sudo systemctl enable grub-btrfsd
    sudo systemctl start grub-btrfsd
    
  4. Aktualizace GRUB
    sudo update-grub
    
    Poznámka: Pokud se zobrazí varování, že nebyly nalezeny žádné snapshoty, není to problém – systém je čerstvě nainstalován a žádné snapshoty zatím neexistují.


Instalace Snapper-Rollback

Stejně jako u Grub-BTRFS budeme muset aplikaci stáhnout z GitHubu:

  1. Stažení repozitáře a instalace
    git clone https://github.com/jrabinow/snapper-rollback.git
    cd snapper-rollback
    sudo cp snapper-rollback.py /usr/local/bin/snapper-rollback
    sudo cp snapper-rollback.conf /etc/
    

Test Snapperu v praxi

Pro ověření funkčnosti snapshotů provedeme test:

  1. Nainstalujeme testovací aplikaci (btop)
    sudo apt install btop -y
    
  2. Aktualizujeme GRUB, aby reflektoval nový snapshot
    sudo update-grub
    
  3. Restartujeme systém
    sudo reboot
    

Po restartu si v GRUB všimneme nové položky snapshots. Klikneme na ni a vybereme snapshot označený jako PRE (před instalací aplikace btop).Zapamatujeme si číslo snapshotu, např. 1.

  1. Spuštění systému ze snapshotu
    Po startu ze snapshotu zjistíme, že aplikace btop není nainstalovaná, což potvrzuje správnou funkčnost Snapper rollbacku.

  2. Trvalé vrácení systému k tomuto snapshotu
    Pokud chceme, aby systém vždy startoval z tohoto bodu obnovy, spustíme:

    sudo snapper-rollback 1
    

    Potvrdíme příkaz opsáním slova CONFIRM velkými písmeny.


Pozn.: před tvrdou obnovou snapper zálohy si můžeme snapper pouze vyzkoušet a to příkazem: snapper-rollback 1 --dry-run tím se vyzkouší zda-li snapper není poškozen a je bezpečné jej obnovit.


Další tipy a automatizace správy GRUB

Pokud chceš automatizovat aktualizaci GRUB po instalaci nových balíčků nebo jádra, můžeš použít tento postup:

1️. Vytvoření APT hooku pro automatickou aktualizaci GRUB

APT umožňuje spouštět vlastní skripty po dokončení instalací a aktualizací. Můžeme toho využít k automatické aktualizaci GRUB.

Postup:

  1. Vytvoř soubor s hookem:
    sudo nano /etc/apt/apt.conf.d/99update-grub
    
  2. Přidej následující obsah:
    DPkg::Post-Invoke { "if [ -x /usr/sbin/update-grub ]; then /usr/sbin/update-grub; fi"; };
    
  3. Ulož soubor (CTRL + X, poté Y a Enter).

:white_check_mark: Tento skript zajistí, že se update-grub spustí po každé operaci apt upgrade nebo apt install.

2️. Použití dpkg triggeru (doporučeno pro aktualizaci jádra)

Pokud chceš aktualizovat GRUB jen při instalaci nového jádra, je lepší použít trigger přímo v dpkg.

Postup:

  1. Vytvoř soubor v adresáři postinst.d:
    sudo nano /etc/kernel/postinst.d/update-grub
    
  2. Přidej tento obsah:
    #!/bin/sh
    set -e
    /usr/sbin/update-grub
    
  3. Ulož soubor a nastav mu spustitelná práva:
    sudo chmod +x /etc/kernel/postinst.d/update-grub
    

:white_check_mark: Tento skript se spustí pouze při instalaci nového jádra.


Grafické rozhraní pro Snapper

Pokud preferujete GUI pro správu snapshotů, doporučuje se nainstalovat aplikaci snapper-gui:

sudo apt install snapper-gui

Tuto aplikaci je nutné spouštět s oprávněním root, protože Snapper spravuje systémové snapshoty:

sudo snapper-gui

:white_check_mark: Snapper-GUI umožňuje jednodušší správu snapshotů pomocí vizuálního rozhraní, což je užitečné zejména pro začátečníky nebo ty, kteří chtějí mít lepší přehled nad historií změn v systému.


Tento návod vychází z projektu GitHub. Velké poděkování autorovi za jeho skvělou práci a sdílení užitečných informací!

Líbí se vám moje práce? Podívejte se na mou Wiki, kde najdete třeba podrobný návod na instalaci Debianu 12. :slightly_smiling_face:

1 lajk