ZFS i Ubuntu 9.04
2009-06-15, Poniedziałek 09:31:08 +0200, autor Karol „Zal” Zalewski, licencja LPRCTKC
Wstęp
ZFS to system plików. Stworzony przez Sun Microsystems, wykorzystywany w systemach operacyjnych Solaris i OpenSolaris, a wydany na wolnej licencji CDDL. Obecnie obsługiwany również przez FreeBSD (istniało również wsparcie dla MacOS-a X). Jest to "killer feature", który nie pojawił się w jądrze Linuksa. Dlaczego? O tym za chwilę.
ZFS to 128-bitowy system plików stworzony głównie z myślą o zastosowaniach serwerowych. Zrywa on z dotychczasowymi kanonami projektowania systemu plików i stanowi coś, co dotychczas można było uzyskać przy połączeniu systemu plików z logicznymi wolumenami (LVM) i RAID-em. I to nie wszystko. Przynajmniej do czasu pojawienia się Btrfs firmy Oracle. Oto główne zalety ZFS-a:
- możliwość łatwego zarządzania danymi i dołączania np. nowych dysków do istniejącej już puli,
- możliwość łatwego tworzenia backupów przy pomocy migawek (ang. snapshot) oraz klonów (ang. clones),
- wykorzystanie techniki kopiowania przy zapisie (ang. copy-on-write) oraz 256-bitowych sum kontrolnych celem uniknięcia ukrytych błędów oraz traktowania operacji, jako transakcji,
- ograniczenie wielkości pojedynczego pliku i wolumenu do 16 EiB,
- transparentna kompresja danych,
- RAID-Z,
- i wiele innych.
W drodze jest również wprowadzenie tego, co ma i dla mnie duże znaczenie. Transparentne szyfrowanie danych przechowywanych z wykorzystaniem ZFS-a. Co zatem powoduje, że ZFS nie pojawił się w jądrze Linuksa?
CDDL to wolna licencja stworzona na bazie licencji MPL. W telegraficznym skrócie i w mocnym uproszczeniu - pod względem liberalności blisko jej do licencji BSD, zawiera jednak m.in. interesujące zapisy dot. patentów (np. punkt 6.2) i nie jest zgodna z GPL-em. Oznacza to, iż kodu napisanego na licencjach GPL i CDDL nie można ze sobą łączyć. Czy można zatem przepisać ZFS-a na nowo, tym razem na licencji GPL? Nie do końca - Sun posiada ponad 50 patentów związanych z systemem plików ZFS. Wykorzystywanie takiej GPL-owej implementacji mogłoby być w pewnych krajach mocno utrudnione.
Rozwiązanie
Rozwiązaniem, mało eleganckim, ale nadal użytecznym, okazało się być zastosowanie FUSE. Jak sama nazwa wskazuje, FUSE umożliwia wprowadzenie do systemu operacyjnego danego systemu plików bez potrzeby ingerencji w jądro. Cała obsługa zawiera się zatem w przestrzeni użytkownika. Ma to swoje wady i zalety. Główną zaletą w tym przypadku jest to, iż istnieje możliwość wykorzystania ZFS-a. A wada? Prędkość działania takiego rozwiązania. Co prawda, NTFS-3G również korzysta z FUSE i całkiem nieźle radzi sobie z wydajnością to należy jednak zaznaczyć, iż nie jest to cecha typowa dla rozwiązań opartych na FUSE.
Jak zatem wykorzystać FUSE i zainstalować obsługę ZFS-a pod Ubuntu 9.04?
Instalacja
Z pomocą przychodzi wiki Ubuntu (dzięki Grzglo za wskazówkę). Wystarczy dodać odpowiednie repozytoria do pliku /etc/apt/sources.list:
deb http://ppa.launchpad.net/brcha/ubuntu jaunty main deb-src http://ppa.launchpad.net/brcha/ubuntu jaunty main
A następnie zainstalować obsługę Zettabyte File System:
sudo aptitude update sudo aptitude install zfs-fuse
Voilà! Oczywiście, należy uważać na taki system plików z kilku powodów. Jednym z nich jest to, iż całość opiera się na kodzie ZFS on FUSE, który nie był aktualizowany od co najmniej pół roku, jeżeli wierzyć repozytorium Mercuriala. Nie jest to dobry znak.
Obsługa
Pod względem instalacji i obsługi ZFS wiki Ubuntu jest wartościowym źródłem i tak właściwie nie widzę sensu, aby jej tutaj przytaczać. Należy mieć jedynie świadomość tego, iż całość sprowadza się do obsługi dwóch programów - zfs oraz zpool - służących do zarządzania i konfigurowania puli ZFS.
Dla osób lubiących korzystać ze wszelkiego rodzaju "cheatsheetów" można polecić pracę Colina Seymoura.
Na zakończenie
Jak sami widzicie, wpis ten nie ma na celu zastąpienia Wikipedii, czy też wiki Ubuntu, lecz ma zwrócić uwagę na interesujący system plików, jakim jest ZFS. Uważam, iż ma to szczególne znaczenie w momencie, gdy w jądrze Linuksa mamy już stabilną obsługę Ext4, a wielkimi krokami zbliża się również Btrfs stanowiący odpowiedź na ZFS.
Ja sam korzystam z tego systemu plików już od kilku dni, ale i tak zalecam szczególną ostrożność przy testowaniu ZFS-a pod Linuksem.
2009-06-15 o Poniedziałek 09:53:08 +0200
A pozbyli się już tego ficzera w którym ZFS bez pytania zajmuje cały dostępny dysk?
Poza tym pozostaje pytanie czy nie jest to już sztuka dla sztuki. Wolniejsze od oryginału, nie jest wkompilowane w jądro, więc nie można wykorzystać natywnie, GRUB też tego nie wspiera.
I pytanie... gdzie są wykresy z testów? ;>
2009-06-15 o Poniedziałek 09:58:56 +0200
@Matthew: Do puli ZFS-owej możesz sobie nawet pojedyncze pliki z innego FS-u dołączać. Możliwe, że jakiś instalator Solarisa/OpenSolarisa podczas instalacji miał dwie opcje do wyboru - "wyłącz" oraz "przeoraj cały dysk" - ale to już raczej nie jest zarzut w stronę ZFS-a. Ja obecnie całość testuję mając w puli /dev/sda4 ;]
Co do FUSE - tak, jak wspomniałem, nie jest to rozwiązanie do zastosowań produkcyjnych. Raczej ciekawostka i możliwość zapoznania się z ZFS-em. Szkoda tylko, że na Btrfs trzeba jeszcze trochę poczekać. Aktualnie jeszcze nie jest konkurencją nawet dla ZFS-a po FUSE.
A odnosząc się do wykresów - na bogów! Przy moim wszechobecnym szyfrowaniu nawet nie chciałoby mi się środowiska do testów stawiać ;D Podejrzewam jednak, że siłą rzeczy ZFS on FUSE jest wolniejszy, niż NTFS-3G. Głowy jednak za to nie oddam.
2009-06-15 o Poniedziałek 10:04:08 +0200
Jak ja to robiłem, to nawet znajomy admin, który ZFS'em się zajmował, przyznał, że ZFS bierze cały dysk dla siebie. Przez co, jeżeli chce się wykorzystać ten dysk do czegos innego to trzeba robić mu dodatkowe partycje w ramach ZFS'a i Solarisa (chociaż nie mam pojęcia jak to ma wyglądać).
2009-06-15 o Poniedziałek 10:07:31 +0200
@Matthew: U mnie ZFS zachowuje się pod tym względem, jak każdy inny system plików. Jeżeli nie wydzielisz mu partycji i do puli dodasz całe urządzenie (w stylu /dev/sdb) to nie ma się co dziwić, że całe urządzenie wessie do puli. A jak całość masz podzieloną na partycje to i pojedynczą partycję strawi. Przecież w i tak wszystko traktowane jest jako plik w Linuksie, prawda? ;]
Podejrzewam, że w OpenSolarisie/Solarisie może to nieco inaczej wyglądać. Ale zależy to zapewne od przyjętych przez dane środowisko konwencji.
2009-06-15 o Poniedziałek 10:15:56 +0200
Tylko, że na Linuksie mogą stosować obejścia co do tego. Nie wiesz jakby to było gdyby ZFS mógł być natywnie na Linuksie. Poza tym zastanawiam się jak by wyglądało rozdzielenie /home od /. No i pozostaje problem z fragmentowaniem plików przez ZFS, przez co cała cudowna wydajność nagle ulatuje.
2009-06-15 o Poniedziałek 10:31:35 +0200
@Matthew: Rozwiń kwestię oddzielenia /home od / (punkt montowania da się bezproblemowo określić) oraz defragmentacji (online plus zmienne długości bloków). Jestem coraz bliżej stwierdzenia, że mówimy o dwóch różnych systemach plików :D
Wiele wątpliwości rozwieje zapewne zajrzenie do cheatsheeta stworzonego przez Colina.
2009-06-15 o Poniedziałek 10:57:41 +0200
/home - czy da się ustawić oddzielny home tak żeby podczas instalacji nowego systemu home'a starego nie wcinał. Akurat co do tego to nie mam pewności, bo się tym nie zajmowałem.
Co do fragmentacji - ZFS ma tą wadę, że co jakiś czas trzeba przekopiować mu cały dysk na inny, bo lubi bardzo fragmentować pliki przez co spada mu wydajność. Może już to naprawili, ale jak się pół roku tym interesowałem to tak to wyglądało.
2009-06-15 o Poniedziałek 11:18:08 +0200
@Matthew: Co do pierwszego - nie ma problemu. Może być wiele pul, każda ma w sobie inne urządzenia, czy ich części. Nie ma też problemu z eksportem danych itp. operacjami.
Odnosząc się do fragmentacji - tutaj nie jestem w stanie zbyt wiele powiedzieć. Defragmentacja jest realizowana w locie tak, jak ma to miejsce np. w przypadku Ext3. Niemniej jednak nie wiem, jak wygląda kwestia jej wydajności i skuteczności.
2009-06-15 o Poniedziałek 13:01:33 +0200
Zal: Miło zobaczyć, że krótki komentarz może zmotywować kogoś do napisania obszerniejszej notki. ^U góry bloga masz źle podomykane tagi, bo kilka znaków widnieje powyżej nagłówka tytułowego ^
Jeszcze pytanie do wszystkich, po doinstalowaniu ZFS macie możliwość formatowania partycji spod graficznych menedżerów dysku, np. GParted?
2009-06-15 o Poniedziałek 13:11:02 +0200
@Grzegorz: Twój komentarz był krótki, ale bardzo treściwy :]
Odnośnie znaków - dzięki za zwrócenie uwagi. Pojawiają się ze względu na to, iż całego bloga mam napisanego w XHTML 1.1, a obecnie w celach testowych zmieniłem typ MIME z "application/xhtml+xml" na wymuszony "text/html". Niedługo wróci do normy.
Co do graficznych narzędzi, jeżeli pytanie tyczy się puli ZFS-a - nie ma takiej możliwości. Co ciekawe - niektóre programy nadal wykrywają taką partycję wchodzącą w skład ZFS-owej puli, jako np. FAT o dziwnej etykiecie ("NGUTILS_h"). Windows też chciał mi już ją raz przeorać.
2009-06-15 o Poniedziałek 13:13:26 +0200
Zal: Właśnie pytałem, bo myślałem, że to tylko u mnie tak jest. Jest to o tyle dziwne, że NTFS-3G też korzysta z FUSE, a nie ma żadnych problemów z zarządzaniem takimi partycjami spod GParted.
2009-06-15 o Poniedziałek 14:07:08 +0200
ZFS w OSX jest martwym projektem. Działał w 10.5, ale tylko w trybie do odczytu i tylko w 10.5 (w 10.5.x już nie). Ostatnio wszelkie po nim wzmianki znikły ze stron Apple.
Polska Wikipedia niestety się myli.
2009-06-15 o Poniedziałek 14:14:49 +0200
@byte: Dzięki! Poprawiłem. We wszelkich wzmiankach dot. ZFS-a i MacOS-a, które znalazłem była informacja o tym, iż wsparcie rozpoczęło się od wersji 10.5 MacOS X. W niektórych, że wsparcie dotyczyło jedynie odczytu, a w jeszcze innych, że cały projekt można znaleźć na MacOSforge - przy czym nie udostępniono nawet instalatora. Nie wiedziałem, że ostatecznie Apple zrezygnowało z ZFS-a. Może zrazili się treścią CDDL-a? ;]
2009-06-15 o Poniedziałek 17:49:34 +0200
@Matthew
"GRUB też tego nie wspiera."
Jakby nie wspieral, to jak by sie OpenSolaris bootwal tylko z ZFS?
"I pytanie... gdzie są wykresy z testów? ;>"
Czemu nie zrobisz wlasnych?
Molbys tez uzyc Google, ale po co:
http://ciar.org/ttk/zfs-xfs-ext4.html
"Jak ja to robiłem, to nawet znajomy admin, który ZFS'em się zajmował, przyznał, że ZFS bierze cały dysk dla siebie."
Jezeli zrobisz mkfs.ext3 /dev/sda to tez zabierze caly dysk ...
Nikt ci nie roni storzyc zwyklych partycji podstawowych i przydzielic jedna lub wiecej na ZFS, a reszte na inne systemy plikow.
2009-06-15 o Poniedziałek 17:53:57 +0200
@vermaden:
1. Standardowy GRUB tego nie wspiera. GRUB w OpenSolarisie jest modyfikowany.
2. Za bardzo sobie cenię swoje dane żeby się tak bawić, a poza tym to, że ZFS działa dobrze na OpenSolarisie nie znaczy że będzie działał równie dobrze na Linuksie. Linuks ma wielkie problemy jeżeli chodzi o wykorzystanie dysku przez wiele procesów. Za to bardzo dobrze się spisuje w przypadku aplikacji które bardzo rzadko odwoływują się do systemu. Z Solarisem jest odwrotnie.
3. Ale OpenSolaris jak ja go testowałem brał bez pytania cały dysk. Nie ma możliwości zrobienia partycji. ZFS ciacha całe dostepne miejsce i dopiero na nim (FS w ZFS?) można zrobić inny system plików.
2009-06-15 o Poniedziałek 18:01:44 +0200
@Matthew:
Ad 3. To w takim razie problem ZFS-a, czy OpenSolarisa/Solarisa? Ja bym w ogóle nie brał tego pod uwagę.
2009-06-15 o Poniedziałek 18:04:06 +0200
@Zal: podejrzewam, że obu. Nie sądzę żeby Sun machnął taką gafę. Raczej to linuksowa wersja ZFS ma jakieś brzydkie hacki.
2009-06-15 o Poniedziałek 18:14:52 +0200
@Matthew: Aby było jasne - jest to problem OpenSolarisa/Solarisa. I to też nie do końca - podczas instalacji możesz skorzystać z narzędzi tekstowych (obecnie i z GUI) do podzielenia dysku na partycje. Co z resztą jest opisane w Getting Started With OpenSolaris 2009.06. Możesz być nieco skołowany tym, że na bazie jednej partycji solarisowej ZFS tworzy sobie automatycznie swój własny layout, którego w trakcie instalacji zmienić nie można. Cytuję: