Krótki, ale mam nadzieję, że przydatny artykuł, który pomoże odzyskać stracone dane z dysków, uszkodzone tablice partycji i inne problemy. Do ratowania plików będziemy używać prostych, ale potężnych programów, które powinny być dostępne we każdej dystrybucji Linuksa. Poznamy również takie aplikacje jak TestDisk & PhotoRec, które również pomagają w odzyskiwaniu danych.

Troszkę teorii o systemie plików w Linuksie.

Najczęściej spotykanym systemem plików w systemach Linux jest system plików z serii ext (ext2 lub ext3). System plików ext2 jest tak skonstruowany, że po uszkodzeniu systemu plików np. po załamaniu się systemu, automatycznie przy starcie systemu uruchamiany jest program e2fsck, który dokonuje naprawiania szkód a uszkodzone lub odzyskane pliki zapisuje w katalogu lost+found.

Wszystkie pliki i katalogi zapisywane są na dysku jako i-węzeł (i-node), każdy odpowiada jednemu plikowi lub katalogowi. I-węzeł jest elementem struktury systemu plików ext2 i UFS. I-węzły są strukturami opisującymi pliki w systemie – wpis katalogowy danego pliku zawiera tylko jego nazwę i właśnie numer i-węzła tego pliku. I-węzeł ma zawsze tą samą długość wynoszącą 128 bajtów. Aby zobaczyć dane na temat konkretnego pliku należy wydać polecenie:

stat nazwa_pliku

Powinniśmy zobaczyć mniej więcej taki oto efekt:

[root@marta paszczak000]# stat notes
  File: `notes'
  Size: 1775            Blocks: 8          IO Block: 4096   zwykły plik
Device: 346h/838d       Inode: 81648       Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  500/paszczak000)   Gid: (  500/ UNKNOWN)
Access: 2005-12-21 19:52:44.000000000 +0100
Modify: 2005-12-10 13:58:49.000000000 +0100
Change: 2005-12-10 13:58:49.000000000 +0100

Po wydaniu tego polecenia możemy zobaczyć nazwę pliku, rozmiar, i-węzeł (i-node), prawa dostępu, właściciela, oraz ostatnią datę i godzinę dostępu oraz modyfikacji pliku.

Proces kasowania plików w systemie polega na usunięciu zależności łączącej i-node z nazwą i określonym miejscem w strukturze katalogów. Plik nie zostaje fizycznie skasowany, dzięki czemu możliwe jest jego odzyskanie. Tak naprawdę pliki zostają usunięte a raczej nadpisane przy zapisie nowego pliku na jego miejsce.

Skasowało się! Co robić?

Przede wszystkim nie panikuj. Panika i emocje mogą popsuć więcej niż pomóc. Zostawmy instynkt w spokoju i nie bawmy łażeniu po dysku czy ściąganiu jakiegoś oprogramowania. Jeżeli awarii uległa znaczna część plików zalecam natychmiastowe odcięcie zasilania od komputera lub odmontowanie partycji. Nie zamykamy systemu w konwencjonalny sposób ponieważ możemy nadpisać w ten sposób stracone pliki. Wtedy nie będzie je tak łatwo odzyskać. Jeżeli skusimy się na wyłączenie komputera to dobrze by było mieć pod ręką jakąś wersję systemu Linux w formie LiveCD. Z niej uruchomimy komputer i przeprowadzimy odzyskiwanie plików. Jeżeli nie chcemy robić gwałtownego pozbawienia zasilania komputera to odmontujmy partycję, z której został skasowany plik. Najprościej odmontowywujemy partycję jako użytkownik root poleceniem: (zakładam, że pliki skasowałeś z partycji /usr)

[root@marta paszczak000]# umount /usr

W przypadku, gdy chcesz mieć nadal możliwość odczytu z tej partycji należy wydać polecenie:

[root@marta paszczak000]# mount -o ro,remount /usr

Zamontujesz w ten sposób partycję w trybie tylko do odczytu. Jeżeli chcesz odmontować partycję główną / to musisz wydać polecenie, aby mount nie próbował nic zapisywać do /etc/mtab

[root@marta paszczak000]# mount -n -o ro,remount /

Czasem się tak zdarza, że przy próbie odmontowania partycji dostajemy komunikat Resource busy. Dzieje się tak dlatego, że jakiś proces korzysta z danej partycji. Za pomocą polecenia:

[root@marta paszczak000]# fuser -v -m /home

zobaczymy jakie procesy korzystają aktualnie z /home. Jeżeli uznasz, że te procesy są zbędne to wydaj polecenie:

[root@marta paszczak000]# fuser -k -v -m /home

by wysłać do procesów sygnał SIGKILL aby w zabić ich działanie lub

[root@marta paszczak000]# fuser -k -TERM -v -m /home

by wysłać do procesów sygnał SIGTERM co spowoduje to normalne zakonczenie pracy procesów.

Zaczynamy ratować nasze dane

Jeżeli mamy odmontowaną już partycję, z której skasowaliśmy lub straciliśmy dane mamy do wyboru kilka metod odzyskiwania plików. Najprostszą metodą jest użycie programu R-Linux
Niestety do skorzystania z niego jest potrzebny nam system z serii Windows (Windows 9x/ME/NT4.0/2000/XP/2003). Program jest prosty w użyciu, zajmuje mało miejsca i bardzo dobrze odzyskuje dane. Musimy mieć inną partycję, na której będziemy zapisywać odzyskane pliki.

Kolejną prostą metodą odzyskiwania danych jest skorzystanie z dobrze każdemu znanego programu Midnight Commander. Uruchamiamy program, wciskamy [F9] by dostać się do menu. Następnie przechodzimy do menu Polecenia (Command) a potem na Odtwórz pliki (tylko ext2fs) (Undelete file (ext2fs only)).

Midnight Commander
Pojawi nam się okienko z wyborem partycji. Wpisujemy np hdb6. Podajemy samą nazwę partycji a nie jej ścieżkę. Czekamy aż program skończy ładowanie informacji o skasowanych plikach po czym w normalny sposób kopiujemy pliki w inne bezpieczne miejsce. Jeżeli nazwa pliku jest niepoprawna to zawsze możemy ją zmienić. Niestety czasami Midnight Commander nie potrafi utworzyć listy straconych plików, więc musimy posłużyć się bardziej wyszukanymi metodami.

Możemy spróbować wydać polecenie:

[root@marta paszczak000]# undelete -d /dev/hdb6

Jeżeli partycja jest odmontowana to powinny nam się zacząć pokazywać węzły i pliki jakie można odzyskać. Jeżeli nie to musimy skorzystać z innej metody.

Na początku musimy zrobić wykaz plików jakie zostały skasowane. Posłuży nam do tego polecenie:

[root@marta paszczak000]# echo lsdel | /sbin/debugfs /dev/hda5 > skasowane

Jeżeli nie znamy lokalizacji naszej partycji możemy spojrzeć zawsze do /etc/fstab. Czekamy aż system przeszuka skasowane pliki a wynik zapisze do pliku skasowane. Podglądamy plik poleceniem:

[root@marta paszczak000]# less skasowane

Zobaczymy wiele cyferek i literek. Pierwsze cyferki oznaczają inode (i-węzeł) usuniętego pliku i są bardzo dla nas ważne. Następna kolumna to UID użytkownika, potem są prawa dostępu do pliku, wielkość pliku, ilość zajmowanych bloków, a na samym końcu mamy datę skasowania pliku. Czasami data przydaje się, jeżeli pamiętamy kiedy coś skasowaliśmy. Na podstawie tych danych postarajmy się odszukać interesujący nas plik po czym uruchommy program debugfs. Następnie znając inode skasowanego pliku wpisujemy:

[root@marta paszczak000]# dump <numer_inde> /home/odzyskany_plik

i możemy się cieszyć odzyskanym plikiem. Jeśli powyższe metody nadal zawodzą można spróbować skorzystać z aplikacji Recover. Program został napisany w wersji konsolowej oraz graficznej. Aplikacja automatyzuje wiele różnych procesów, które pomagają w odzyskiwaniu plików.

TestDisk & PhotoRec

TestDisk jest bardzo dobrym, całkowicie darmowym programem przeznaczonym do odzyskiwania danych na dyskach twardych. Głównym zadaniem aplikacji jest poszukiwanie zagonionych partycji. Aplikacja działa pod systemami DOS, Windows 9x, NT, 2000, XP, 2003, Linux, FreeBSD, NetBSD, OpenBSD, SunOS i Mac OS. Aplikacja potrafi odszukać zaginione partycje na następujących systemach plików:

  • BeFS ( BeOS )
  • BSD disklabel ( FreeBSD/OpenBSD/NetBSD )
  • CramFS, Compressed File System
  • DOS/Windows FAT12, FAT16 and FAT32
  • HFS, HFS+ and HFSX, Hierarchical File System
  • JFS, IBM’s Journaled File System
  • Linux Ext2 and Ext3
  • Linux LUKS encrypted partition
  • Linux Raid md 0.9/1.0/1.1/1.2
    • RAID 1: mirroring
    • RAID 4: striped array with parity device
    • RAID 5: striped array with distributed parity information
    • RAID 6: striped array with distributed dual redundancy information
  • Linux Swap (versions 1 and 2)
  • LVM and LVM2, Linux Logical Volume Manager
  • Mac partition map
  • Novell Storage Services NSS
  • NTFS ( Windows NT/2K/XP/2003/Vista )
  • ReiserFS 3.5, 3.6 and 4
  • Sun Solaris i386 disklabel
  • Unix File System UFS and UFS2 (Sun/BSD/…)
  • XFS, SGI’s Journaled File System

Do programu dołączone jest dodatkowe narzędzie PhotoRec, służące do odzyskiwania plików. Aplikacja potrafi odzyskać różnego rodzaju pliki z systemów plików takich jak FAT, EXT2, EXT3 czy NTFS.