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.

  • krzys

    Przedstawione techniki odzyskiwania danych słabo działają na Ext3. Ext3 jest na tyle specyficzny, że ciężko odzyskać skasowane dane metodami domowymi.

  • Niestety… ale nie pamiętam kiedy bym stracił dane z EXT3 ;-)

  • CamelCase

    Bardzo ciekawe, ale Midnight Commander w menu Polecenia (Command) nie ma opcji 'Odtwórz plik' (undelete file) !?

    Jak to możliwe ? Ja jej w każdym razie nie widzę.

    Czyżbym źle patrzył ?

  • Pewnie źle patrzysz. Na szybko podaję zrzut ekranu dołączony również do artykułu.

    <center><img src="http://thecamels.org/wp-content/uploads/mc-undelete-300×225.png&quot; alt="Midnight Commander" title="Midnight Commander" width="300" height="225" class="alignnone size-medium wp-image-2781" /></center>

  • fajnie by bylo jakbyscie zrobili jakis cykl dla mniej zaawansowanych uzytkownikow – ja na przyklad jak widze ze cos sie pokaszanilo przy starcie to robie sie zielony i zaczynam klepac zdrowaski – a to moj prywatny komp :P

    rosetta.null-zero.com

    • LL

      Przyłączam się i proszę o aktualizację art.

  • Pingback: ratunku ! | hilpers()

  • ups5

    TestDysk daje radę z ext3, parokrotnie odzyskiwałem dane z tego systemu plików (i innych też). Daje radę nawet ext4 mimo tego, że nie jest wymieniony w specyfikacji.

  • Pingback: Jak odzyskać plik logu? | thecamels.org()

  • bono

    hej mam ubuntu11.10 i nie ma w tym programie TestDisk opcji zainstaluj! tar.bz2 – takie mam rozszerzenie, po rozpakowaniu mam 17 plików i 2 foldery ico oraz l co dalej?

    chcę odzyskac dane z drugiego dysku na którym byl windows i gdzie wcielo mi 2 partycje systemową i drugą 80GB

  • energizer

    @bono Troche nie bardzo wiem o co Ci chodzi, ale pewnie pobrałeś TestDisk ze strony testowej? To pewnie kod źródłowy. Lepiej zostaw to i zainstaluj TestDisk korzystając z Centrum Oprogramowania Ubuntu – program powinien być w repozytoriach.

  • bono

    witam miałem opis ze jest to wersja graficzna a okazała się textowa uruchamiana w terminalu. Uruchomiłem, niestety po użyciu wcięło mi wszystkie partycje! na szczęście te dwie co mi się ostały po awarii skopiowałem! testdisk znajdował potem te 2 partycje które sam usunął ale nie potrafił ich odzyskać. Dałem sobie spokój z linuxem posdawiłem windows mx8.1 zainstalowałem program recuva i odzyskał mi 230GB danych! Niestety bez katalogów, a chodziło mi o 80GB muzyki. Tak że linuxa ocenia na plus z powodu, że jeszcze nigdy mi na nim nic nie wcięło, ale odzysk danych w ubuntu to dupa, chyba że ja jestem dupa – linuxowa!

  • energizer

    No cóż, może nie wszystkie narzędzia pod linuksem są "user-friendly" ;)

  • Pingback: Trinity Rescute Kit – odzyskiwanie danych z systemów Windows i Linux | OSWorld.pl()