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.
🔹 Co tě v návodu čeká?
💡 Výhody? Rychlé návraty do funkčního stavu, šetření místem a vyšší stabilita systému.
/boot/efi/ s velikostí 1000M./ (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.)
/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 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.

Vytvoření hlavního adresáře pro Btrfs
sudo mkdir -p /btrfsroot
Zjištění ID hlavního disku (/)
df --output=source / | tail -n 1
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
Připojení Btrfs root subsvazku
sudo mount /btrfsroot

/etc/fstab struktury/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:
Vytvoření subsvazku pro /home
sudo btrfs subvol create /btrfsroot/@home
Zkopírování obsahu současného /home do nového subsvazku
sudo cp -a --reflink=always /home/. /btrfsroot/@home
Nastavení správných oprávnění
sudo chown -R $(whoami):$(whoami) /btrfsroot/@home
Ú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
Restart systému, aby se změny projevily
sudo reboot
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
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.
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.
/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.
Vytvoření subsvazku pro /var/log
sudo btrfs subvol create /btrfsroot/@var_log
(Volitelně) Zkopírování stávajícího obsahu
(Ignorujte případné chyby.)
sudo cp -RT --reflink=always /var/log /btrfsroot/@var_log
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
Připojení subsvazku bez restartu
sudo systemctl daemon-reload
sudo mount /var/log
Odstranění starého obsahu /var/log
sudo rm -rf /btrfsroot/@rootfs/var/log/*

/tmpDů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.
Vytvoření subsvazku pro /tmp
sudo btrfs subvol create /btrfsroot/@tmp
Zkopírování stávajícího obsahu /tmp
sudo cp -RT --reflink=always /tmp /btrfsroot/@tmp
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
Restart systému
sudo reboot
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.)

/etc/fstab po úpraváchPo 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é)

K zajištění plné funkčnosti Snapperu budeme potřebovat tři základní aplikace:
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
sudo apt install snapper
/sudo snapper -c root create-config /

Vytvoření subsvazku pro snapshoty
sudo btrfs subvol create /btrfsroot/@snapshots
Vytvoření připojovacího adresáře pro snapshoty
sudo mkdir -p /.snapshots
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
git clone https://github.com/Antynea/grub-btrfs.git
cd grub-btrfs
sudo make
sudo make install
sudo systemctl enable grub-btrfsd
sudo systemctl start grub-btrfsd
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í.
Stejně jako u Grub-BTRFS budeme muset aplikaci stáhnout z GitHubu:
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/
Pro ověření funkčnosti snapshotů provedeme test:
btop)sudo apt install btop -y
sudo update-grub
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.

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.
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.
Pokud chceš automatizovat aktualizaci GRUB po instalaci nových balíčků nebo jádra, můžeš použít tento postup:
APT umožňuje spouštět vlastní skripty po dokončení instalací a aktualizací. Můžeme toho využít k automatické aktualizaci GRUB.
Postup:
sudo nano /etc/apt/apt.conf.d/99update-grub
DPkg::Post-Invoke { "if [ -x /usr/sbin/update-grub ]; then /usr/sbin/update-grub; fi"; };
CTRL + X, poté Y a Enter).✅ Tento skript zajistí, že se update-grub spustí po každé operaci apt upgrade nebo apt install.

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:
postinst.d:sudo nano /etc/kernel/postinst.d/update-grub
#!/bin/sh
set -e
/usr/sbin/update-grub
sudo chmod +x /etc/kernel/postinst.d/update-grub
✅ Tento skript se spustí pouze při instalaci nového jádra.
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
✅ 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í!