Przygoda z lapkiem – naprawianie filesystemu ReiserFS.

Sytuacja z życia wzięta: jest sobie laptop, który nie bootuje się z USB, ma dysk IDE podzielony na partycje. Po brutalnym wyłączeniu prądu (edukacja techniczna współdomowników poszła w las, niestety – wykazali się nadgorliwością przy wyłączaniu) okazuje się, że / z ReiserFS montuje się w trybie read only. Druga partycja z ext4 jest zdrowa, ale jest czymś w stylu /opt. Skoro nie można uruchomić żadnego systemu live (tzn. z USB, płyty CD nie mam pod ręką), to pozostaje maintaince mode.

Niby żaden problem – istnieją narzędzia do naprawy filesystemów, ale fsck.reiserfs nie należy do najbezpieczniejszych narzędzi, o czym zresztą sam ostrzega (i nie jest to ostrzeżenie nieuzasadnione, kiedyś nadgodziny przez to zaliczałem…). Uruchomienie z opcją –fix-fixable (co za nazwa), pomogło, ale nie do końca – dalej jest read only, a program sugeruje uruchomienie z opcją przebudowania drzewa. Tym razem ostrzeżenie zajmuje cały ekran i wprost sugeruje zrobienie backupu, najlepiej przerzucenie obrazu w bezpieczne miejsce przy pomocy ddrescue. I podają nawet adres, gdzie można uzyskać support, za jedyne 25 dolarów. Cóż, skoro tak, to jednak postaram się uruchomić jakieś liveCD, żeby zrobić porządek (cóż, wypalona płyta może się przydać kiedyś, więc bez dramatu, bo chociaż do niedawna sądziłem, że wszystko już potrafi uruchomić się z USB, to nie do końca tak jest)…

Niestety, okazuje się, że CD-ROM nie jest w pełni sprawny. Albo, że liveCD Squeeze’ego nie działa (bo płytę widzi, początek bootowania zachodzi). Na dodatek na zdrowej partycji jest ok. 7 GB miejsca, a na zepsutej zajęte ponad 8 GB, a sama ma rozmiar kilkudziesięciu GB, więc skopiowanie tam obrazu średnio wchodzi w grę, nawet z kompresją. Na inny system obrazu nie przerzucę, bo jak / jest w read only, to wifi nie działa (kabla nie sprawdzałem, nie chciało mi się podłączać). Może by działało, jakby było wicd-curses zainstalowane, ale nie było, a Xy oczywiście nie wstawały.

Ostatecznie postanawiam podmontować zdrowy filesystem, skopiować na niego tylko najpotrzebniejsze dane (czytaj: katalog domowy) i w najgorszym wypadku, jeśli nie zdoła naprawić, skończy się przekładaniem dysku i reinstalacją systemu.

Pojawia się kolejny problem – skoro / jest w trybie read only, to nie można utworzyć katalogu, by podmontować gdzieś zdrowy filesystem. I to jest ten moment, który mnie na chwilę zawiesił. Rozwiązanie okazało się trywialne – / może być w read only, ale /dev/shm to nie dotyczy. Szybkie mkdir /dev/shm/backup, zamontowanie zdrowej partycji w tym miejscu i już można na spokojnie skopiować wybrane dane.

Kilka minut później uruchomiłem fsck.reiserfs z opcją przebudowania drzewa. Tym razem dał radę. Ale poważnie myślę nad zrobieniem dodatkowej partycji ratunkowej o rozmiarze 1GB, z minimalnym systemem (znaczy łączność, narzędzia do naprawy filesystemów, ddrescue itp.).

CC czyli czarny czwartek.

Dzień, w którym wstajesz sobie spokojnie rano, zaparzasz kawkę i siadasz do kompa podziwiając piękne słoneczko nie musi wcale być taki fajny. Rzut oka na telefon, a tam jakieś nieodebrane. O siódmej rano. Z dyżurnego telefonu adminów! W liczbie 7!!!

No dobrze. Oddzwońmy. Okazuje się, że wywaliło serwer, na którym są wirtualki. Bywa. W zasadzie – kiedyś musiało się wydarzyć. Praktycznie wszystko jest dublowane, więc tak naprawdę nie działają tylko 2 usługi – jedna niekrytyczna a nawet nieistotna i jedna wewnętrzna (i nie do końca w naszej gestii).

A potem okazuje się, że to dzień, w którym to, co miało ratować – niszczy, B udaje, że nie stało się nic, są tacy, którym jest lepiej i tacy, którym jest gorzej, A załatwia niemożliwe (i w dobrej cenie!), zakupy można zrobić szybko w miejscach mało oczywistych, wydzielone dla poszczególnych usług klasy adresowe, które można wyroutować szybko gdzie indziej to Dobra Rzecz i wcale nie chodzi o jedną maszynę.

Na koniec dnia okazuje się, że to wszystko jednak potrwa, bo RAID to nie cudowne rozwiązanie wszystkich problemów z dyskami i czasem więcej z nim problemów, niż można by przypuszczać, a wszystko przedłuża się na piątek.

Myśl dnia: nic tak nie przygotowuje do usuwania awarii jak usuwanie awarii.

Odczyt S.M.A.R.T. via USB w Debian Lenny.

Dyski potrafią się sypnąć – pewnie każdemu zdarzyło się odzyskiwać dane z dysku, który „umarł”. Dyski mechaniczne posiadają jednak bardzo przyjemną cechę, która może zapobiec utracie danych, czyli tytułowy S.M.A.R.T.. Tylko, że… nie działa w przypadku dysków podłączonych po USB. Przynajmniej w Debianie Lenny. Przynajmniej domyślnie.

Wikipedii przepisywać nie ma sensu, więc krótko: pod każdym systemem dostępny jest pakiet narzędzi smartmontools. Do niedawna pakiet obsługiwał dyski IDE, SCSI oraz SATA. Natomiast bezradny był w przypadku dysków podłączanych przez USB (przynajmniej pod Linuksem), co znacznie ograniczało jego skuteczność.

Byłem przekonany, że to kwestia protokołu, ale przy okazji rozmowy okazało się, że da się, co więcej, niektórze narzędzia pod Windows umieją to zrobić. Linux jak zwykle w tyle? Okazuje się, że niekoniecznie. Co prawda wersja z Debiana Lenny nie potrafi odczytać stanu dysku podłączonego po USB, ale wersja z testinga – jak najbardziej.

Pakiet jest dostępny w backportach, a dla tych, którzy wolą zrobić sami informacja – samodzielnie backportuje się trywialnie. Wystarczy dodać do /etc/apt/sources.list repozytoria ze źródłami dla testing, pobrać źródła smartmontools oraz libcap-ng w wersji dla testing (wajig source smartmontools; wajig source libcap-ng), przebudować na Lennym (dpkg-buildpackage) najpierw libcap-ng, zainstalować otrzymane libcap-ng0_0.6.2-4_i386.deb oraz libcap-ng-dev_0.6.2-4_i386.deb, następnie zbudować smartmontools. Tak naprawdę do działania potrzebne są tylko libcap-ng0_0.6.2-4_i386.deb oraz smartmontools_5.39.1+svn3060-1_i386.deb). I to wszystko. Od tej pory działa smartctl -A /dev/sda, gdzie sda to dysk w kieszeni USB.

Przydatna sprawa, zwłaszcza, że w nowym routerku dysk w kieszeni jest dość krytyczny – wszak wszystkie katalogi, które muszą być dostępne do zapisu są właśnie na nim…

PS. Podziękowania dla peceta za informację o tej zmianie w smartmontools.