ZFS na VPS: jak zarządzać pamięcią RAM dla ARC
Dowiedz się, jak ograniczyć zużycie RAM przez ARC w systemach FreeBSD i Linux. Optymalizacja pamięci dla ZFS na serwerach VPS z 2 GB lub 4 GB RAM bez utraty wydajności.
Co oferuje ZFS i czego wymaga
ZFS w systemach FreeBSD oraz Linux korzysta obecnie z jednej bazy kodu, OpenZFS, dlatego funkcjonalność jest identyczna w obu środowiskach. 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. ZFS wymaga jednak pamięci RAM: ARC (adaptive replacement cache) domyślnie zajmuje znaczną część pamięci, co na VPS (virtual private server) o pojemności 2 GB lub 4 GB może odebrać zasoby niezbędne dla aplikacji.
Niniejszy przewodnik ocenia ZFS z perspektywy wynajmowanego VPS z jednym lub dwoma dyskami wirtualnymi, a nie serwera pamięci masowej z czterdziestoma kieszeniami na dyski. Warto poświęcić czas na funkcje, które sprawdzają się w takim scenariuszu. Przed utworzeniem puli należy poznać ograniczenia, które w tych warunkach nie znajdują zastosowania.
OpenZFS w systemach FreeBSD i Linux: jedna baza kodu, dwa podejścia do 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 zachowują się identycznie w obu systemach, a pula utworzona w jednym z nich może zostać zaimportowana w drugim.
Powodem, dla którego ZFS w systemie Linux jest pakietem, a we 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ą rozwojową 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 linuksowa część tego przewodnika. Jeśli korzystasz z FreeBSD w innym miejscu, serwer FreeBSD otrzymuje ZFS bez konieczności budowania modułów i bez problemów przy aktualizacji jądra.
Instalacja ZFS i utworzenie puli
W systemie Ubuntu moduł jest dostarczany w pakietach jądra, dlatego należy zainstalować jedynie 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. Wyświetlenie tylko jednej linii 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 na maszynie przez 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ć, co to oznacza: każda aktualizacja jądra wymusza ponowną kompilację, a nieudana kompilacja spowoduje, że pula nie zostanie zaimportowana do czasu usunięcia błędu.
W systemie FreeBSD nic nie wymaga instalacji. Należy włączyć usługę i ją uruchomić.
sysrc zfs_enable=YES
service zfs startTeraz kolej na pulę. Najpierw 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ść wynajmowanych obrazów startuje z partycji root typu ext4, więc ZFS w tym przypadku stanowi pulę danych na drugim wolumenie, a nie główny system plików. 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 zostaje wskazany. 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 dokonać naprawy.
W przypadku mirrora ten sam odczyt jest obsługiwany przez sprawną stronę, uszkodzony blok zostaje nadpisany, a zdarzenie pojawia się w kolumnie CKSUM w 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 VPS pamięć masowa hosta zazwyczaj posiada już redundancję, często w formie RAID 10 na poziomie hypervisora. Chroni to przed awarią 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 użytkownik dysponuje jednym dyskiem wirtualnym i chce uzyskać możliwość naprawy, 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 sytuacji, gdy cały wolumen przestaje być dostępny.
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łych pul wystarczająca jest częstotliwość miesięczna.
systemctl list-unit-files 'zfs-scrub*'
sudo systemctl enable --now zfs-scrub-monthly@tank.timerDataset to jednostka polityki przechowywania
Dataset to system plików wewnątrz puli. Tworzenie datasetów 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ą tylko tam, gdzie jest to wymagane.
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 uzyskuje się dostęp. 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 wynoszący 128K. Baza danych zapisująca strony o rozmiarze 8 KiB do rekordów 128 KiB powoduje, że pojedynczy mały zapis wymusza odczyt całego rekordu, jego modyfikację i ponowny zapis. Właściwość recordsize=16K należy ustawić na datasecie bazy danych przed załadowaniem danych, ponieważ dotyczy ona tylko nowo zapisywanych bloków.
quota to sposób na ograniczenie miejsca zajmowanego przez dataset, aby nie zapełnił całej puli. Pula ZFS zapełniona w blisko 100% działa wolno i jest trudna w oczyszczaniu, dlatego należy celowo pozostawić wolną przestrzeń.
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 jest notatką informującą system: „zachowaj bloki, na które wskazuje ten zbiór danych w tej chwili”, dlatego jej wykonanie jest natychmiastowe i bezpłatne.
sudo zfs snapshot tank/data@2026-08-11
zfs list -t snapshot -o name,used,refer -r tank/dataKolumna USED dla migawki oznacza przestrzeń zajmowaną wyłącznie przez tę migawkę. Wartość ta zaczyna się od zera i rośnie w miarę modyfikowania 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 potrzeby jej użycia, ponieważ bez niej przypadkowe rm -rf kieruje użytkownika na ścieżkę odzyskiwania ext4, która rozpoczyna się od odmontowania dysku i staje się znacznie bardziej skomplikowana.
Przywrócenie stanu (rollback) powoduje utratę wszystkich danych zapisanych od momentu wykonania migawki.
sudo zfs rollback tank/data@2026-08-11Operacja jest blokowana, 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 skutkami nieudanej aktualizacji, co zabezpiecza przed wieloma rzeczywistymi incydentami, jednak nie chronią przed zdarzeniami dotykającymi całą pulę. Pełne uzasadnienie znajduje się tutaj: dlaczego migawka VPS nie jest kopią zapasową.
Wysyłanie i odbieranie: replikacja w jednym poleceniu
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 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 kończy się 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 pełnego wysłania.
Zamiast używać zdalnego konta root, należy nadać uprawnienia na docelowym systemie za pomocą: sudo zfs allow -u backupuser create,mount,receive backup/data.
Jest to pełnoprawna kopia zapasowa poza lokalizacją pod jednym warunkiem. System docelowy musi być pulą ZFS, ponieważ pamięć obiektowa nie może odebrać 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 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 wykazuje jej w kolumnie buff/cache. Jest ona raportowana jako pamięć używana. Serwer ZFS, który wygląda na niemal w pełni obciążony, zazwyczaj posiada po prostu rozgrzaną pamięć podręczną i to właśnie wyjaśnia większość zgłoszeń typu „ZFS zjadł mój RAM”.
Domyślny limit jest celowo wysoki. OpenZFS 2.3 ustawia maksymalny rozmiar ARC jako większą z wartości: RAM minus 1 GiB lub 5/8 całkowitej pamięci RAM. Wersje OpenZFS 2.2 i starsze na systemach 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 ma zastosowanie w Twoim przypadku.
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 liczby to udokumentowane domyślne zasady stosowane dla typowych rozmiarów instancji, a nie pomiary z działającego serwera. Na instancji z 4 GB pamięci RAM, zasada z wersji 2.3 pozwala na ARC o rozmiarze 3 GiB. Ten sam serwer w wersji 2.2 zatrzyma się na 2 GiB. Instancja z 2 GB pamięci RAM przy zasadzie 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ść danych aktualnie przechowywanych w ARC.
ARC zwalnia pamięć. Gdy jądro sygnalizuje presję pamięci, ARC zmniejsza swój rozmiar. Problemem jest czas reakcji, ponieważ proces zmniejszania jest wywoływany przez tę presję. W rezultacie proces żądający nagle kilkuset MiB może zostać przerwany przez mechanizm OOM (out of memory) killer, zanim ARC zdąży zwolnić zasoby. Na serwerze z 2 GB pamięci RAM, obsługującym 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 należy określić zapotrzebowanie na pamięć dla obciążenia. Należy zsumować wymagania bazy danych oraz aplikacji, zachować margines dla systemu operacyjnego, a pozostałą część przydzielić dla ARC. W przypadku instancji 4 GB z uruchomionym Postgres oraz jedną aplikacją webową, wartości od 512 MiB do 1 GiB dla ARC stanowią rozsądny punkt wyjścia.
Wprowadź ustawienie 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 spowodowałoby pominięcie pliku konfiguracyjnego. Po restarcie zweryfikuj ustawienie za pomocą linii c_max z arcstats.
Dokumentacja techniczna 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 zmniejszenie wartości nie powoduje natychmiastowego zwolnienia pamięci przez 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ą w danej wersji, a następnie zapisz wartość maksymalną w /boot/loader.conf.
Dwie dodatkowe zasady dotyczące pamięci na małym serwerze. Należy wyłączyć deduplikację, ponieważ tabela deduplikacji znajduje się w pamięci RAM, a ogólnie przyjęta zasada mówi o 1 do 3 GB RAM na 1 TB unikalnych danych. Nie należy również umieszczać partycji swap na zvol (urządzeniu blokowym wydzielonym z puli), ponieważ operacje wymiany przez system plików, który próbuje zwolnić pamięć, mogą doprowadzić do zakleszczenia maszyny. Partycję swap należy utrzymywać na zwykłej partycji lub w 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 woluminem. W przeciwnym razie prosty system plików w połączeniu z odpowiednim 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 woluminem 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 przypadkach ext4 wraz z restic, zapisującym zaszyfrowane i zdeduplikowane kopie zapasowe w pamięci zewnętrznej, zapewnia zbliżony poziom ochrony bez obciążania pamięci operacyjnej.
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 nieujęta w tym pliku nigdy 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 utrwala tę zmianę. 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 tych danych.
modprobe: FATAL: Module zfs not found in directory /lib/modules/6.12.0-... w systemie Debian po aktualizacji jądra. DKMS nie zbudował modułów 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ły, a sudo zpool import tank przywraca pulę.
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 na 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 stanowi ostrzeżenie, a blok został naprawiony. W puli jednodyskowej plik jest utracony, zpool status -v wskazuje jego ścieżkę, a odzyskanie danych wymaga przywrócenia pliku z kopii zapasowej, która nie znajduje się w tej puli.
Serwer działa wolno i korzysta ze swapu. 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 aktywnego zbioru danych, 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 serwerze VPS?
ZFS działa na instancji z 2 GB pamięci RAM. Kluczowe pytanie brzmi, ile zasobów pozostaje dla aplikacji. Bez dodatkowej konfiguracji OpenZFS 2.3 pozwala pamięci podręcznej ARC zająć większą z wartości: RAM minus 1 GiB lub 5/8 całkowitej pamięci RAM. W rezultacie serwer z 4 GB RAM może przydzielić 3 GiB na cache. Należy ustawić zfs_arc_max na wartość, którą może poświęcić dane obciążenie, a następnie zweryfikować ją, odczytując linię c_max z pliku /proc/spl/kstat/zfs/arcstats.
Czy snapshot ZFS to kopia zapasowa?
Nie. Snapshot znajduje się w tej samej puli co dane. Chroni przed błędną komendą rm oraz nieudaną aktualizacją, ale ulega zniszczeniu wraz z pulą lub instancją. Aby przekształcić go w kopię zapasową, należy przesłać go na inną maszynę za pomocą zfs send lub użyć 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, komendy są identyczne, format zapisu na dysku jest ten sam, a pule można przenosić między systemami. Różnica polega na sposobie pakowania. FreeBSD zawiera ZFS w systemie bazowym. W systemach Linux każda dystrybucja decyduje o sposobie implementacji: Ubuntu buduje moduł wewnątrz pakietów jądra, podczas gdy Debian buduje go lokalnie za pomocą DKMS. W tym drugim przypadku aktualizacja jądra może spowodować brak modułu do czasu pomyślnego zakończenia przebudowy.
Czy ZFS może naprawić uszkodzenia na VPS z jednym dyskiem?
System wykrywa uszkodzenie i wskazuje 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 zużycia miejsca. Rozwiązuje to problem uszkodzonego bloku, ale nie utraty wolumenu. Rozwiązaniem zapewniającym faktyczną naprawę jest mirror na dwóch wolumenach.
Czy kompresja spowalnia serwer?
lz4 zazwyczaj przyspiesza działanie systemu. 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. Należy ustawić compression=lz4 w głównym katalogu puli, aby każdy zbiór danych dziedziczył to ustawienie, a następnie sprawdzić zfs get compressratio tank po zapisaniu rzeczywistych danych.