Bajka o systemie plików
Przypowieść zaczyna się prosto, choć nie do końca tak, jak przywykliśmy:
# zpool create dupajasia /dev/sda2 /dev/sdb2 mount request: "dupajasia", "/dupajasia", "0", "" mounting /dupajasia Adding filesystem 1 at mntpoint /dupajasiaI dalej wiadomo, czego się spodziewać
# df -h dupajasia 1.9G 25K 1.9G 1% /dupajasia # zpool status pool: dupajasia state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM dupajasia ONLINE 0 0 0 mirror ONLINE 0 0 0 /dev/sda2 ONLINE 0 0 0 /dev/sdb2 ONLINE 0 0 0 errors: No known data errors # mount | tail -n 1 dupajasia on /dupajasia type fuse (rw,nosuid,nodev,allow_other)Zaskoczenie nazwami urządzeń? Słusznie.
# uname -a Linux mother 2.6.20-rc4 #22 Sun Jan 7 17:52:03 CET 2007 i686 athlon-4 i386 GNU/Linux
Dzięki wysiłkom Ricardo Correia najbardziej zaawansowany system plików jest już używalny pod Linuksem. Dopiero jako alpha, ale jest. Bardzo powolny zapis (nie zauważyłem więcej niż 3,5 MB/s), ale odczyt już z sensowną prędkością:
# zpool iostat 1 capacity operations bandwidth pool used avail read write read write ---------- ----- ----- ----- ----- ----- ---- ... dupajasia 200M 1.70G 483 0 59.6M 0
Działają snapshoty, działa kompresja:
# zfs get compressratio dupajasia NAME PROPERTY VALUE SOURCE dupajasia compressratio 1.15x -
Do celów archiwizacyjnych nadaje się idealnie. Bo działają również sumy kontrolne, czyli to, co w ZFS najbardziej do mnie przemawia. Wszystkie dane i metadane są checksumowane. Jeśli przy odczycie suma nie będzie się zgadzała, ZFS wykryje to, odczyta dane z innego mirrora, poprawi błędnie zapisane i zwróci aplikacji prawidłowe. Przy tradycyjnym zarządzaniu wolumenami, błędy powstające na jednym z mirrorów (czy to z winy dysku, kabla czy kontrolera) dostają się do odczytywanych danych losowo, w zależności z którego mirrora I/O scheduler postanowił odczytać blok. Tak więc czytając z RAID1 z jednym walniętym mirrorem można za każdym razem dostawać inne dane (niestety, doświadczyłem tego osobiście). Z ZFSem -- wyświetliwszy sobie status urządzeń od razu zauważymy, które zwraca błędy.
W każdej chwili możemy też kazać sprawdzić całość danych w pooli i wychwycić ewentualne błędy:
# zpool scrub dupajasia; sleep 5; zpool status pool: dupajasia state: ONLINE scrub: scrub in progress, 57.24% done, 0h0m to go ...
Oczywiście działają też ZFSowe RAIDy, bedące podrasowaną wersją zwykłych: raidz1 (odpowiada RAID5) i raidz2 (:= RAID6), radzące sobie z utratą jednego lub dwóch dysków.
Na ZFS składają się też elementy, które moim zdaniem powinny znaleźć się gdzie indziej. Chodzi o własny I/O scheduler i ARC. Szeregowaniem zadań wejścia/wyjścia w Linuksie zajmuje się warstwa blokowa. Dodatki, oferowane przez ZFS na Solarisie (np. wykrywanie czytania pliku wstecz) da się osiągnać np. przez adaptive readahead opracowany przez Wu Fengguanga. Linux wydaje się bardziej modularny, skoro takie algorytmy można po prostu wymienić, bez konieczności tworzenia nowego systemu plików. Również rolę Adaptive Replacement Cache z ZFSa bez problemu spełnia podsystem zarządzania pamięcią w Linuksie.
Mimo tych dwóch niedoróbek koncepcyjnych ZFS jest naprawdę niezłym systemem plików. Mam nadzieję, że niedługo stanie się nową lingua franca, nowym FATem wymiany danych. W końcu jest dostępny w Solarisie, Linuksie, a niedługo we FreeBSD7 i Mac OS X 10.5.
*** **Archived comments:** **DeHa** _2007-01-14 07:08:05_BTW: Jak Macowy Time Machine ma się do ZFS - jest onw jakis sposób oparty o ww. FS, czy też od niego zupełnie niezależny?
**z** _2007-01-14 12:01:25_Nie wiadomo oficjalnie, ale z opisów wygląda na ładne GUI do ZFSowych snapshotów.
**DeHa** _2007-01-14 12:22:07_A dalej tym tropem: Dirvisha [1] znasz?
[1] http://www.dirvish.org/
Taka mala uwaga dotyczaca ostatniej czesci Twego posta - IO scheduler i cache specjalnie zostal umieszczony w ZFS'ie. Zauwaz, ze ZFS to volume manager jak i system plikow, w efekcie ZFS "rozumie" dane na kazdej z warstw co umozliwia nieco bardziej inteligentne zarzadzanie danymi (cache, scheduler, itp.). W przypadku innych systemow plikow, gdzie warstwa blokowa, warstwa volume managera i warstwa file systemu sa oddzielne, poza file systemem reszta warstw nie "rozumie" juz danych.
Comments
Comments powered by Disqus