ZFS Snapshots: Jak je tworzyć, przywracać i automatyzować
10 min czytania - 5 maja 2026

Dowiedz się, jak tworzyć, przywracać i automatyzować migawki ZFS w systemie Linux. Obejmuje polecenia, wycofywanie, zasady przechowywania i replikację poza lokalizacją z Sanoid
ZFS Snapshots: Jak je tworzyć, przywracać i automatyzować
Migawka ZFS to kopia systemu plików tylko do odczytu. Jest ona tworzona natychmiastowo, nie zajmuje miejsca do momentu zmiany danych i pozwala na przywrócenie lub odzyskanie plików w ciągu kilku sekund. Jeśli zarządzasz serwerami, instancjami VPS lub czymkolwiek z danymi, na których utratę nie możesz sobie pozwolić, migawki powinny być częścią twojego przepływu pracy.
W tym poście opisano, jak działają migawki ZFS, jak z nich korzystać i jak zautomatyzować ich przechowywanie, aby się nie gromadziły.
Jak działają migawki ZFS
ZFS wykorzystuje model kopiowania przy zapisie (CoW). Podczas wykonywania migawki system ZFS nie duplikuje żadnych danych. Po prostu rejestruje bieżący stan drzewa wskaźników bloków. Nowe zapisy trafiają do wolnych bloków, podczas gdy migawka nadal odwołuje się do oryginałów.
Oznacza to, że migawki są tworzone w mikrosekundach niezależnie od rozmiaru zbioru danych i nie zajmują dodatkowego miejsca podczas tworzenia. Zaczynają one wykorzystywać przestrzeń dopiero po zmianie zestawu danych na żywo, ponieważ migawka utrzymuje oryginalne bloki, które w przeciwnym razie zostałyby zwolnione.
Różni się to zasadniczo od narzędzi do tworzenia kopii zapasowych na poziomie plików, takich jak rsync lub tar, które skanują i kopiują całe pliki. Jeśli zmienisz 4 KB pliku o rozmiarze 10 GB, rsync skopiuje cały plik. ZFS zapisuje tylko blok 4KB.
Migawki są również niezmienne. Są one wymuszane jako tylko do odczytu na poziomie jądra, więc procesy przestrzeni użytkownika (w tym oprogramowanie ransomware) nie mogą ich modyfikować. W połączeniu z wbudowanym sumowaniem kontrolnym ZFS oznacza to, że można zweryfikować integralność danych podczas przywracania.
Tworzenie migawek
Wymagania wstępne
Potrzebny będzie zainstalowany system plików ZFS i skonfigurowana pula. Na Ubuntu 20.04+:
sudo apt update && sudo apt upgrade -y
sudo apt install zfsutils-linux -y
sudo modprobe zfsUtwórz pulę. Dla pojedynczego dysku (typowe dla VPS):
sudo zpool create tank /dev/sdbW przypadku konfiguracji lustrzanej na serwerze dedykowanym użyj identyfikatorów dysków zamiast nazw urządzeń, aby uniknąć problemów po ponownym uruchomieniu:
sudo zpool create tank mirror /dev/disk/by-id/ata-DISK1 /dev/disk/by-id/ata-DISK2Włącz kompresję (LZ4 jest szybka i skuteczna):
sudo zfs set compression=lz4 tankNastępnie utwórz zestawy danych dla swoich obciążeń:
sudo zfs create tank/web
sudo zfs create tank/databasesWykonywanie migawki
Podstawowe polecenie:
sudo zfs snapshot tank/web@before-updateDla nazw ze znacznikiem czasu (przydatne z cron):
sudo zfs snapshot tank/db@$(date +%Y%m%d_%H%M%S)Aby przechwycić wszystkie podrzędne zbiory danych jednocześnie, należy użyć flagi rekursywnej:
sudo zfs snapshot -r tank@daily_backupVerify with:
sudo zfs list -t snapshotPrzywracanie z migawek
Przywracanie pojedynczych plików
Każdy zbiór danych ZFS ma ukryty katalog .zfs/snapshot w swoim punkcie montowania. Nie będzie on widoczny w ls, ale można do niego przejść bezpośrednio:
ls /tank/web/.zfs/snapshot/before-update/Aby przywrócić pojedynczy plik:
cp -p /tank/web/.zfs/snapshot/before-update/config/app.conf /tank/web/config/Flaga -p zachowuje uprawnienia i znaczniki czasu.
Przywracanie całego zestawu danych
Jeśli trzeba przywrócić wszystko, na przykład po nieudanej aktualizacji:
sudo zfs rollback tank/web@before-updateJest to niemal natychmiastowe, ponieważ ZFS aktualizuje wskaźniki bloków zamiast kopiować dane. Jest to jednak destrukcyjne: wszystkie zmiany wprowadzone po wykonaniu migawki są trwale tracone.
Jeśli między stanem docelowym a bieżącym istnieją nowsze migawki, ZFS zablokuje wycofanie. Użyj -r, aby to wymusić i usunąć te pośrednie migawki:
sudo zfs rollback -r tank/db@20260426_090000Dobry nawyk: zrób migawkę bieżącego (uszkodzonego) stanu przed wycofaniem, aby w razie potrzeby mieć rozwiązanie awaryjne.
| Metoda odzyskiwania | Szybkość | Ryzyko utraty danych | Najlepsze dla |
|---|---|---|---|
Przywracanie plików przez .zfs | Zależy od rozmiaru pliku | Brak | Przypadkowe usunięcie, odzyskiwanie pojedynczego pliku |
| Pełne przywracanie | Natychmiastowe | Wysoki (utrata wszystkich zmian po wykonaniu migawki) | Nieudane aktualizacje, problemy systemowe |
| Klonowanie do testów | Natychmiast | Brak (tworzy równoległy zestaw danych) | Weryfikacja przed zatwierdzeniem wycofania |
Zarządzanie i przycinanie migawek
Migawki zaczynają się od zerowego rozmiaru, ale rosną wraz ze zmianami danych na żywo pod nimi. Aby sprawdzić wykorzystanie miejsca:
zfs list -t snapshot -o name,used,refer,creationKolumna USED pokazuje, ile miejsca jest unikalne dla tej migawki. REFER pokazuje całkowity rozmiar zestawu danych w momencie wykonania migawki.
Aby usunąć migawkę:
sudo zfs destroy tank/web@before-updateMożna również usunąć według wzorca:
sudo zfs destroy tank/web@daily-2026-04-%Zawsze najpierw wykonaj próbę na sucho:
sudo zfs destroy -nv tank/web@daily-%ZFS może technicznie obsługiwać miliony migawek, ale wydajność spada po przekroczeniu kilku tysięcy na zestaw danych. Polecenia takie jak zfs list i zfs destroy zauważalnie spowalniają. Utrzymuj ścisłą retencję.
Automatyzacja retencji z Sanoid
Sanoid jest standardowym narzędziem do automatyzacji tworzenia i przycinania migawek ZFS. Użytkownik definiuje zasady retencji w pliku sanoid.conf, a narzędzie zajmuje się resztą.
Typowa konfiguracja produkcyjna może wyglądać następująco:
| Typ obciążenia | Godzinowe | Dzienne | Tygodniowe | Miesięcznie |
|---|---|---|---|---|
| Produkcja standardowa | 24-48 | 30 | 8 | 12 |
| Baza danych (wysoka rotacja) | 72 | 30 | 12 | 24 |
| Dzienniki / niski priorytet | 12-24 | 7 | 0 | 3 |
| Nośniki statyczne | 0 | 7 | 0 | 3 |
Sanoid obsługuje również subgodzinne migawki za pomocą parametru frequently. Ustawienie frequently = 96 i frequent_period = 15 daje migawkę co 15 minut.
Zaplanuj Sanoid przez cron, aby uruchamiał się co minutę lub co 15 minut, a będzie automatycznie tworzył i przycinał migawki.
Replikacja off-site z wysyłaniem zfs
Migawki na pojedynczym serwerze chronią przed przypadkowymi zmianami i awariami oprogramowania, ale nie przed utratą sprzętu. W tym celu należy wykonać replikację poza lokalizacją przy użyciu zfs send i zfs receive przez SSH:
zfs send tank/web@backup | ssh user@remote zfs receive backup/webW przypadku transferów przyrostowych (wysyłanie tylko tego, co zmieniło się od ostatniej migawki):
zfs send -i tank/web@old_snap tank/web@new_snap | ssh user@remote zfs receive backup/webNarzędzie towarzyszące Sanoid, syncoid, automatyzuje ten proces i obsługuje wysyłanie przyrostowe, odzyskiwanie błędów i rejestrowanie.
Uwaga na temat ochrony przed ransomware
Migawki ZFS są tylko do odczytu na poziomie jądra, co oznacza, że standardowe złośliwe oprogramowanie nie może ich modyfikować ani szyfrować. To silna warstwa obrony. Nie jest ona jednak kuloodporna: jeśli atakujący uzyska dostęp roota, może usunąć migawki przed zaszyfrowaniem danych.
Migawki powinny być jedną z warstw szerszej strategii. Połącz je z replikacją poza siedzibą firmy, ograniczonym dostępem roota i zabezpieczeniami na poziomie sieci. Nie należy polegać wyłącznie na migawkach.
Rekomendacje wideo
Uwagi końcowe
Migawki ZFS są szybkie, zajmują mało miejsca i są proste w użyciu, gdy zrozumie się ich podstawy. Nie zastępują kopii zapasowych poza siedzibą firmy, ale wypełniają lukę, której tradycyjne narzędzia do tworzenia kopii zapasowych nie są w stanie wypełnić: natychmiastowe, bezkosztowe punkty odzyskiwania, które można wykonywać tak często, jak jest to potrzebne.
Jeśli korzystasz z ZFS na serwerze VPS lub dedykowanym, skonfiguruj Sanoid, zdefiniuj zasady przechowywania i zautomatyzuj replikację. Konfiguracja zajmuje 30 minut i pozwala zaoszczędzić godziny, gdy coś pójdzie nie tak. Wypróbuj je na serwerze VPS lub dedykowanym serwerze FDC.

ZFS Snapshots: Jak je tworzyć, przywracać i automatyzować
Dowiedz się, jak tworzyć, przywracać i automatyzować migawki ZFS w systemie Linux. Obejmuje polecenia, wycofywanie, zasady przechowywania i replikację poza lokalizacją z Sanoid
10 min czytania - 5 maja 2026
Jak zainstalować i używać Redis na serwerze VPS
9 min czytania - 7 stycznia 2026

Masz pytania lub potrzebujesz niestandardowego rozwiązania?
Elastyczne opcje
Globalny zasięg
Natychmiastowe wdrożenie
Elastyczne opcje
Globalny zasięg
Natychmiastowe wdrożenie