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 /dupajasia
I 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/

milek 2007-01-16 00:33:36

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