Wstęp

Witam wszystkich bardzo serdecznie.

Poniższe HowTo postanowiłem napisać ponieważ sam doświadczyłem co to znaczy stracić dane. Wszystko rozbijało się o to, że dane były zapisane na partycji ReiserFS. A jak wiadomo dla systemu plików ReiserFS nie istnieje narzędzie typu undelete. Spędziłem sporo czasu na poszukiwaniu rozwiązania, kilka dni googlowania i nie tylko. Już zaczynałem tracić nadzieję, ale... udało się. Wielkie dzięki należą się autorowi oryginalnego HowTo [1] – Marty'iemu. Autorem przedstawionych metod odzyskiwania danych jest Marty. „Część opisową” spłodziłem sam ;)

ReiserFS a odzyskiwanie danych

Dopóki utrata danych miała miejsce na partycjach FAT czy NTFS w przypadku systemów z rodziny MS Windows sprawa była prosta. Wystarczyło odpalić Program UNDELETE dla partycji FAT (standardowo zawarty w systemie) lub Easy Reocvery Proffesional firmy Ontract dla parycji NTFS. Dla osób pracujących na systemach z rodziny Unix problem jest średnio rozwiązywalny. Dopóki używamy systemu plików Ext2 problem można rozwiązać przy pomocy pakietu e2fsprogs. Ale co gdy utrata danych nastąpiła na partycji Ext3 lub ReiserFS? Dla Ext3 wystarczy zamontować partycję jako Ext2 i użyć e2fsprogs.

Z ReiserFS sprawa się komplikuje. Autor system plików brak odpowiedniego narzędzia do odzyskiwania danych tłumaczy wbudowanym kronikowaniem, które nie pozwala na żadne zabawy typu „undelete” czy „recover”. Jednak wszystko da się obejść - no prawie wszystko.

Odzyskiwanie krok po kroku

Załóżmy, że utraciliśmy dane na partycji hda1. Jeżeli straciłeś(aś) dane na innej partycji to podmień ją w poleceniu dd Nie będziemy pracować na fizycznym dysku tylko na obrazie partycji. Dlaczego? Tak na wszelki wypadek żeby, w razie niepowodzenia, nie popsuć jeszcze bardziej. Do odzyskania danych będziesz potrzebował(a) pakietu „reserfsprogs”.

Najpierw połączymy się z serwerem i zrobimy kopię „padniętej” partycji.

ssh ADRES_SERWERA  dd if=/dev/hda1 econv=noerror > partycja.img

Jeżeli nie użyjemy opcji econ=noerror dd zatrzyma się po napotkaniu pierwszego błędu. Jeżeli chcesz odzyskać dane na lokalnym dysku twardym wystarczy w konsoli wydać polecenie

dd if=/dev/hda1 econv=noerror > partycja.img

Teraz, gdy mamy już obraz uszkodzonej partycji możemy przystąpić do procesu właściwego odzyskiwania danych. Do obrazu trzeba się jakoś dobrać. Do tego celu wykorzystamy urządzenie /dev/loop0.

losetup /dev/loop0 hda1.img

Ok, pora odpalić reiserfsprogs i sprawdzić co się da odratować. Najpierw odbudujemy super-block. Nawet jeżeli nie został uszkodzony nie zaszkodzi nam to a może się przydać.

reiserfsck --rebuild-sb /dev/loop0 

Teraz popatrzymy co jesteśmy w stanie odzyskać. W tym celu należy przebudować drzewo katalogów.

reiserfsck --rebuild-tree -S /dev/loop0

Na koniec sprawdzimy czy wszystkie dotychczasowe operacje przebiegły prawidłowo.

reiserfsck --check /dev/loop0

Ostatni krok to zamontowanie urządzenia i modlitwa o to żeby dane były tam gdzie powinny być ;)

mount /dev/loop0 /mnt

Teraz zaglądamy do /mnt/lost+found. Znajdziemy tam wszystko to co dało się odzyskać. Niestety nie jest to struktura katalogów taka jak na oryginalnej partycji, ale nie można mieć wszystkiego. Teraz pozostaje przeszukać wszystkie katalogi i skopiować w bezpieczne miejsce najważniejsze dane.

Posłowie

Mam nadzieję, w przypadku utraty danych (czego nikomu nie życzę) to HowTo będzie pomocne.

Dziękuję azhagowi za pierwszą ocenę i poprawki.

Wszelkie błędy merytoryczne, gramatyczne i inne oraz uwagi proszę umieszczać w komentarzach lub zgłaszać je bezpośrednio do mnie:


Przypisy:

  1. http://martian.org/marty/2003/09/05/reiserfs-filesystem-recovery/