bezpieczeństwo
32
styczeń 2005
Odzyskiwanie danych
– sposoby i przegląd
narzędzi
Michał Niwicki
N
a pewno każdy z Was sta-
nął lub stanie przed proble-
mem odzyskania danych.
Zazwyczaj w momencie,
w którym uświadamiamy sobie, że stra-
ciliśmy istotne pliki, nie widzimy szansy
na ich odratowanie i nie podejmuje-
my żadnych działań. Spotykamy się
z dwiema sytuacjami. Pierwsza wiąże
się z fizycznym uszkodzeniem nośni-
ka danych (twardego dysku, dyskiet-
ki, płyty CD/DVD), co uniemożliwia
nam prawidłowe odczytanie zawarto-
ści całego pliku. Druga to taka, w której
umyślnie lub nieumyślnie skasowaliśmy
z dysku potrzebny nam plik i chcemy go
odzyskać. W obu przypadkach istnieją
sposoby i narzędzia pozwalające na cał-
kowite lub częściowe odzyskanie utra-
conych danych.
W niniejszym artykule dokonamy
przeglądu kilku popularnych aplika-
cji służących do odzyskiwania danych
– uszkodzonych bądź usuniętych
z naszego komputera.
Fizyczne uszkodzenie
nośnika
Zanim przejdziemy do omówienia spo-
sobu odzyskania utraconych danych
z uszkodzonego nośnika, wytłumaczy-
my najpierw, jak dochodzi do uszkodze-
nia nośnika i jaki ma to wpływ znajdu-
jące się na nim dane.
Tradycyjnie, wszystkie magnetycz-
ne nośniki danych – dyskietki, twarde
dyski, taśmy – mogą ulec częściowe-
mu rozmagnesowaniu na skutek kon-
taktu z różnymi urządzeniami wytwa-
rzającymi duże pole elektromagnetycz-
ne (magnesy, bramki kontrolne na lot-
nisku, telefony komórkowe). W przy-
padku płyt CD/DVD najczęściej spo-
tykamy się z fizycznym uszkodzeniem
jednej z optycznych warstw na skutek
zarysowania.
W obu sytuacjach, gdy dochodzi do
utraty części (kilku lub kilkudziesię-
ciu bajtów) pliku lub systemu plików,
system komunikuje nam, że odczyt
z urządzenia jest niemożliwy i zaprze-
staje dalszych prób dostępu do danych.
Spróbujmy zilustrować przykładem
zaistniały problem. Posiadamy płytę,
na której znajduje się dwugodzinny film
w pliku o łącznej objętości 690 mega-
bajtów. Na skutek fizycznego uszkodze-
nia (przypadkowe zarysowanie płyty)
nie jest możliwy odczyt kilku ostatnich
bajtów pliku, w efekcie czego program
odtwarzający przerywa działanie przed
najciekawszym fragmentem filmu.
Wiemy lub domyślamy się, że uszko-
dzeniu uległo jedynie kilka sekund cen-
nego nagrania, natomiast kilkanaście
pozostałych minut nadal znajduje się na
płycie. Stajemy przed problemem, jak
zmusić program do odtworzenia tego,
co znajduje się za uszkodzonym obsza-
rem. Innymi słowy, chcemy, aby pro-
gram nie przerywał działania w przypad-
ku, w którym nie może odczytać zapisa-
nych danych.
DD_rescue
Gdy próba przekopiowania uszkodzone-
go pliku standardową metodą nie skutku-
je (tak dzieje się, gdy używamy standar-
dowej komendy
cp
), z pomocą przycho-
dzi nam program DD_rescue.
Jego zasada działania jest prosta
– próbuje odzyskać uszkodzone bajty
pliku, a w przypadku, gdy nie może ich
odczytać, nie przerywa swego działania,
nie ucina uszkodzonego pliku i kontynu-
uje proces kopiowania.
Na płycie CD/DVD
Na płycie CD/DVD znajduje się
oprogramowanie omawiane
w artykule.
33
bezpieczeństwo
narzędzia data recovery
www.lpmagazine.org
W efekcie otrzymujemy lekko uszko-
dzony, ale już możliwy do odczytania
plik, który nie różni się rozmiarem od
oryginału, ale zawiera błędy w miejscu,
w którym doszło do uszkodzenia nośni-
ka, z którego kopiowaliśmy.
Praca z dd_rescue
Kopiowanie za pomocą dd_rescue jest
proste. Wywołanie programu przybiera
postać:
dd_rescue [opcje] <plik_źró-
dłowy> <plik_docelowy>.
Jeśli w wyniku działania komen-
dy
dd_rescue plik_a plik_b
program
skopiuje pliki bez napotkania na błędy,
powinien wyświetlić się komunikat
podobny do poniższego:
dd_rescue: (info): plik_a (0.8k): EOF
Summary for plik_a -> plik_b:
dd_rescue: (info): ipos: 0.8k,
S
opos: 0.8k, xferd: 0.8k
errs:0, errxfer: 0.0k, succxfer: 0.8k
+curr.rate: 15kB/s, avg.rate: 15kB/s,
S
avg.load: 0.0%
Jeśli podczas procesu kopiowania przytra-
fią się błędy odczytu, pojawi się dodatko-
wa informacja dotycząca ilości uszkodzo-
nych bajtów i miejsca ich występowania.
Dodatkowe przydatne opcje progra-
mu to kopiowanie piku od określonej
pozycji (w bajtach), kopiowanie zbioru
danych od końca do początku, wyświe-
tlanie pełnej informacji o procesie
odczytywania i zapisywania przetwa-
rzanych danych oraz określenie górnej
granicy ilości błędów, po osiągnięciu
której praca programu jest przerywana.
Pewnym ułatwieniem w korzystaniu
z programu DD_rescue jest skrypt napi-
sany z BASH-u – DD_rhelp. Jego działa-
nie opiera się na programie DD_rescue,
ale od użytkownika nie jest wymaga-
ne podawanie żadnych dodatkowych
opcji – wystarczy, że w linii poleceń
wpiszemy:
dd_rhelp <plik_źródłowy>
<plik_docelowy>
, a skrypt domyślnie
odzyska (jeśli tylko mu się uda) wszel-
kie utracone dane.
Skasowane pliki – jak
sobie z nimi radzić
Zdarza się, że na skutek pomyłki lub
celowego działania osób trzecich w
wyniku operacji kasowania (plików lub
partycji) straciliśmy część lub wszystkie
nasze dane. Mogłoby się wydawać, że
wszystko stracone, ale i na takie przy-
padki jest rada. W najlepszym razie
może okazać się, że dane są w 100%
odzyskiwalne, ale najczęściej spotkamy
się z sytuacją, w której odzyskamy jedy-
nie mniejszy lub większy procent ska-
sowanych zbiorów. Paradoksalnie, to co
wygląda bardzo groźnie, może okazać
się łatwe w naprawie. Najczęstszym
omawianym wyżej przypadkiem jest
zamazanie tablicy partycji dysku twar-
dego (tracimy wszystko) lub skasowa-
nie pliku/plików komendą rm
.
Narzę-
dzia, jakich można użyć w obu przy-
padkach, przedstawię poniżej.
Namierzanie partycji programem
Gpart
Jeśli z pewnych powodów zamazaliśmy
tablicę partycji dysku twardego (dzieje
się tak przykładowo podczas nieuważ-
nego dzielenia dysku na partycje), mimo
że dysk wygląda tak, jakby nic na nim się
nie znajdowało, nasze dane wciąż na nim
są. Proces przywracania struktury dysku
do pierwotnej postaci wymaga od użyt-
kownika wiedzy na temat tego, jakiej
wielkości i jakiego typu partycje znajdo-
wały się na nim przed zamazaniem tabli-
cy partycji. Problem w tym, że takimi
informacjami większość użytkowników
nie dysponuje. Tu z pomocą przycho-
dzi Gpart – narzędzie, którego działanie
wydaje się być proste: program analizu-
je dane zapisane na dysku (jeszcze nie
skasowane) i na ich podstawie próbuje
odbudować tablicę partycji dysku.
Praca z narzędziem Gpart
Ponieważ po skasowaniu partycji nie
mamy dostępu do żadnych danych, które
się na dysku znajdują, nie możemy rów-
nież uruchomić Gparta. W takiej sytu-
acji powinniśmy skorzystać z ratunko-
wej dystrybucji Linuksa – RIP. Po wło-
żeniu do napędu CD/DVD bootowalnej
płyty i ponownym uruchomieniu kom-
putera, naszym oczom ukaże się ascetycz-
nie wyglądające okno terminala. Po zalo-
gowaniu się na konto administratora sys-
temu (root) mamy do dyspozycji kilkadzie-
siąt programów służących do odzyskiwa-
R
E
K
L
A
M
A
Wybrane parametry
DD_rescue:
•
-w
– przerywa kopiowanie jeśli
napotka na błędy
•
-r
– kopiowanie wsteczne
(od końca pliku do początku)
•
-v
– wyświetla pełną informację
o procesie kopiowania
•
-q
– nie wyświetla żadnych
komunikatów
•
-e x
– przerywa działanie po
osiągnięciu x błędów
•
-s s
– rozpoczyna kopiowanie pliku
od s bajta
•
-m m
– kopiuje jedynie m bajtów
•
-d
– wykorzystuje bezpośredni
dostęp do urządzenia blokowego
(z pominięciem pamięci cache)
34
bezpieczeństwo
styczeń 2005
nia i ratowania różnych systemów opera-
cyjnych. Nas interesuje Gpart.
Wydajemy polecenie
gpart [opcje]
urządzenie
i czekamy na to, aż program
przeanalizuje nasz nośnik danych pod
względem struktury zapisanych na nim
danych. Przykładowo:
# gpart /dev/hda
spowoduje, że narzędzie będzie analizo-
wało dysk /dev/hda.
Po pewnym czasie (może trwać to
nawet kilkanaście minut – w zależności
od tego jakiej wielkości posiadamy dysk)
naszym oczom powinna ukazać się infor-
macja podobna do tej z Listingu 1.
Wynika z niej, że pierwsza party-
cja jest typu ext2 i ma rozmiary 101 MB,
podczas gdy druga partycja jest najpraw-
dopodobniej partycją wymiany (swap) o
rozmiarach sięgających ponad 1 GB.
Jeśli przedstawione informacje uwa-
żamy za prawdziwe, możemy zapisać
na dysku nową tablicę partycji wydając
polecenie:
# gpart -W /dev/hda /dev/hda
Parametr /dev/hda podajemy dwa razy,
gdyż pierwszy mówi nam, jaka jest struk-
tura badanego dysku, a drugi zapisuje na
wskazanym dysku tablicę partycji.
Po ponownym uruchomieniu kompu-
tera możemy od nowa cieszyć się zawar-
tością naszego dysku.
Więcej o Gpart
Jak zobaczyliśmy, w niektórych sytu-
acjach potrafi naprawić strukturę dysku,
na którym po zamazaniu tablicy party-
cji utworzono nowe partycje (jeszcze nie-
formatowane). Dzieje się tak dlatego, że
narzędzie to nie próbuje odzyskać zamaza-
nej tablicy partycji, lecz na podstawie roz-
kładu danych na dysku (analizuje sektor
po sektorze) stara się stworzyć tablicę par-
tycji na nowo. W efekcie, wydawać by się
mogło, tragiczna w skutkach próba zmiany
typu partycji z ext3 na swap zostanie pra-
widłowo zdiagnozowana przez Gparta
i naprawiona.
Mimo swojej niepozorności, Gpart
jest potężnym narzędziem, które potra-
fi o wiele więcej niż opisaliśmy powy-
żej. Obsługuje większość znanych typów
partycji – począwszy od ext2, ext3, xfs,
fat, poprzez stosowane w systemie Win-
dows ntfs i vfat, a skończywszy na party-
cjach LVM czy hpfs.
Gpart jest wyposażony również
w szereg dodatkowych użytecznych
opcji, służących przykładowo do spo-
rządzania kopii zapasowych sektora roz-
ruchowego, a także do odzyskiwania
danych z formatowanych partycji (tylko
w niektórych okolicznościach)
Praca z programem unrm
Radziliśmy, jak uporać sobie z uszko-
dzonymi fizycznie nośnikami danych,
z zamazanymi systemami plików, a teraz
przyszła kolej na odzyskiwanie skasowa-
nych plików.
Pomocną aplikacją w takich sytu-
acjach jest unrm, przypominający nieco
swoim działaniem program undelete, pra-
cujący w systemie DOS.
Jest to skrypt powłoki BASH, który na
podstawie analizy i-węzłów potrafi przy-
wrócić skasowane pliki.
Jego działanie jest proste – wystarczy
w wierszu poleceń wpisać z uprawnienia-
mi administratora systemu komendę
unrm
/dev/hda
, aby na ekranie pojawiła się lista
plików możliwych do odzyskania.
Aplikacją posiada wiele dodatkowych
parametrów ułatwiających wyszukiwanie
utraconych zbiorów. Możliwe jest odzy-
skiwanie danych należących do jakiegoś
użytkownika (opcja -u), a także plików
zawierających określony tekst (opcja -s).
Podstawowym problemem, który
pojawia się w przypadku skuteczne-
go odzyskania pliku, jest jego zapis.
Program unrm nie przywraca plików
w miejsce, z którego zostały usunięte
(nie mylmy go zatem z katalogiem Śmiet-
nik w niektórych popularnych menedże-
rach okien), lecz tworzy plik o nazwie
unrm.recovered/unrm.inode#
, w którym
przy odrobinie szczęścia znajdziemy
nasze skasowane dane.
Profilaktyka
Większości problemów opisanych w arty-
kule można uniknąć. Dobrym nawy-
kiem jest sporządzenie kopii zapasowej
MBR (512 bajtów – mieści się na każdej
dyskietce). Wystarczy w linii poleceń
z uprawnieniami administratora systemu
wydać komendę:
# dd if=/dev/hda of=mbr bs=512 count=1
W efekcie otrzymamy plik o nazwie mbr
zawierający kopię naszego sektora rozru-
chowego.
Powinniśmy także przyzwyczaić się
do systematycznego okresowego sporzą-
dzania kopii zapasowej najważniejszych
plików systemowych (
tar -cjvf archi-
wum.tar.bz2 /etc
) i katalogu użytkowni-
ków systemu (
tar -cjvf archiwum.tar.bz2
/home
).
Wskazane jest również używanie sys-
temu plików z księgowaniem (zastąpmy
tradycyjny ext2 nowocześniejszym roz-
wiązaniem – ext3), aby w przypadku
nagłego spadku napięcia nie trzeba było
odzyskiwać bajta po bajcie.
Podsumowanie
Utrata danych jest sytuacją, która może
przytrafić się każdemu. Istnieje szereg
narzędzi, za pomocą których możliwe
jest odzyskanie skasowanych zbiorów.
Należy również pamiętać, że i te narzę-
dzia mogą zawieść i wtedy niezbędna
stanie się kosztowna wizyta w specjali-
stycznym laboratorium.
Najlepszym rozwiązaniem wydaje się
zachowanie szczególnej ostrożności pod-
czas kasowania plików i pracami związa-
nymi ze zmianami w tablicy partycji.
W Internecie:
● Strona domowa DD_rescue:
http://freshmeat.net/projects/
dd_rescue/
● Strona projektu programu Gpart:
http://www.stud.uni-hannover.de/
user/76201/gpart/
Listing 1:
Wynik działania
programu Gpart:
Primary partition(1)
type: 131(0x83)(Linux ext2 filesystem)
size: 101mb
#s(208776) s(63-208838)
chs: (0/1/1)-(207/2/57)d (0/1/1)-(207/2/57)r
Primary partition(2)
type: 130(0x82)(Linux swap or Solaris/x86)
size: 1019mb
#s(2088448) s(208845-2297292)
chs: (207/3/1)-(1023/15/63)d (207/3/1)-(2279/0/61)r