Przejdź do głównej zawartości
Ta strona jest nieaktualna. Proszę zapoznać się z najnowszą dokumentacją dostępną pod adresem /configuration/btrfs_snapshots/

Migawki Btrfs

Zacznijmy od podstaw:

Migawki Btrfs wywodzą się z funkcji podwolumenu. Możesz zapytać, czym jest podwolumen? Pomyśl o podwolumenie jak o oddzielnym systemie plików wewnątrz systemu plików Btrfs. Pozwala to na segmentację danych na różne części. Dlatego na przykład w CachyOS mamy różne podwolumeny dla:

  • Głównego systemu plików: (/)
  • Katalogu głównego administratora: (/root)
  • Katalogu domowego: (/home)
  • Katalogów var: (/var/cache, /var/tmp, /var/log)
  • Katalogu srv: (/srv)

Dzięki posiadaniu różnych podwolumenów dla tych katalogów możemy zarządzać nimi niezależnie, stosować różne ustawienia i, co najważniejsze, tworzyć dla nich migawki.

W tym miejscu rodzi się migawka. Migawka jest zasadniczo kopią podwolumenu tylko do odczytu lub do odczytu i zapisu (domyślnie) w określonym punkcie w czasie. Oznacza to, że możesz uchwycić stan swojego systemu plików, w tym wszystkich plików i katalogów, w danym momencie.

Dlatego migawki stają się odniesieniem w czasie, co oznacza, że gdy plik docelowy odbiega od danych migawki, migawka zachowa oryginalny plik, a plik docelowy utworzy nowy plik ze zmianami, podczas gdy migawka pozostanie na zawsze taka sama. Z tego powodu niektórzy użytkownicy nazywają migawkę „danymi zamrożonymi w czasie”.

Wyobraź sobie zrobienie zdjęcia swojemu systemowi plików w określonym momencie, do którego zawsze możesz wrócić, kiedy tylko zajdzie taka potrzeba.

Jedną z kluczowych zalet migawek jest to, że są bardzo oszczędne pod względem miejsca, ponieważ są tylko odniesieniem do oryginalnych danych, dopóki nie zostaną wprowadzone zmiany.

Jednak to właśnie w tym miejscu migawka różni się od tradycyjnej kopii zapasowej. Powiedzmy, że twój dysk uległ awarii. Gdybyś miał tradycyjną kopię zapasową, mógłbyś przywrócić swoje dane z tej kopii. Jednakże, gdybyś miał tylko migawki na uszkodzonym dysku, straciłbyś do nich dostęp, ponieważ są one przechowywane na tym samym dysku.

Przypadki odzyskiwania, w których migawki są przydatne i nieprzydatne

Dział zatytułowany „Przypadki odzyskiwania, w których migawki są przydatne i nieprzydatne”

Są przydatne do odzyskiwania po:

  • Awarii lub uszkodzeniu po aktualizacji systemu.
  • Błędnych konfiguracjach, które uniemożliwiają uruchomienie systemu.
  • Przypadkowym usunięciu lub modyfikacji plików.

Nie są przydatne do odzyskiwania po:

  • Problemach z programem rozruchowym (bootloaderem).
  • Awariach sprzętowych (np. uszkodzonych dyskach twardych).

Kilka rzeczy do rozważenia przed rozpoczęciem zarządzania migawkami. Dotyczy to zarówno metod CLI, jak i GUI.

  • Zaleca się przechowywanie maksymalnie 10 migawek. Powyżej tej liczby migawki stają się zbyt stare i mniej użyteczne. W najgorszym przypadku przywrócenie starej migawki może wprowadzić problemy z kompatybilnością z nowszymi wersjami oprogramowania.
  • Migawki idealnie nadają się do celów odzyskiwania systemu. Można ich jednak używać do cofania zmian w plikach bez przywracania całej migawki.
  • Dodaj znaczący opis podczas tworzenia migawek. Pomoże ci to później zidentyfikować przeznaczenie każdej z nich.

Przed kontynuowaniem upewnij się, że masz zainstalowany btrfsmaintenance, aby móc korzystać z funkcji automatycznego zarządzania migawkami.

Dla tych, którzy wolą zarządzać Btrfs, migawkami i innymi elementami za pomocą interfejsu graficznego, Btrfs Assistant jest świetnym projektem dla początkujących.

Skonfigurujemy automatyczne czyszczenie migawek za pomocą Btrfs Assistant. Pomoże to efektywnie zarządzać migawkami bez ręcznej interwencji.

Postępuj zgodnie z poniższymi krokami:

  1. Uruchom Btrfs Assistant, otwierając terminal i wpisując:

    Terminal window
    btrfs-assistant-launcher

    Alternatywnie:

    Terminal window
    sudo -E btrfs-assistant
  2. Przejdź do zakładki Ustawienia Snappera:

    Zmodyfikuj ustawienia Przechowywania migawek w następujący sposób:

    • Upewnij się, że wybrana jest konfiguracja root
    • Wprowadź wartość 0 dla Godzinowych, Dziennych, Tygodniowych, Miesięcznych i Rocznych.
    • Odznacz Włącz migawki osi czasu.
    • Wprowadź wartość 10 w polu Liczba.
    • Zaznacz ✅ przy Włączone czyszczenie Snapper.
    • Kliknij przycisk Zapisz w prawym górnym rogu i Zastosuj zmiany systemd w prawym dolnym rogu. Timer snapper-cleanup.timer zostanie teraz włączony, aby automatycznie czyścić stare migawki na podstawie Twojej konfiguracji.
  1. Otwórz Btrfs Assistant:

    Terminal window
    btrfs-assistant-launcher

    Alternatywnie:

    Terminal window
    sudo -E btrfs-assistant
  2. Przejdź do zakładki Snapper:

  3. Wybierz migawkę(i), którą chcesz usunąć z listy.

  4. Kliknij przycisk Usuń znajdujący się na górze okna.

  5. Zregeneruj wpisy bootloadera, aby odzwierciedlić zmiany:

    systemd-boot
    Terminal window
    sudo sdboot-manage gen
    GRUB
    Terminal window
    sudo grub-mkconfig -o /boot/grub/grub.cfg
    Limine
    Terminal window
    sudo limine-mkinitcpio

Sprawdź ich Oficjalne Wiki, aby uzyskać bardziej szczegółowe informacje o tym, co można zrobić.

Teraz, gdy omówiliśmy, czym jest migawka Btrfs i jakie ma zastosowania, porozmawiajmy o tym, jak nimi zarządzać za pomocą narzędzia o nazwie Snapper, stworzonego przez Arvina Schnella z openSUSE.

CachyOS domyślnie używa następującej konfiguracji Snappera:
# subvolume to snapshot
SUBVOLUME="/"
# filesystem type
FSTYPE="btrfs"
# btrfs qgroup for space aware cleanup algorithms
QGROUP=""
# fraction or absolute size of the filesystems space the snapshots may use
SPACE_LIMIT="0.5"
# fraction or absolute size of the filesystems space that should be free
FREE_LIMIT="0.2"
# users and groups allowed to work with config
ALLOW_USERS=""
ALLOW_GROUPS=""
# sync users and groups from ALLOW_USERS and ALLOW_GROUPS to .snapshots
# directory
SYNC_ACL="no"
# start comparing pre- and post-snapshot in background after creating
# post-snapshot
BACKGROUND_COMPARISON="yes"
# run daily number cleanup
NUMBER_CLEANUP="yes"
# limit for number cleanup
NUMBER_MIN_AGE="1800"
NUMBER_LIMIT="50"
NUMBER_LIMIT_IMPORTANT="15"
# create hourly snapshots
TIMELINE_CREATE="no"
# cleanup hourly snapshots after some time
TIMELINE_CLEANUP="yes"
# limits for timeline cleanup
TIMELINE_MIN_AGE="1800"
TIMELINE_LIMIT_HOURLY="5"
TIMELINE_LIMIT_DAILY="7"
TIMELINE_LIMIT_WEEKLY="0"
TIMELINE_LIMIT_MONTHLY="0"
TIMELINE_LIMIT_YEARLY="0"
# cleanup empty pre-post-pairs
EMPTY_PRE_POST_CLEANUP="yes"
# limits for empty pre-post-pair cleanup
EMPTY_PRE_POST_MIN_AGE="1800"

Oto lista najczęstszych poleceń Snappera.

Pobierz bieżącą konfigurację:
Terminal window
sudo snapper get-config
Przykład wyjścia:
Terminal window
snapper list-configs
Config Subvolume
───────┼──────────
root /
Wyświetl dostępne migawki + szczegóły:
Terminal window
sudo snapper list
Przykład wyjścia:
Terminal window
# │ Type │ Pre # │ Date │ User │ Cleanup │ Description │ Userdata
────┼────────┼───────┼──────────────────────────┼──────┼─────────┼──────────────────────────────────────────────────────────────────────────┼─────────
0 single root current
715 pre Thu 22 Jan 2026 16:14:07 root number pacman -S -y -u --config /etc/pacman.conf --
716 post 715 Thu 22 Jan 2026 16:14:25 root number docker-buildx lilv sof-firmware zed
717 pre Sat 24 Jan 2026 11:19:48 root number pacman -S -y -u --config /etc/pacman.conf --
718 post 717 Sat 24 Jan 2026 11:20:19 root number bpf cachyos-hello cachyos-wallpapers cpupower jdk-openjdk ldb less libev
719 pre Sat 24 Jan 2026 11:20:31 root number pacman -U --config /etc/pacman.conf -- /home/mario/.cache/yay/visual-s
720 post 719 Sat 24 Jan 2026 11:20:36 root number visual-studio-code-bin
721 pre Sat 24 Jan 2026 20:46:40 root number pacman -Syu plasma-login-manager
722 post 721 Sat 24 Jan 2026 20:46:48 root number cmake fastfetch harfbuzz harfbuzz-icu jdk21-openjdk lib32-harfbuzz lib32
723 pre Sat 24 Jan 2026 20:46:53 root number pacman -R sddm-kcm cachyos-themes-sddm sddm
724 post 723 Sat 24 Jan 2026 20:46:56 root number cachyos-themes-sddm sddm sddm-kcm
725 pre Sun 25 Jan 2026 08:05:05 root number pacman -S -y -u --config /etc/pacman.conf --
726 post 725 Sun 25 Jan 2026 08:05:11 root number plasma-login-manager
727 pre Sun 25 Jan 2026 15:55:28 root number pacman -S --config /etc/pacman.conf -- cachyos-extra-znver4/caligula
728 post 727 Sun 25 Jan 2026 15:55:30 root number caligula
  • Oto podsumowanie kolumn:
    • #: Wskazuje numer migawki, który jest używany w innych poleceniach.
    • Type: Wskazuje, czy migawka jest pojedyncza, czy stanowi część pary przed/po.
      • single: Te migawki nie mają specjalnego związku z innymi migawkami.
      • pre: Te migawki są przeznaczone do wykonania przed jakąkolwiek zmianą w systemie (np. edycją pliku lub instalacją pakietu).
      • post: Jak sama nazwa wskazuje, te migawki odnoszą się do migawek wykonanych po dokonaniu zmiany w systemie. Są one powiązane z odpowiadającą im migawką pre.
    • Pre #: W przypadku migawek post, ta kolumna wskazuje numer odpowiadającej im migawki pre.
    • Date: Data i godzina utworzenia migawki.
    • User: Użytkownik, który utworzył migawkę.
    • Cleanup: Wskazuje algorytm czyszczenia zastosowany do migawki.
      • W Snapperze dostępnych jest kilka algorytmów czyszczenia, takich jak number, timeline i empty-pre-post. W tym przykładzie użyto algorytmu number, co oznacza, że starsze migawki będą usuwane na podstawie predefiniowanego limitu.
      • timeline: Migawki są czyszczone na podstawie ich wieku i częstotliwości.
      • empty-pre-post: Usuwa pary migawek przed/po z pustymi różnicami.
    • Description: Krótki opis migawki, często wskazujący powód jej utworzenia.
    • Userdata: Dodatkowe dane zdefiniowane przez użytkownika powiązane z migawką. Aby uzyskać więcej szczegółów na temat kolumn wyjściowych
Utwórz nową migawkę:
Terminal window
sudo snapper create --type single --description "Mój opis migawki"
Zmodyfikuj migawkę:
Terminal window
sudo snapper modify <opcja> <numer_migawki>
Dostępne opcje:
Terminal window
Options for 'modify' command:
--description, -d <description> Description for snapshot.
--cleanup-algorithm, -c <algo> Cleanup algorithm for snapshot.
--userdata, -u <userdata> Userdata for snapshot.
--read-only Set snapshot read-only.
--read-write Set snapshot read-write.
--default Set snapshot as default snapshot.
Przykład: Modyfikacja opisu migawki 729:
Terminal window
sudo snapper modify 729 --description 'Mój nowy opis migawki'
Usuwanie migawek:
Usuń pojedynczą migawkę:
Terminal window
sudo snapper delete <numer_migawki>
Usuń zakres migawek:
Terminal window
sudo snapper delete 718-721

Migawki 718, 719, 720 i 721 zostaną usunięte.

Oficjalna strona man dla poleceń Snappera:

Przewodnik po pliku konfiguracyjnym Snappera:

Przewodnik z Arch Wiki:

Dostosuj ustawienia wyświetlania migawek w bootloaderze Limine

Dział zatytułowany „Dostosuj ustawienia wyświetlania migawek w bootloaderze Limine”
  • Ogranicz liczbę migawek wyświetlanych w menu bootloadera Limine, aby uniknąć bałaganu:
  1. Utwórz kopię zapasową pliku konfiguracyjnego limine-snapper-sync:
    Terminal window
    sudo cp /etc/limine-snapper-sync.conf /etc/limine-snapper-sync.conf.orig
  2. Edytuj plik konfiguracyjny limine-snapper-sync:
    Terminal window
    sudo nano /etc/limine-snapper-sync.conf
    Oczekiwany fragment wyjścia:
    Terminal window
    ### Max Snapshot Entries
    ### Sets the limit for how many snapshot entries show up in the boot menu.
    ### This depends on the size of your FAT32 boot partition and how many different kernel and module versions you want to keep.
    ### A larger FAT32 boot partition allows more snapshot entries.
    MAX_SNAPSHOT_ENTRIES=10
    Opcjonalnie dostosuj format nazwy migawki:
    Terminal window
    ### Snapshot Name Format
    ### Choose a format for how snapshot entries look in the Limine bootloader:
    ### 0. ID=111 2023-12-20 10:59:59 (default)
    ### 1. 111│2023-12-20 10:59:59
    ### 2. 111 │ 2023-12-20 10:59:59
    ### 3. 2023-12-20 10:59:59│111
    ### 4. 2023-12-20 10:59:59 │ 111
    ### 5. 2023-12-20 10:59:59
    ### 6. 111
    ### 7. 111│snapshot description
    ### 8. 2023-12-20 10:59:59│snapshot description
    ### 9. │snapshot description
    SNAPSHOT_FORMAT_CHOICE=8
    8 to dobry wybór, ponieważ pokazuje datę i godzinę wraz z opisem migawki.
  3. Zapisz plik i wyjdź, naciskając CTRL+O, Enter, CTRL+X
Limine
  1. Z menu bootloadera Limine przejdź do menu Migawki:
  2. Wybierz migawkę i jądro, z których chcesz przywrócić:
    /_astro/limine-snapshotMenu-2.CH75QBQf.jpg/_astro/limine-snapshotMenu-1.CJauujJM.jpg
  3. Twój system jest teraz w trybie tylko do odczytu. Powinno pojawić się powiadomienie informujące, że wykryto migawkę, z prośbą o przywrócenie z niej:
  4. Kliknij Przywróć teraz. Otworzy się okno terminala z monitem i poprosi o kilka potwierdzeń:
    Przykładowy monit o przywrócenie
    Snapshot ID : 2
    Date : 2026-01-26 11:19:14
    Description : nc-git
    Restore method : replace
    Confirm restore of snapshot 2 using the "replace" method?
    Type [y]es to restore, [l]ist to display all snapshots, or [c]ancel to abort.
    Your input: yes
    Enter a description for the "backup" of the subvolume: @
    Your input: @
  5. Wpisz yes i opcjonalnie dodaj opis dla migawki zapasowej.
  6. Rozpocznie się proces przywracania. Po zakończeniu wpisz yes ponownie w nowym monicie, aby ponownie uruchomić system:
    Terminal window
    The restore is complete. Please reboot now:
    Type [y]es to reboot, [n]o or [c]ancel to abort rebooting.
    Your input: yes
GRUB
  1. Z menu bootloadera GRUB uruchom system z wybranej migawki i jądra, które chcesz przywrócić.

  2. Po uruchomieniu systemu otwórz Btrfs Assistant:

    Terminal window
    btrfs-assistant-launcher

    Alternatywnie:

    Terminal window
    sudo -E btrfs-assistant
  3. Przejdź do zakładki Snapper → zakładka „Przeglądaj/Przywróć” i wybierz migawkę, z której uruchomiłeś system:

  4. Kliknij przycisk Przywróć i ponownie uruchom system, aby zastosować zmiany.