ZFS na VPS: jak zarządzać pamięcią RAM dla ARC
ZFS oferuje sumy kontrolne i migawki, ale ARC domyślnie zajmuje większość pamięci RAM. Dowiedz się, jak ograniczyć zużycie zasobów na serwerach VPS z 2 GB lub 4 GB RAM.
Co oferuje ZFS i czego wymaga
ZFS na systemach FreeBSD i Linux stanowi obecnie jedną bazę kodu, OpenZFS, dlatego funkcjonalność jest identyczna w obu systemach. Serwer z ZFS zyskuje sumy kontrolne danych, migawki (snapshots), które nie zajmują miejsca do momentu zmiany danych, replikację za pomocą zfs send oraz kompresję dostępną po zmianie jednej właściwości. Kosztem jest pamięć RAM: ARC (adaptive replacement cache) domyślnie zajmuje znaczną część pamięci, a na serwerze VPS (virtual private server) z 2 GB lub 4 GB RAM jest to dokładnie ta pamięć, której potrzebuje aplikacja.
Niniejszy przewodnik ocenia ZFS z perspektywy wynajmowanego serwera VPS z jednym lub dwoma wirtualnymi dyskami, a nie macierzy z czterdziestoma kieszeniami na dyski. Funkcje, które sprawdzają się w takim środowisku, są warte uwagi. Warto poznać ograniczenia przed utworzeniem puli.
OpenZFS na FreeBSD i Linux: jedna baza kodu, dwie historie pakowania
System FreeBSD zawiera ZFS w systemie podstawowym od wersji 7.0 z 2008 roku, początkowo jako funkcję eksperymentalną. Od czasu wydania OpenZFS 2.0 w grudniu 2020 roku, FreeBSD i Linux korzystają z tego samego drzewa źródeł, dzięki czemu zfs oraz zpool działają w ten sam sposób na obu systemach, a pula utworzona na jednym z nich może zostać zaimportowana na drugim.
Powodem, dla którego ZFS na systemie Linux jest pakietem, a na FreeBSD częścią systemu podstawowego, jest licencjonowanie. OpenZFS podlega licencji CDDL (common development and distribution license). Jądro systemu Linux podlega licencji GPL (general public license) w wersji 2. Projekt jądra uznaje te dwie licencje za niekompatybilne, dlatego kod ZFS nie jest scalany z główną linią systemu Linux, a każda dystrybucja decyduje samodzielnie o sposobie jego dostarczania. FreeBSD nie posiada takiego konfliktu, więc ZFS jest po prostu dostępny. To cała praktyczna historia: jedna różnica w pakowaniu, w której nie trzeba opowiadać się po żadnej ze stron.
SSD Nodes nie oferuje obrazów systemu FreeBSD, więc na wynajętym tutaj serwerze zastosowanie ma linuxowa część tego przewodnika. Jeśli korzystasz z FreeBSD w innym miejscu, serwer FreeBSD otrzymuje ZFS bez konieczności budowania modułów i bez ryzyka związanego z aktualizacją jądra.
Instalacja ZFS i utworzenie puli
W systemie Ubuntu moduł jest dostarczany w ramach pakietów jądra, dlatego instaluje się wyłącznie narzędzia użytkownika.
sudo apt update
sudo apt install -y zfsutils-linux
zfs versionzfs version wyświetla dwie linie: wersję narzędzi użytkownika oraz wersję modułu jądra. Pojedyncza linia oznacza, że moduł nie został załadowany. Pakiet znajduje się w komponencie universe, który w obrazach Ubuntu Server jest domyślnie włączony; jeśli apt nie może go odnaleźć, należy najpierw wykonać sudo add-apt-repository universe.
W systemie Debian pakiety znajdują się w komponencie contrib, a moduł jest kompilowany lokalnie za pomocą DKMS (dynamic kernel module support). Należy dodać contrib do linii Components: w pliku /etc/apt/sources.list.d/debian.sources, wykonać sudo apt update, a następnie:
sudo apt install -y linux-headers-$(dpkg --print-architecture) zfs-dkms zfsutils-linuxInstalacja kompiluje moduł i wyświetla Building initial module for 6.12.0-..., co trwa kilka minut. Należy pamiętać, że każda aktualizacja jądra wymusza ponowną kompilację, a niepowodzenie tego procesu uniemożliwi zaimportowanie puli do czasu naprawy.
W systemie FreeBSD nie jest wymagana instalacja. Należy włączyć usługę i ją uruchomić.
sysrc zfs_enable=YES
service zfs startTeraz należy utworzyć pulę. W pierwszej kolejności należy sprawdzić stabilne ścieżki urządzeń, ponieważ /dev/vdb jest przydzielane w kolejności wykrywania i może ulec zmianie po podłączeniu kolejnego wolumenu.
ls -l /dev/disk/by-id/
sudo zpool create -o ashift=12 tank /dev/disk/by-id/virtio-abc123def456
zpool status tankzpool status powinno wyświetlić state: ONLINE z urządzeniem wymienionym w sekcji tank. ashift=12 ustawia najmniejszy blok puli na 4 KiB, co odpowiada współczesnym dyskom SSD i nie może zostać zmienione po utworzeniu puli.
Większość obrazów oferowanych przez dostawców usług chmurowych uruchamia się z partycji root typu ext4, więc ZFS w tym przypadku stanowi pulę danych na drugim wolumenie, a nie system plików root. Przed rozpoczęciem budowy należy upewnić się, że urządzenie jest właściwe, ponieważ potwierdzenie modelu dysku NVMe zajmuje minutę, a ponowna konfiguracja może zająć całe popołudnie.
Sumy kontrolne naprawiają dane tylko wtedy, gdy pula posiada redundancję
Każdy blok zapisywany przez ZFS posiada sumę kontrolną, a każdy odczyt podlega weryfikacji. Wykrywanie błędów działa zawsze. Naprawa wymaga posiadania drugiej kopii danych.
W puli jednodyskowej ZFS informuje o błędzie i na tym kończy działanie. zpool status -v raportuje to w następujący sposób:
status: One or more devices has experienced an error resulting in data
corruption.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
errors: Permanent errors have been detected in the following files:
/tank/data/archive.tarUszkodzony plik jest wskazany z nazwy. System ext4 zwróciłby te bajty bez żadnego komentarza, więc jest to już znacząca wartość. ZFS nadal nie może naprawić błędu, ponieważ w puli nie ma drugiej kopii, na podstawie której można by przywrócić dane.
W przypadku mirrora ten sam odczyt jest realizowany z poprawnej strony, uszkodzony blok jest nadpisywany, a zdarzenie pojawia się w kolumnie CKSUM polecenia zpool status. Jest to mechanizm samonaprawy (self-healing), który wymaga dwóch urządzeń.
sudo zpool create -o ashift=12 tank mirror /dev/disk/by-id/DISK1 /dev/disk/by-id/DISK2Na serwerze VPS pamięć masowa hosta jest zazwyczaj już redundantna, często jako RAID 10 na poziomie hypervisora. Chroni to przed awarią fizycznego dysku. Nie informuje jednak o sytuacji, w której blok danych został odczytany niepoprawnie, ponieważ macierz nie ma możliwości sprawdzenia, która kopia jest prawidłowa. ZFS posiada taką wiedzę, ponieważ porównuje dane z sumą kontrolną, którą sam wygenerował podczas zapisu.
Jeśli posiadasz jeden dysk wirtualny i chcesz uzyskać pewne możliwości naprawcze, sudo zfs set copies=2 tank/important pozwala na przechowywanie dwóch kopii każdego bloku danego zbioru danych na tym samym nośniku. Podwaja to zajętość miejsca przez ten zbiór, pozwala przetrwać uszkodzenie pojedynczego bloku, ale nie pomaga w przypadku awarii całego wolumenu.
Operacja scrub odczytuje wszystkie dane w puli i weryfikuje ich poprawność.
sudo zpool scrub tank
zpool status tankZdrowa pula kończy się komunikatem podobnym do scan: scrub repaired 0B in 00:04:11 with 0 errors. Warto zaplanować to zadanie w harmonogramie; dla małej puli wystarczy raz w miesiącu.
systemctl list-unit-files 'zfs-scrub*'
sudo systemctl enable --now zfs-scrub-monthly@tank.timerDataset jest jednostką polityki
Dataset to system plików wewnątrz puli. Jego tworzenie jest mało kosztowne, dlatego należy tworzyć osobny dataset dla każdego zadania. Właściwości są dziedziczone z puli, co oznacza, że ustawia się wartość domyślną raz, a następnie nadpisuje ją tam, gdzie jest to wymagane. W systemie FreeBSD w ten sposób zazwyczaj uruchamia się jails – jeden dataset na jail, dzięki czemu można wykonać snapshot i przywrócić pojedynczy jail niezależnie od reszty systemu. Jest to jeden z elementów, który odróżnia jail od kontenera Docker.
sudo zfs create tank/data
sudo zfs create tank/pg
sudo zfs set compression=lz4 tank
sudo zfs set atime=off tank
sudo zfs set quota=20G tank/data
sudo zfs set recordsize=16K tank/pg
zfs get -r compression,compressratio,quota tankKompresja to właściwość, którą użytkownicy często pomijają z ostrożności, co jest podejściem błędnym. lz4 wymaga niewielkiej ilości zasobów CPU i redukuje liczbę bajtów zapisywanych na dysku, więc w przypadku danych podatnych na kompresję zazwyczaj przyspiesza operacje odczytu i zapisu. zstd kompresuje dane silniej kosztem większego obciążenia CPU, co sprawdza się w przypadku logów i archiwów, do których rzadko się zagląda. Warto sprawdzić rzeczywiste efekty za pomocą zfs get compressratio tank, pamiętając, że współczynnik uwzględnia tylko dane zapisane po ustawieniu tej właściwości.
recordsize to największy blok zapisywany przez dataset, domyślnie 128K. Baza danych zapisująca strony 8 KiB w rekordach 128 KiB powoduje, że pojedynczy mały zapis wymusza odczyt całego rekordu, jego modyfikację i ponowny zapis. Ustaw recordsize=16K dla datasetu bazy danych przed załadowaniem danych, ponieważ właściwość ta dotyczy tylko nowo zapisywanych bloków.
quota to sposób na ograniczenie datasetu, aby nie zapełnił całej puli. Pula ZFS zbliżająca się do 100% zajętości staje się wolna i trudna w czyszczeniu, dlatego należy celowo pozostawić wolne miejsce.
Migawki nie generują kosztów, dopóki dane nie ulegną zmianie
ZFS nigdy nie nadpisuje aktywnego bloku. Zapisuje nowy blok i aktualizuje wskaźniki, co stanowi istotę mechanizmu copy-on-write. Migawka to zapis informujący o konieczności zachowania bloków, na które wskazywał dany zbiór danych w momencie jej wykonania, dlatego proces ten jest natychmiastowy i bezpłatny.
sudo zfs snapshot tank/data@2026-08-11
zfs list -t snapshot -o name,used,refer -r tank/dataKolumna USED dla migawki wskazuje przestrzeń zajmowaną wyłącznie przez tę migawkę. Wartość ta zaczyna się od zera i rośnie w miarę modyfikacji lub usuwania danych, ponieważ stare bloki nie mogą zostać zwolnione.
Odzyskanie pliku nie wymaga procedury przywracania.
ls /tank/data/.zfs/snapshot/
cp /tank/data/.zfs/snapshot/2026-08-11/notes.txt /tank/data/notes.txtKatalog .zfs jest ukryty nawet przed ls -a, dopóki nie zostanie uruchomione polecenie sudo zfs set snapdir=visible tank/data. Migawkę należy wykonać przed wystąpieniem awarii, ponieważ w przeciwnym razie przypadkowe rm -rf wymusza przejście na ścieżkę odzyskiwania ext4, która zaczyna się od odmontowania dysku i wiąże się z dalszymi komplikacjami.
Wycofanie zmian (rollback) usuwa wszystko, co zostało zapisane od momentu wykonania migawki.
sudo zfs rollback tank/data@2026-08-11Operacja zostanie odrzucona, jeśli istnieją nowsze migawki, a -r usuwa te nowsze migawki, aby kontynuować. Przed zatwierdzeniem polecenia należy dwukrotnie sprawdzić nazwę zbioru danych.
Migawka nie jest kopią zapasową. Znajduje się ona w tej samej puli, na tym samym wolumenie i na tym samym serwerze. Awaria wolumenu lub zpool destroy powoduje utratę migawek wraz z danymi. Migawki chronią przed własnymi rm oraz nieudaną aktualizacją, co zabezpiecza przed wieloma rzeczywistymi incydentami, jednak nie chronią przed awariami samej puli. Pełne uzasadnienie znajduje się tutaj: dlaczego migawka VPS nie jest kopią zapasową.
Wysyłanie i odbieranie: replikacja jednym poleceniem
zfs send zamienia migawkę w strumień bajtów na standardowym wyjściu, a zfs receive przywraca ten strumień do postaci zbioru danych. Pierwsza kopia to pełne wysłanie (full send).
sudo zfs snapshot tank/data@daily-2026-08-11
sudo zfs send tank/data@daily-2026-08-11 | ssh backup.example.com "sudo zfs recv -F backup/data"Następnie należy wysyłać tylko zmiany, które zaszły między dwiema migawkami.
sudo zfs snapshot tank/data@daily-2026-08-12
sudo zfs send -i tank/data@daily-2026-08-11 tank/data@daily-2026-08-12 | ssh backup.example.com "sudo zfs recv backup/data"Strona odbierająca musi posiadać migawkę, z której wysyłane są dane. W przeciwnym razie operacja odbierania zostanie przerwana z błędem cannot receive incremental stream: most recent snapshot of backup/data does not match incremental source, ponieważ ZFS nie posiada bazy, do której mógłby zastosować różnice. Należy wysłać dane z migawki obecnej po obu stronach lub rozpocząć proces od nowa, wykonując pełne wysłanie.
Zamiast używać zdalnego konta root, należy nadać uprawnienia na celu za pomocą: sudo zfs allow -u backupuser create,mount,receive backup/data.
Jest to pełnoprawna kopia zapasowa poza lokalizacją (off-site), pod jednym warunkiem. Zdalny system musi być pulą ZFS, ponieważ pamięć obiektowa nie może odebrać takiego strumienia. Jeśli celem jest pamięć zgodna z S3 lub zwykły host z systemem Linux, należy użyć narzędzia obsługującego ten protokół, a artykuł kopie zapasowe restic z VPS opisuje tę ścieżkę.
Dlaczego ZFS zużywa tak dużo pamięci RAM? ARC
ARC (adaptive replacement cache) to pamięć podręczna odczytu systemu ZFS. Znajduje się ona w pamięci jądra, a nie w standardowej pamięci podręcznej stron systemu Linux, dlatego free -h nie uwzględnia jej w kolumnie buff/cache. Jest ona raportowana jako pamięć używana. Serwer z ZFS, który wydaje się niemal w pełni obciążony, zazwyczaj posiada po prostu rozgrzaną pamięć podręczną; to wyjaśnia większość zgłoszeń typu "ZFS zjadł mój RAM".
Domyślny limit jest celowo ustawiony wysoko. OpenZFS 2.3 ustala maksymalny rozmiar ARC jako większą z dwóch wartości: RAM minus 1 GiB lub 5/8 całkowitej pamięci RAM. Wersje OpenZFS 2.2 i starsze w systemie Linux wykorzystywały połowę pamięci RAM, podczas gdy system FreeBSD stosował już nowszą zasadę. Uruchom zfs version, aby sprawdzić, która reguła obowiązuje w Twoim systemie.
The data behind this chart
[
{
"label": "2 GB VPS",
"openzfs_2_2_linux_gib": 1,
"openzfs_2_3_gib": 1.25
},
{
"label": "4 GB VPS",
"openzfs_2_2_linux_gib": 2,
"openzfs_2_3_gib": 3
},
{
"label": "8 GB VPS",
"openzfs_2_2_linux_gib": 4,
"openzfs_2_3_gib": 7
},
{
"label": "16 GB VPS",
"openzfs_2_2_linux_gib": 8,
"openzfs_2_3_gib": 15
}
]Powyższe wartości to udokumentowane domyślne zasady dla typowych rozmiarów instancji, a nie pomiary z działającego serwera. Na instancji z 4 GB pamięci RAM reguła z wersji 2.3 pozwala na ARC o rozmiarze 3 GiB. Ta sama maszyna w wersji 2.2 zatrzyma się na 2 GiB. Instancja z 2 GB pamięci RAM przy regule 2.3 nadal pozwala na 1.25 GiB. Twoja aplikacja otrzymuje to, co pozostanie.
Odczytaj rzeczywiste wartości z własnego serwera, zamiast polegać na tabeli:
grep -E '^(size|c_max) ' /proc/spl/kstat/zfs/arcstats
arc_summary | head -n 20Trzecia kolumna zawiera wartości w bajtach. c_max to aktualnie obowiązujący limit, a size to ilość pamięci aktualnie zajmowanej przez ARC.
ARC zwalnia pamięć. Jądro sygnalizuje presję, a ARC się kurczy. Problemem jest czas reakcji, ponieważ proces zmniejszania jest wywoływany przez tę presję. Proces żądający nagle kilkuset MiB może zostać przerwany przez mechanizm OOM (out of memory) killer, zanim ARC zdąży zwolnić zasoby. Na maszynie z 2 GB RAM, obsługującej bazę danych i serwer WWW, nie jest to rzadkie zjawisko. Dokumentacja OpenZFS wskazuje na to samo w przypadku ręcznych zmian: obniżenie limitu "nie spowoduje zmniejszenia ARC bez presji pamięci wymuszającej to działanie".
Jak ograniczyć ARC na małym VPS
Najpierw określ zapotrzebowanie na pamięć dla obciążenia. Zsumuj wymagania bazy danych i aplikacji, zachowaj margines dla systemu operacyjnego, a pozostałą część przydziel dla ARC. W przypadku instancji 4 GB z uruchomioną bazą Postgres i jedną aplikacją webową, 512 MiB do 1 GiB dla ARC stanowi rozsądny punkt wyjścia.
Ustaw limit w czasie rzeczywistym, podając wartość w bajtach. Poniższy przykład ustawia 1 GiB.
echo 1073741824 | sudo tee /sys/module/zfs/parameters/zfs_arc_maxZapewnij trwałość ustawienia po restarcie.
echo 'options zfs zfs_arc_max=1073741824' | sudo tee /etc/modprobe.d/zfs.conf
sudo update-initramfs -uKrok z initramfs jest istotny, ponieważ moduł może załadować się z initramfs przed zamontowaniem głównego systemu plików, co oznaczałoby, że plik nie zostanie odczytany. Po restarcie zweryfikuj ustawienie za pomocą linii c_max z arcstats.
Podręcznik użytkownika wskazuje na dwa ograniczenia. Nie można przywrócić wartości 0 podczas pracy systemu, więc cofnięcie zmian wymaga edycji pliku i restartu. Ponadto obniżenie wartości nie powoduje natychmiastowego zmniejszenia już zajętego obszaru ARC.
W systemie FreeBSD ten sam limit jest dostępny jako sysctl pod vfs.zfs.arc. Uruchom sysctl vfs.zfs.arc, aby sprawdzić bieżące wartości oraz dokładną nazwę używaną przez daną wersję, a następnie zapisz wartość maksymalną w /boot/loader.conf.
Dwie dodatkowe zasady dotyczące pamięci na małym serwerze. Wyłącz deduplikację, ponieważ tabela deduplikacji znajduje się w pamięci RAM, a powszechnie przyjęta zasada mówi o 1 do 3 GB pamięci RAM na 1 TB unikalnych danych. Nie umieszczaj partycji wymiany (swap) na zvol (urządzeniu blokowym wydzielonym z puli), ponieważ wymiana przez system plików, który próbuje zwolnić pamięć, może doprowadzić do zakleszczenia maszyny. Utrzymuj swap na zwykłej partycji lub pliku wymiany poza pulą.
Kiedy ext4 lub XFS wraz z restic stanowią lepsze rozwiązanie
ZFS sprawdza się na serwerze z nadmiarem pamięci RAM i drugim wolumenem. W innych przypadkach prosty system plików w połączeniu z właściwym narzędziem do kopii zapasowych jest lepszym wyborem. Wybierz ext4 lub XFS, gdy:
- Instancja posiada 2 GB lub 4 GB pamięci RAM, a obciążenie wymaga jej pełnej dostępności.
- Dostępny jest tylko jeden dysk wirtualny bez kopii zapasowej, przez co ZFS zapewnia jedynie wykrywanie błędów bez możliwości ich naprawy.
- Celem kopii zapasowej jest pamięć obiektowa lub zwykły host z systemem Linux, gdzie nie ma możliwości odebrania strumienia
zfs send. - Używasz systemu Debian z DKMS i nie możesz pozwolić sobie na aktualizację jądra, która spowoduje brak skompilowanego modułu.
- Wymagasz systemu ZFS na partycji głównej, a obrazy dostarczane przez dostawcę oferują jedynie ext4.
Pozostań przy ZFS, jeśli dysponujesz oddzielnym wolumenem na dane, masz zapas pamięci RAM (8 GB i więcej zapewnia komfort pracy) oraz plan wykorzystania migawek i zfs send, zamiast jedynie ich włączania. W pozostałych scenariuszach ext4 wraz z restic, zapisującym zaszyfrowane i zdeduplikowane kopie zapasowe w pamięci zewnętrznej, której serwer nie kontroluje, zapewnia zbliżony poziom bezpieczeństwa przy zerowym narzucie na pamięć operacyjną.
Tryby awarii i towarzyszące im komunikaty
Pula znika po restarcie. zpool status wyświetla no pools available. Usługa importu odczytuje /etc/zfs/zpool.cache, więc pula nieobecna w tym pliku nie jest importowana podczas startu systemu. sudo zpool import wyświetla listę pul możliwych do zaimportowania, sudo zpool import tank przywraca pulę, a sudo zpool set cachefile=/etc/zfs/zpool.cache tank zapewnia trwałość tej konfiguracji. Pula, która nie została poprawnie wyeksportowana z innego systemu, zgłasza cannot import 'tank': pool may be in use from other system, a sudo zpool import -f tank wymusza import, gdy istnieje pewność, że żaden inny host nie korzysta z puli.
modprobe: FATAL: Module zfs not found in directory /lib/modules/6.12.0-... w systemie Debian po aktualizacji jądra. Moduł DKMS nie zbudował się dla nowego jądra, zazwyczaj z powodu braku zainstalowanych odpowiednich nagłówków. dkms status pokazuje stan budowy dla poszczególnych jąder. sudo apt install -y linux-headers-$(uname -r), a następnie sudo dkms autoinstall, przebudowuje moduł, a sudo zpool import tank przywraca dostępność puli.
Pula jest pełna mimo usunięcia plików. Usunięte dane pozostają na dysku, dopóki odwołuje się do nich migawka, dlatego du i df wskazują różne wartości. zfs list -o space -r tank rozdziela użycie na USEDDS oraz USEDSNAP, a wysoka wartość USEDSNAP wskazuje przyczynę problemu. Usunięcie starych migawek za pomocą sudo zfs destroy tank/data@2026-06-01 zwalnia miejsce.
Wzrost liczników CKSUM w zpool status. Warstwa poniżej ZFS zwróciła uszkodzone dane. W przypadku mirrora licznik jest ostrzeżeniem, a blok został naprawiony. W puli jednodyskowej plik jest utracony, zpool status -v wskazuje jego ścieżkę, a plik należy przywrócić z kopii zapasowej, która nie znajduje się w tej puli.
Serwer działa wolno i korzysta ze swap. Należy ograniczyć ARC zgodnie z powyższymi instrukcjami, a następnie uruchomić arc_summary i sprawdzić współczynnik trafień (hit ratio). Zbyt mały ARC, który nie mieści zbioru roboczego, powoduje, że każdy odczyt trafia na dysk. W takiej sytuacji zwykły system plików korzystający z page cache może działać wydajniej.
FAQ
Ile pamięci RAM wymaga ZFS na VPS?
ZFS działa na instancji z 2 GB RAM. Kluczowe jest pytanie, ile pamięci pozostaje dla aplikacji. Bez optymalizacji OpenZFS 2.3 pozwala ARC na zajęcie większej z wartości: RAM minus 1 GiB lub 5/8 całkowitej pamięci RAM. W efekcie serwer z 4 GB RAM może przydzielić 3 GiB na pamięć podręczną. Ustaw zfs_arc_max na wartość, którą może poświęcić Twoje obciążenie, a następnie potwierdź ją, odczytując linię c_max z /proc/spl/kstat/zfs/arcstats.
Czy snapshot ZFS to kopia zapasowa?
Nie. Snapshot znajduje się w tej samej puli co dane. Przetrwa błędną operację rm oraz nieudaną aktualizację, ale zniknie wraz z pulą lub instancją. Zmień go w kopię zapasową, przesyłając go na inną maszynę za pomocą zfs send lub używając narzędzia do backupu, które zapisuje dane na nośniku niezarządzanym przez ten serwer.
Czy ZFS działa tak samo na FreeBSD i Linux?
Od wersji OpenZFS 2.0 z grudnia 2020 roku kod źródłowy jest wspólny, polecenia są identyczne, format zapisu na dysku jest ten sam, a pule można przenosić między systemami. Różnica tkwi w pakowaniu. FreeBSD dostarcza ZFS w systemie bazowym. W systemach Linux każda dystrybucja decyduje sama: Ubuntu buduje moduł wewnątrz pakietów jądra, podczas gdy Debian kompiluje go na Twojej maszynie za pomocą DKMS, więc aktualizacja jądra może pozostawić system bez modułu do czasu zakończenia przebudowy.
Czy ZFS może naprawić uszkodzenia na VPS z jednym dyskiem?
System wykryje uszkodzenie i wskaże plik, ale nie może go naprawić, ponieważ naprawa wymaga drugiej kopii bloku. Ustawienie zfs set copies=2 na zbiorze danych zapewnia taką kopię kosztem dwukrotnie większego zajęcia miejsca, co pozwala obsłużyć uszkodzony blok, ale nie utratę wolumenu. Rozwiązaniem, które faktycznie naprawia dane, jest mirror na dwóch wolumenach.
Czy kompresja spowalnia serwer?
lz4 zazwyczaj przyspiesza działanie. Skompresowane bloki oznaczają mniej bajtów do zapisu i odczytu, a koszt procesora na blok jest niewielki w porównaniu z oszczędnością miejsca na dysku. Ustaw compression=lz4 w katalogu głównym puli, aby każdy zbiór danych dziedziczył to ustawienie, a następnie sprawdź zfs get compressratio tank po zapisaniu rzeczywistych danych.