ZFS to lokalny system plików i menedżer woluminów logicznych stworzony przez Sun Microsystems Inc. w celu kierowania i kontrolowania umieszczania, przechowywania i wyszukiwania danych w systemach obliczeniowych klasy korporacyjnej.
System plików i menedżer woluminów ZFS charakteryzuje się integralnością danych, wysoką skalowalnością i wbudowanymi funkcjami pamięci masowej, takimi jak:
- Replikacja – proces tworzenia repliki (kopii) czegoś.
- Deduplikacja – proces, który eliminuje nadmiarowe kopie danych i zmniejsza koszty ogólne pamięci masowej.
- Kompresja – zmniejszenie liczby bitów potrzebnych do reprezentacji danych.
- Snapshoty – zestaw znaczników odniesienia dla danych w określonym punkcie w czasie.
- Klony – identyczna kopia czegoś.
- Ochrona danych – proces zabezpieczania ważnych informacji przed uszkodzeniem i/lub utratą.
Historia ZFS
Inżynierowie firmy Sun rozpoczęli prace rozwojowe nad ZFS w 2001 roku dla firmowego systemu operacyjnego (OS) Solaris opartego na Uniksie. W 2005 r. Sun udostępnił kod źródłowy ZFS na wspólnej licencji CDDL (Common Development and Distribution License) jako część systemu OpenSolaris OS. Społeczność programistów, w tym przedstawiciele firmy Sun i innych dostawców, pracowała nad ulepszeniami kodu open source i przenosiła ZFS na kolejne systemy operacyjne, w tym FreeBSD, Linux i Mac OS X.
Projekt open source OpenSolaris, który obejmował ZFS, zakończył się po przejęciu firmy Sun przez Oracle Corp. w 2010 roku i zastrzeżeniu znaku towarowego dla terminu ZFS. Inżynierowie Oracle kontynuują ulepszanie i dodawanie funkcji do ZFS na Solarisie. Oracle używa zastrzeżonego kodu ZFS jako podstawy dla Oracle Solaris, Oracle ZFS Storage Appliance i innych technologii Oracle.
Społeczność programistów rozpoczęła nowy projekt open source, nazwany OpenZFS, oparty na kodzie źródłowym ZFS w ostatecznym wydaniu OpenSolaris. Otwarta społeczność pracuje nad nowymi funkcjami, ulepszeniami i poprawkami błędów w kodzie OpenZFS. Systemy operacyjne, które wspierają OpenZFS to Apple OS X, FreeBSD, illumos (który jest oparty na OpenSolaris), oraz odmiany Linuksa takie jak Debian, Gentoo i Ubuntu. OpenZFS działa na wszystkich dystrybucjach Linuksa, ale tylko niektórzy komercyjni producenci dostarczają go jako część swoich dystrybucji. Do firm posiadających komercyjne produkty oparte na OpenZFS należą Cloudscaling, Datto, Delphix, Joyent, Nexenta, SoftNAS i Spectra Logic.
ZFS i OpenZFS przemawiają do przedsiębiorstw, które muszą zarządzać dużymi ilościami danych i zapewnić ich integralność. Wśród użytkowników są instytucje naukowe, laboratoria krajowe, agencje rządowe, firmy finansowe, telekomunikacyjne oraz firmy z branży mediów i rozrywki.
ZFS początkowo oznaczał Zettabyte File System, ale słowo zettabyte nie ma już żadnego znaczenia w kontekście systemu plików. Jako 128-bitowy system plików, ZFS ma potencjał skalowania do 256 kwadrylionów zettabajtów.
Jak działa ZFS
ZFS jest zaprojektowany do działania na pojedynczym serwerze, potencjalnie z setkami, jeśli nie tysiącami podłączonych dysków pamięci masowej. ZFS gromadzi dostępną pamięć masową i zarządza wszystkimi dyskami jako pojedynczą jednostką. Użytkownik może dodać więcej dysków do puli, jeśli system plików potrzebuje dodatkowej pojemności. ZFS jest wysoce skalowalny i obsługuje duży maksymalny rozmiar pliku.
ZFS przechowuje co najmniej dwie kopie metadanych za każdym razem gdy dane są zapisywane na dysku. Metadane zawierają informacje takie jak sektory dysku, w których przechowywane są dane, rozmiar bloków danych i sumę kontrolną cyfr binarnych fragmentu danych. Gdy użytkownik żąda dostępu do pliku, algorytm sumy kontrolnej wykonuje obliczenia w celu sprawdzenia, czy pobrane dane odpowiadają oryginalnym bitom zapisanym na dysku. Jeżeli suma kontrolna wykryje niespójność, oznacza błędne dane. W systemach z lustrzaną pulą pamięci lub ZFS-ową wersją RAID, ZFS może pobrać poprawną kopię z drugiego dysku i naprawić uszkodzoną kopię danych.
ZFS jest powszechnie określany jako system plików copy-on-write, choć Oracle opisuje go jako redirect on write. Gdy ZFS zapisuje dane na dysk, nie nadpisuje danych znajdujących się na miejscu. ZFS zapisuje nowy blok w innym miejscu na dysku i aktualizuje metadane tak, by wskazywały na nowo zapisany blok, jednocześnie zachowując starsze wersje danych.
Prawdziwy system plików copy-on-write tworzyłby dokładną replikę bloku danych w osobnej lokalizacji przed nadpisaniem oryginalnego bloku. Przed nadpisaniem danych, system musiałby odczytać poprzednią wartość bloku. System plików typu copy-on-write wymaga trzech operacji wejścia/wyjścia – odczytu, modyfikacji i zapisu – dla każdego zapisu danych. Natomiast system z przekierowaniem na zapis wymaga tylko jednej operacji wejścia/wyjścia, ułatwiając większą efektywność i wyższą wydajność.
ZFS jest popularnym wyborem dla systemów pamięci masowej podłączonych do sieci, wykorzystujących NFS na szczycie systemu plików, jak również w środowiskach serwerów wirtualnych. Innym częstym scenariuszem wdrożenia jest nakładanie klastrowego systemu plików, takiego jak General Parallel File System (GPFS) lub Lustre, na ZFS, aby umożliwić skalowanie do dodatkowych węzłów serwera. Użytkownicy OpenStack mogą wdrożyć ZFS jako bazowy system plików dla Cinder block storage i Swift object storage.
Kluczowe cechy ZFS
Snapshoty i klony: ZFS i OpenZFS mogą tworzyć kopie systemu plików point-in-time z dużą wydajnością i szybkością, ponieważ system zachowuje wszystkie kopie danych. Snapshoty są niezmiennymi kopiami systemu plików, podczas gdy klony mogą być modyfikowane. Migawki i klony są zintegrowane w środowiskach startowych z ZFS na Solarisie, umożliwiając użytkownikom cofnięcie się do migawki, jeśli coś pójdzie nie tak podczas łatania lub aktualizacji systemu. Inną potencjalną korzyścią z ZFS jest technika odzyskiwania danych przeciwko ransomware.
RAID-Z: RAID-Z pozwala na przechowywanie tych samych danych w wielu lokalizacjach w celu zwiększenia odporności na błędy i poprawy wydajności. System rekonstruuje dane na utraconym dysku przy użyciu informacji przechowywanych na innych dyskach systemu. Podobnie jak RAID 5, RAID-Z rozdziela informacje o parzystości na wszystkie dyski, aby umożliwić działanie systemu pamięci masowej nawet w przypadku awarii jednego z nich. Jednak w przypadku RAID-Z dane zapisywane są w postaci pełnych bloków, które mają zmienną wielkość. Mimo że RAID-Z jest zwykle porównywany do RAID 5, niektóre operacje są wykonywane inaczej, aby rozwiązać pewne problemy związane z tradycyjnym RAID. Jednym z problemów, które rozwiązuje RAID-Z jest tzw. efekt dziury w zapisie, kiedy to system nie jest w stanie określić, które bloki danych lub parzystości zostały zapisane na dysku w wyniku awarii zasilania lub katastrofalnego przerwania pracy systemu. Producenci systemów wykorzystujących tradycyjną macierz RAID zazwyczaj rozwiązują ten problem za pomocą zasilacza awaryjnego lub dedykowanego sprzętu.
RAID-Z2 obsługuje utratę dwóch dysków pamięci masowej, podobnie jak RAID 6, a RAID-Z3 może tolerować utratę trzech urządzeń pamięci masowej. Użytkownicy mają możliwość rozmieszczenia dysków w grupach, tak jak w przypadku konwencjonalnej macierzy RAID. Na przykład system z dwiema grupami po sześć dysków skonfigurowanych jako RAID-Z3 może tolerować utratę trzech dysków w każdej grupie.
Kompresja: Kompresja danych inline jest wbudowaną funkcją w ZFS i OpenZFS, pozwalającą na zmniejszenie liczby bitów niezbędnych do przechowywania danych. ZFS i OpenZFS obsługują wiele algorytmów kompresji. Użytkownicy mają możliwość włączenia lub wyłączenia kompresji inline.
Deduplikacja: Deduplikacja danych inline jest wbudowaną funkcją w ZFS i OpenZFS, która umożliwia efektywność składowania poprzez eliminację nadmiarowych danych. ZFS i OpenZFS znajdują duplikaty danych patrząc na sumę kontrolną dla bloku, która może mieć różny rozmiar. Użytkownicy mogą włączyć lub wyłączyć deduplikację inline.
ZFS send/receive: ZFS i OpenZFS umożliwiają wysłanie migawki systemu plików do innego węzła serwera, pozwalając użytkownikowi na replikację danych do oddzielnego systemu w celach takich jak tworzenie kopii zapasowych lub migracja danych do przechowywania w chmurze.
Bezpieczeństwo: ZFS i OpenZFS obsługują delegowane uprawnienia i drobnoziarniste listy kontroli dostępu, aby zarządzać tym, kto może wykonywać zadania administracyjne. Użytkownicy mają możliwość ustawienia ZFS jako tylko do odczytu, więc żadne dane nie mogą być zmienione. Oracle wspiera szyfrowanie w ZFS na Solarisie.
ZFS zalety i ograniczenia
ZFS integruje system plików i menedżera wolumenów, dzięki czemu użytkownicy nie muszą uzyskiwać i uczyć się oddzielnych narzędzi i zestawów poleceń. ZFS oferuje bogaty zestaw funkcji i usług danych bez żadnych kosztów, ponieważ jest wbudowany w system operacyjny Oracle. Open source OpenZFS jest dostępny za darmo. System plików może być rozbudowywany poprzez dodawanie dysków do puli pamięci masowej. Tradycyjne systemy plików wymagają zmiany rozmiaru partycji dyskowej w celu zwiększenia pojemności, a użytkownicy często potrzebują do tego produktów do zarządzania woluminami.
ZFS jest ograniczony do działania na pojedynczym serwerze, w przeciwieństwie do rozproszonych lub równoległych systemów plików, takich jak GPFS i Lustre, które mogą skalować się do wielu serwerów.
Bogaty zestaw funkcji oferowanych przez ZFS może sprawić, że oprogramowanie będzie skomplikowane w użyciu i zarządzaniu. Funkcje takie jak zintegrowane algorytmy sum kontrolnych ZFS mogą wymagać dodatkowej mocy obliczeniowej i wpływać na wydajność.
W społeczności linuksowej istnieją różne opinie na temat licencjonowania w odniesieniu do redystrybucji kodu ZFS i binarnych modułów jądra. Na przykład, Red Hat uważa za problematyczne rozpowszechnianie kodu chronionego na licencji CDDL z kodem chronionym na ogólnej licencji publicznej (GPL). Natomiast firma Canonical, która dystrybuuje Ubuntu, stwierdziła, że jest w zgodzie z warunkami licencji CDDL i GPL.
ZFS vs. OpenZFS
Oracle’s ZFS i open source OpenZFS wywodzą się z tego samego kodu źródłowego ZFS. W oddzielnych ścieżkach, Oracle i społeczność open source dodały rozszerzenia i dokonały znaczących ulepszeń wydajności odpowiednio ZFS i OpenZFS. Aktualizacje Oracle ZFS są własnościowe i dostępne tylko w technologiach Oracle. Aktualizacje kodu open source OpenZFS są dostępne za darmo.
Lista ulepszeń, które Oracle wprowadziło do ZFS od 2010 roku, obejmuje:
- szyfrowanie;
- obsługę utrzymywania skompresowanych danych po ponownym uruchomieniu systemu operacyjnego w adaptacyjnej pamięci podręcznej wymiany L2 (ARC);
- startowe etykiety Extensible Firmware Interface, które zapewniają obsługę dysków fizycznych i woluminów dysków wirtualnych o rozmiarze większym niż 2 TB;
- domyślne kwoty użytkowników i grup; oraz
- monitorowanie puli/systemu plików.
Lista aktualizacji, które społeczność open source wprowadziła do OpenZFS, obejmuje:
- dodatkowe algorytmy kompresji;
- resumowalne wysyłanie/odbieranie, które pozwala na ponowne uruchomienie długo trwającej operacji wysyłania/odbierania ZFS z punktu przerwania systemu;
- skompresowane wysyłanie/odbieranie, które pozwala systemowi na wysyłanie skompresowanych danych z jednej puli ZFS do innej bez konieczności dekompresji/rekompresji danych podczas przechodzenia z węzła wysyłającego do docelowego;
- compressed ARC, która pozwala ZFS zachować skompresowane dane w pamięci, umożliwiając większy zestaw danych roboczych w pamięci podręcznej; oraz
- maksymalny rozmiar bloku zwiększony ze 128 KB do 16 MB w celu poprawy wydajności podczas pracy z dużymi plikami i przyspieszenia rekonstrukcji danych podczas odzyskiwania po awarii dysku.