Odtwarzanie utraconych danych
Pomimo sprawnie działającego systemu czasem jednak zdarzają się problemy. Jednym z nich jest utrata danych na dysku. Doświadczenie wskazuje nawet, że tego rodzaju sytuacja zdarzy się na pewno, pytanie tylko kiedy. Brak danych archiwalnych nie jest jednak równoznaczny z koniecznością rezygnacji z tego co wypracowaliśmy. W większości przypadków dane da się odtworzyć.
UWAGA! Poniżej opisanych działań nie można stosować do partycji /. Jeżeli to ona poddawana jest odtwarzaniu należy to zrobić z „systemu zewnętrznego” np. uruchamiając komputer z systemem live cd.' Oznaczenie w liniach poleceń # oznacza, że dane polecenie wykonać należy jako root.
Spis treści |
Odmotowanie uszkodzonej/skasowanej partycji
Pierwszym krokiem jaki należy zrobić to ochłonąć i odetchnąć, co znacznie ułatwia rozpoczęcie akcji ratunkowej. Po tym można rozpocząć część właściwą. Odmontowanie uszkodzonej bądź skasowanej partycji zabezpieczy ją przed nadpisaniem danych.
W Yast2 => System => Partycjonowanie możemy uzyskać informację, którą partycję należy odmontować. Kiedy mamy już informację co należy zabezpieczyć wydajemy polecenie:
# umount /dev/hdb6
Gdzie oczywiście hdb6 zastępujemy oznaczeniem urządzenia, które nas interesuje.
Uzyskanie odpowiedzi „device is busy” oznacza, że jakiś proces korzysta z danej partycji i jej odmontowanie jest niemożliwe. Należy go więc wyłączyć, ale wcześniej namierzyć. Służy do tego polecenie:
# fuser -v -m /dev/hdb6
Po ich przejrzeniu mamy pewność co zakończymy poleceniem:
# fuser -k -v -m /dev/hdb6
Teraz wracamy do komendy umount, która już bez przeszkód zatrzyma nasze urządzenie.
Tworzenie obrazu odtwarzanej partycji
Kolejny krok to znalezienie miejsca, gdzie odzyskane dane zostaną zapisane. Należy pamiętać, że uzyskany obraz partycji jest wielkości nie mniejszej niż sama partycja więc odtworzenie 10G będzie wymagało sporo miejsca.
I rozpoczynamy właściwą część operacji. Służy do tego polecenie
# dd_rescue /dev/hdb6 /mnt/hdb1/hdb6_rescue.iso
skrypt dd_rescue pozwala na odczytywanie zawartości dysku pomimo uszkodzeń. Jeżeli się pojawią, to proces jest kontynuowany dalej. /mnt/hdb1/hdb6_rescue.iso oznacza nazwę i miejsce gdzie pojawi się obraz odczytanej partycji.
Poniżej przedstawiony jest wynik tego polecenia:
=== launched via 'dd_rhelp' at 0k, 0 >>> ===
dd_rescue: (info): ipos: 35270640.0k, opos: 35270640.0k, xferd: 35270640.0k
errs: 0, errxfer: 0.0k, succxfer: 35270640.0k
+curr.rate: 23916kB/s, avg.rate: 23916kB/s, avg.load: 15.3%
dd_rescue: (info): /dev/hdb6 (35270644.5k): EOF
Summary for /dev/hdb6 -> /mnt/hdb1/hdb6_rescue.iso:
dd_rescue: (info): ipos: 35270644.5k, opos: 35270644.5k, xferd: 35270644.5k
errs: 0, errxfer: 0.0k, succxfer: 35270644.5k
+curr.rate: 1820kB/s, avg.rate: 23916kB/s, avg.load: 15.3%
Można więc wyczytać, że odzyskiwana partycja miała wielkość ok 35G i nie zgłoszono żadnych błędów. Dla takie wielkości partycji czas na jej odczytanie to około 20 min. Wynik ten zależy jednak od wydajności sprzętu i przede wszystkim od ilości uszkodzeń, których odczytywanie wydłuża czas oczekiwania. W przykładzie tym utrata nastąpiła tylko w wyniku skasowania danych więc odzyskiwanie było w miarę proste.
Można teraz w systemie zamontować powstały obraz:
# mount -o ro loop /mnt/hdb1/hdb6_rescue.iso /mnt/hda7
gdzie /mnt/hda7 to oczywiści miejsce zamontowania
Pomocne dodatki
- Sprawdzanie integralności danych
- sprawdzanie uszkodzeń fizycznych na dysku
badblocks -s /dev/hdb6
Odtwarzanie uszkodzonych cd
Powyższą procedurę i komendę można również wykorzystać do odzyskania danych na uszkodzonym nośniku cd. W wyniku porysowania powierzchni czasem zdarza się, że normalne korzystanie z płyty staje się niemożliwie. Dzięki dd_rescue można utworzyć obraz takiej płyty i ponownie nagrać go na nieuszkodzony nośnik. Co prawda miejsca uszkodzeń będą widoczne podczas oglądania np. filmów, ale czytnik nie będzie się już zacinał.