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/*
/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.
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í!