Snapshots – recepta na psującego się Linuxa

Odkąd pierwszy raz miałem styczność z Linuxem w 2006 roku, postrzegałem ten system raczej jako dość wrażliwy na zmiany. Zainstalowanie jednego dodatkowego pakietu, mała zmiana configu czy po prostu zwykła aktualizacja, mogła zepsuć system w najmniej oczekiwanym momencie. Na szczęście teraz na ten problem jest jeden prosty trick.

Czym są snapshoty

Zyskujące na popularności systemy plików jak ZFS lub Btrfs, implementują rozwiązane zwane „Kopiowanie przy zapisie” (ang. copy-on-write). Oznacza to, że system plików sam śledzi zmiany, które zostały dokonane na naszym dysku. Dlatego gdy tworzymy snapshot, trwa to jedynie ułamek sekundy, więc bez problemu możemy dodać do naszego systemu hooki, tworzące snapshot w momentach, gdy robimy operacje mogące zagrozić stabilności systemu (np. przed komendą pacman albo apt). Dla porównania, gdybyśmy używali systemu plików ext4, musielibyśmy zrobić pełną kopię całej partycji / i czekać w najlepszym wypadku parę minut.

Co daje posiadanie snapshotów

Systemy plików ZFS lub Btrfs odchodzą od koncepcji istnienia partycji, a zamiast nich proponują rozwiązanie zwane subvolumes. W dużym skrócie, jeżeli potrzebujemy rozdzielenia naszej przestrzeni dyskowej, to możemy w dowolnym momencie stworzyć subvolume np. /home , bez konieczności zmiany schematu partycji. Na każdy subvolume możemy stworzyć snapshot. Załóżmy że zdecydowaliśmy się zrobić snapshot całej przestrzeni / . Później zrobiliśmy aktualizację Archa, po której system się nie uruchamia 🙃 W tym przypadku, możemy w łatwy sposób przywrócić snapshot. Ale jak przywrócić snapshot, skoro system nam nie wstaje? Otóż… możemy w GRUBie zbootować nasz system w trybie read-only, używając wcześniej stworzonego snapshota! Oznacza to, że uruchomimy dokładnie taki sam system jaki istniał przed naszą niefortunną aktualizacją! Przywrócenie snapshota działa tak, jakbyśmy cofnęli nasz dysk w czasie.

Wady

Żeby używać snapshotów musimy użyć albo Btrfs albo ZFS. O ile obsługa tego pierwszego jest natywnie wspierana przez Kernel, to z ZFS musimy trochę powalczyć (czyli np. w Archu zainstalować zewnętrzny sterownik). Czemu zatem po prostu nie używać Btrfs? Otóż… to nie jest jakiś bardzo stabilny system plików. Fakt, w 99.9% przypadków będzie działać bezbłędnie, ale znane problemy, że dane potrafią magicznie wyparować (głównie przy RAID 5). Jeśli faktycznie chcesz, by twoje dane były turbo-bezpieczne, to polecam jednak ZFS. Jest on też używany między innymi w TrueNAS, który cieszy się świetną renomą jako system operacyjny dla NAS.

Konwersja z EXT4 na BTRFS

Jeśli już posiadacie Linuxa z systemem plików EXT4, to istnieje tool, który pozwala na konwersję EXT4 na BTRFS. Jako, że ja korzystam z Archa, to przez cały proces przeprowadził mnie ten poradnik.

Zaznaczę tylko, że w moim przypadku, instalator Archa utworzył kiedyś osobną partycję vFAT dla całego /boot/. Nie jest to idealne, gdyż tworzone snapshoty, nie będą zawierały Kernela. Czyli jeśli na naszym systemie aktualizujemy Kernel, to nasz snapshot zrobiony ze starym Kernelem, może nam się zwyczajnie nie uruchomić. Wciąż możemy taki system przywrócić, ale wymagać to będzie uruchomienia komendy mkinitcpio -P, by wygenerować nowe obrazy kernela. Najlepiej więc, jeśli /boot/ zostanie pod systemem plików Btrfs, a partycja vFat będzie zawierać jedynie EFI czyli /boot/efi. Wtedy obrazy kernela będą zapisywane w snapshotach jak reszta danych, a to ułatwi uruchamianie jak i przywracanie snapshotów.

Warto dodać, że nie ma przeszkód, żeby zachować /home jako osobną partycję EXT4, jeśli np. boimy się, że podczas konwersji możemy utracić jakieś dane. Należy wtedy pamiętać, że przy ewentualnym zbootowaniu systemu ze snapshota, będziemy mieć dostęp z zapisem do folderu /home.

Podsumowanie

Dla mnie snapshoty zmieniły całkiem sposób użytkowania Linuxa. Do tej pory często odkładałem aktualizacje „na później”, żeby w razie czego, mieć czas na naprawę szkód. Teraz odkąd mam Btrfs i snapshoty są automatycznie tworzone przez Snappera, robię aktualizacje pakietów w dosłownie dowolnych momentach. Jak coś się wysypie, to szybko uruchamiam system ze snapshota, robię restore i znów mam wszystko jak dawniej. Bardzo polecam to rozwiązanie.

Related Posts