sobota, 13 kwietnia 2013

Migracja ZFS

Kilka dni temu jeden z moich produkcyjnych serwerów odmówił posłuszeństwa. Właściwie to wypiął się na mnie całkowicie w tak paskudny sposób, że przestał działać nie informując właściwie dlaczego.

Objawy były takie "byle jakie". System działał, nie rzucał żadnymi błędami aż w pewnym momencie łapał kilkudziesięcio sekundowe zwiechy. Wydajność dysków przy zapisie spadała z ~80M/s do 0,5M/s lub mniej.


System FreeBSD 9.0-STABLE , 6GB RAM, 2 x 64GB SAS wpięte w Smart Array E200i. Pierwsze podejrzenia padły na pamięć RAM, niestety po przetestowaniu jej Memtestem okazało się że to nie ona. W drugiej kolejności na warsztat poszły dyski oraz kontroler. Przy okazji wyszło że używając ZFS'a dobrze jest zawsze zostawić troszkę zapasu wolnego miejsca**. W tym przypadku przestrzeń była wykorzystana w 97%, więc ZFS rył po napędach w poszukiwaniu wolnych sektorów, co było widoczne w ciągłej pracy dysków (gstat pokazywał ~100% użycie). Okazało się również że sam kontroler zwariował, prawdopodobnie przez  wcześniejszą próbę uruchomienia na nim 4K sektorowych dysków które zostały spięte w MIRROR a potem wyciągnięte. Ale przynajmniej już wiem że Smart Array E200i nijak sobie nie radzi z takimi dyskami.Tak czy inaczej doszedłem do wniosku że bez wymiany kontrolera się nie obejdzie.

Ktoś na forum FreeBSD podrzucił mi listę kontrolerów SAS/SATA dla FreeBSD .
Po przeszukaniu portali aukcyjnych trafiłem na IBM ServerRAID M1015  na chipsecie LSI SAS2008 nie dość że był w dobrej cenie to dodatkowo sprzedawca był z Wrocławia, więc mogliśmy sprawę załatwić od ręki. Po przeflashowaniu kontrolera do "IT Firmware"*** zostałem posiadaczem 8 portowego kontrolera SAS/SATA nadającego się idealnie pod ZFS.

Ostatnią rzeczą jaka została to było przeniesienie całego działającego systemu ze Smart Array E200i+64SAS na LSI SAS2008+750SATA. Po wpięciu do drugiej maszyny LSI z dyskami i instalacji na nich FreeBSD 9.1-STABLE (odpada zabawa z zpool.cache i vfs.root.mountfrom) przyszedł czas na kopiowanie.
sprawę załatwiło :
zfs snapshot -r zroot@MOVE
zfs send -Rv zroot@MOVE | ssh root@LSI 'zfs recv -vF sys/ROOT/zroot'
61G danych kopiował  jakieś ~60 minut. Po wszystkim zostałem z nowym kontrolerem , nowymi dyskami i całkiem nowiutkim datasetem sys/ROOT/zroot ;)
Teraz już tylko trzeba było uruchomić to wszystko na produkcyjnym serwerze i mogłem iść spać...
Niestety, zapomniałem żeby "zawsze spodziewać się niespodziewanego", i tak było tym razem.
Dzięki wykorzystaniu ZFSowego Boot Environment wystarczyło :
zfs set mountpoint=legacy sys/ROOT/zroot
zpool set bootfs=sys/ROOT/zroot sys
zfs set canmount=on sys/ROOT/zroot
Restart i...
 mouting from zfs:sys/ROOT/zroot failed with error 2
Po kilku wyrazach których nie powinienem tu przytaczać, zapytałam Pana Google co o tym sądzi. Okazało się że ma do coś do powiedzenia, i to nawet sporo. Przecież chciałem wystartować system który de facto nie był już 9.1-STABLE tylko 9.0 a więc zpool.cache oraz vfs.root.mounfrom były jednak wskazane. A więc kolejny szybki boot LiveCD i
zpool import -o cachefile=/tmp/zpool.cache -o altroot=/mnt sys
mount -t zfs sys/ROOT/zroot /mnt
cp /tmp/zpool.cache /mnt/boot/zfs/zpool.cach
 Restart i...
mouting from zfs:sys/ROOT/zroot failed with error 2
Pomyślałem... Ok, zanim pójdę po kanister i obleję benzyną ten cały złom i podpalę a klientom powiem że właśnie robię grilla na ich danych może jednak wszystko prześledzę jeszcze raz po kolei. Tak też zrobiłem, niestety po 20 minutach i kilku rebootach zakończonych "failed with error 2" uśmiechającym się do mnie z ekranu, zacząłem się na poważnie zastanawiać gdzie mam zapałki.  Aż tu nagle, olśnienie. Wymagałem od systemu żeby zamontował file system z dysków których.... nie widział. Kolejny reboot do LiveCD, kolejny import, montowanie, edycja /boot/loader.conf z
mps_load="YES"
Restart i ...
login : ....
:D System wstał, wszystkie usługi wystartowały! Szybki test, zapis/odczyt dysków 130M/s, zero przycięć, wolna przestrzeń 660G. Czyli wszystko tak jak być powinno. Kontroler pracuje już kilka dni i na razie nie ma z nim żadnych problemów. Zostało jeszcze 6 wolnych portów, więc chyba pomyślę nad kolejną porcją dysków, w końcu "miejsca nigdy dość", prawda ?

Na koniec chciałem podziękować chłopakom z forum FreeBSD a w szczególności vermadenowi bez pomocy których, wylałbym chyba tą benzynę i znalazł zapałki...

** To trochę to przynajmniej 20% wolnego miejsca.

*** W razie otrzymania błędu "Failed to initialize PAL" trzeba zreflashować kartę na innej płycie głównej

Brak komentarzy:

Prześlij komentarz