Jak odzyskać skasowane dane z partycji EXT3 / EXT4?
Jeśli masz "wyjątkowe szczęście" tak jak ja, to pewnie zdarzyło Ci się przez przypadek usunąć ważny katalog lub pliki, które znaczyły dla Ciebie wiele. Z taką przygodą spotkałem się całkiem niedawno, bo w ubiegły weekend. Najważniejsze to nie panikować i działać szybko, bowiem czas i zwłoka działa na naszą niekorzyść. Dane po usunięciu nie znikają od razu z dysku, tak naprawdę wciąż tam są. Jedyne co usunęliśmy, to wpisy tablicy alokacji plików, które informują system, gdzie konkretnie leży nasz plik - prościej mówiąc - zmazaliśmy mapę do miejsc, gdzie się one zaczynają.
Zanim zaczniesz
Przykazanie 1. Nie wykonuj niepotrzebnych operacji na dysku twardym. Nie przeglądaj stron internetowych oraz nie dokonuj żadnych kolejnych zmian w plikach. Im mniej kopiujesz, kasujesz czy przenosisz plików, tym masz większe szanse, że odzyskasz większą część utraconych danych.
Przykazanie 2. Jeśli masz taką możliwość, zrób kopię obrazu partycji lub dysku na inny nośnik.
Przykazanie 3. Najlepiej uruchom komputer za pomocą dystrybucji typu LiveCD (DVD lub USB) np.: Ubuntu
Przykazanie 0. Nie gwarantuję Ci, że się uda lub wyrządzisz większe szkody. Wszystko co tu przeczytasz, robisz wyłącznie na własną odpowiedzialność. Przeczytaj uważnie i myśl co robisz!
Jeśli wiesz jaki plik lub katalog skasowałeś - masz z górki
Na początek możesz spróbować programu extundelete, który pozwala na pierwsze rozeznanie się, jak poważne są szkody. W niektórych przypadkach - jeśli zadziałasz szybko - metoda może okazać się wystarczająca. Kiedy pobierzemy program, trzeba go skompilować - koniecznie zrób to na innym dysku lub partycji niż z tej, z której będziesz odzyskiwał dane. Wszystkie poniższe operacje wykonaj z konta administracyjnego: root.
Przypuśćmy, że katalog /tmp znajduje się na osobnym dysku lub partycji:
- cd /tmp/
- wget https://www.jarzebski.pl/files/rescue/extundelete-0.2.4.tar.bz2
- tar jxvf extundelete-0.2.4.tar.bz2
- cd cd extundelete-0.2.4
- ./configure
- make
Jeśli program się skompiluje poprawnie, prawie jesteś w domu. Następnie:
- cd src
Załóżmy, że:
- skasowałeś cały katalog z /storage/wazne/pliki/
- a punkt montowania /storage jest do partycji /dev/sdb1
Należy:
- odmontować dysk /dev/sdb1 poleceniem umont /dev/sdb1
Następnie:
- naszą szukaną ścieżką relatywną na dysku /dev/sdb1 będzie "wazne/pliki/" (bez punktu montowania storage == /dev/sdb1)
- ./extundelete --restore-directory wazne/pliki/ -o odzysk /dev/sdb1
Wynik:
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 14905 groups loaded.
Loading journal descriptors ... 11004 descriptors loaded.
Searching for recoverable inodes in directory wazne/pliki// ...
3 recoverable inodes found.
Looking through the directory structure for deleted files ...
1 recoverable inodes still lost.
W katalogu "odzysk" powinniśmy znaleźć pliki, które udało się odzyskać. Jeśli znamy konkretną ścieżkę do pliku, możemy skorzystać z parametru --restore-file:
- ./extundelete --restore-file wazne/pliki//tajnyprojekt.rar -o odzysk /dev/sdb1
Jeśli chcemy odzyskać wszystkie możliwe pliki, które zostały usunięte z całej partycji, możemy posłużyć się parametrem --restore-all:
- ./extundelete --restore-all -o odzysk /dev/sdb1
W przeciwnym wypadku ... masz pod górkę.
Jeśli nie znasz lokalizacji, albo powyższa metoda nie przyniosła zadowalających efektów, możesz spróbować jeszcze programu PhotoRec z pakietu TestDisk.
TestDisk to program w głównej mierze do odzyskiwania danych i naprawy sektorów na dysku twardym. Posiada jednak wspomniane narzędzie PhotoRec, które pozwoli nam odzyskać z dysku to, co tylko możliwe. Przeszkodą tego programu jest brak nazywania odzyskanych plików ich poprzednią nazwą, jednak stara się on nadawać im odpowiednie rozszerzenie rozpoznanych typów plików. takich jak: *.jpg, *.pdf, *.ods, *.doc, *.rar itp.
Narzędzie jest już skompilowane, dlatego musimy pobrać odpowiedni plik dla naszej architektury procesora. Wszystkie poniższe operacje wykonaj z konta administracyjnego: root.
Dla 32-bitowego Linuksa:
- cd /tmp/
- wget wget https://www.jarzebski.pl/files/rescue/testdisk-6.14.linux26.tar.bz2
- tar jxvf testdisk-6.14.linux26.tar.bz2
- cd testdisk-6.14
Dla 64-bitowego Linuksa:
- cd /tmp/
- wget wget https://www.jarzebski.pl/files/rescue/testdisk-6.14.linux26-x86_64.tar.bz2
- tar jxvf testdisk-6.14.linux26-x86_64.tar.bz2
- cd testdisk-6.14
Następnie uruchamiamy program:
- ./photorec_static
1. Wybieramy dysk z którego będziemy odzyskiwać dane
(przykładowo: /dev/sdb)
2. Wybieramy interesującą nas partycję lub cały dysk (No partition)
(przykładowo /dev/sdb5)
3. Określamy system plików na wybranej partycji
4. Określamy czy będziemy skanować cały dysk (Whole), czy tylko wolną przestrzeń (Free)
(przykładowo Free)
5. Określamy do jakiego katalogu będziemy zapisywać znalezione pliki
(przykładowo do katalogu photorec - wybieramy C)
6. Czekamy ...
Jak widzimy - cały czas mamy podgląd na to, jakie pliki zostały odnalezione. Należy jednak pamiętać, że nie wszystkie pliki rozpoznane są prawidłowo, a niektóre mogą być niekompletne. Odnalezione pliki zapisywane są do folderów o nazwie recup_dir.xxx.
Jeśli zależy nam na danych - nie pozostaje nam nic innego, jak szukać tych odpowiednich w gąszczu plików nazwanych np. tak: f2917072.png
Powodzenia!
Komentarze
Dobrze wiedzieć że istnieje coś takiego jak "extundelete". Do tej pory byłem przekonany że takie narzędzie nie istnieje dla ext > 2 z powodu czyszczenia i-węzłów kasowanych plików. A tu się okazuje że coś zostaje w dzienniku. Ciekawe tylko czy z "powodów bezpieczeństwa" i te dane będą czyszczone w jakiś nowszych wersjach jajek/systemów plików/dziennika i możliwość odkasowania znowu zniknie...
Niestety już mi się zdarzyło skasować dane przypadkowo z
/home/<u>/* :(
(za szybko użyłem skrótów klawiszowych)
Próbowałem testdiskiem, próbowałem na kilka innych sposobów. (między innymi Twoim sposobem)
Niestety pliki ZIP/RAR/7zip w większości odzyskało uszkodzone.
Odzyskiwanie dokumentów - tutaj było lepiej.
Zdjęcia - ładnie, ale kilka dni zajęło mi pogrupowanie tego jakoś sensownie.
Dużo rzeczy niestety przepadło (np. filmy/clipy). Jeżeli chodzi partycje z której wyparowało wszystko to zaraz po incydencie nie tykałem jej - zmieniłem na montowanie jako READ ONLY.
Problem w tym, że mało mi odszukało węzłów. :P
(system plików miałem EXT4)
Teraz wszystkie ważne foldery zabezpieczam poleceniem:
sudo chattr +i
// można też: sudo chattr +R +i wtedy zmiany dotyczyć będą również podkatalogów.
...czyni je to odporne na przypadkowe usuwanie. Ponadto jeżeli mamy w ten sposób zablokowany chociaż jeden katalog, a inne nie to zatrzyma się usuwanie z komunikatem "Pominąć go?" i nie utracimy innych niezabezpieczonych katalogów.
Przykład: zaznaczyłem wszystkie katalogi, a zablokowany był "jeden" - zatrzymało się zaraz przy próbie usunięcia wszystkiego:
Oryginalny obraz posiada rozmiar 696x433
(zrobiłem sobie skrypt SH, żeby nie wpisywać ręcznie polecenia, jeżeli zablokowany to odblokowuje, jeżeli odblokowany to przy kliknięciu blokuje)
Człowiek mądry po szkodzie niestety.</u>
Odzyskiwaniu z ext4 mogą też pomóc mało pofragmentowane pliki. Wiec co jakiś czas może być warto odpalić "e4defrag". To może być szczególnie przydatne na fs-ach aktualizowanych z ext3/2. Ekstent w ext4 może mieć nawet 128 MiB więc ciężko będzie uzyskać po takiej operacji piliki w wielu kawałkach. A jeżeli już uzyskamy to będą one duże i potencjalnie łatwiejsze do dopasowania.
Domker mógłbyś udostępnić skrypt? Metoda dość ciekawa, a polecenia chattr nie znałem wcześniej. Z góry dzięki :)
Ależ proszę :) :
Wersja dla KDE (wykorzystuje KDialog):
http://wklej.to/rczyA
Wersja dla GNOME (bardziej uboga, nie gwarantuje, że zadziała :P):
http://wklej.to/Qhstm
//można dodać "chattr" do pliku /etc/sudoers, ale nie polecam ^^, lepiej wklepać hasełko samemu
UPDATE:
W drugim skrypcie chattr -i i chattr +i powinno znajdować się w: " "
Używam KDE i Krusadera do operacji na plikach/katalogach. Ustawiłem Krusadera tak, że kasowane pliki / katalogi lecą do kosza. Jeżeli jestem na 100% pewny, że nie potrzebuję tego potem udzyskiwać to zamiast klawisza DEL muszę wybrać z PPM opcję USUŃ. I tyle :)
Niestety mój Midnight Commander nie ma takiej opcji :)
1. Lekkie utrudnienie przy kasowaniu to włączenie BEZPIECZNEGO USUWANIA w opcjach
2. Inna możliwość to skorzystanie z sugestii stąd (nie testowałem):
Bezpieczne usuwanie to w sumie tylko podmiana domyślnego Tak na Nie. Jest to jakaś forma, ale nie uchroniłaby mnie. Po celowym usunięciu, uświadomiłem sobie, że coś tam jeszcze głębiej było ważnego .
Drugiej opcji nie znałem (libtrash) - dzięki wielkie, koniecznie sprawdzę·
Czy ma ktoś pomysł jak zabezpieczyć partycję root (np. /dev/sda3) przed przypadkowym nadpisaniem? Często nagrywam obrazy img na karty SD poprzez dd/dcfldd, parę razy zdażyło mi się nadpisać dysk na którym znajduję się system obrazem przeznaczonym na SD:) Wiem, że karty SD mają inną grupę niż dysk systemowy ale często muszę pracować jako root i czasami się zdaża chwila nie uwagi. Więc pytanie jak zabezpieczyć roota przed rootem :) Ponieważ zawsze mam partycję /boot na początku dysku a nagrywane obrazy przeważnie nie przekraczają wielkości boot więc odzyskanie pozostałych partycji nie stanowi dla mnie problemu ale jestem ciekawy czy ktoś ma podobne doświadczenia i ewentualne rozwiązanie:)
Pozdrawiam
Jakbym czytał swoje przygody z dd :) Dzięki za inspirację!
http://www.jarzebski.pl/blog/2014/06/29/bezpieczna-destrukcja-dysku-czyli-polecenie-dd.html
Hej, wiem, że to dawny wpis, ale sytuacja jest beznadziejna bo przy instalacji systemu poleciała mi najważniejsza partycja z prywatnymi zdjęciami i nagraniami, które są dla mnie bezcenne (robiłem to opiekując się w między czasie półroczną córką i chyba zaptaszyłem format) Udało mi się część plików odzyskać tym photorec, ale to sieczka a i tak właśnie kluczowych plików mi nie znalazło. Chciałbym spróbować tym extundelete, ale chyba nie umieim zbudować poprawnie składni bo siedzę już nad tym 2 wieczór i nie daje rady. Dostaje coś takiego:
irectory when trying to examine filesystem
root@laskoszPC:/home/laskosz# extundelete --restore-directory Zdjecia -o /mnt/Dane/back /dev/sdd1
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 11179 groups loaded.
Loading journal descriptors ... 156 descriptors loaded.
Failed to restore file Muzyka
Could not find correct inode number past inode 2.
Try altering the filename to one of the entries listed below.
File name | Inode number | Deleted status
. 2
.. 2
lost+found 11
extundelete: Operation not permitted while restoring directory.
extundelete: Operation not permitted when trying to examine filesystem
root@laskoszPC:/home/laskosz# NOTICE: Extended attributes are not restored.
Nie rozumiem dlaczego operacja jest niedozwolona i mam problem z tym jak właściwie ustawić ścieżkę gdzie mają się zapisywać odzyskane pliki- chcę na innej partycji niż home bo tam nie mam miejsca.
Pytanie 2 - jak wpisać ścieżkę do katalogu, który chcę odzyskać a któ©ego nazwa składała się z 2 członów np: Moje Nagrania ?
W celu uściślenia, dane chcę odzyskać z formatowanej partycji /dev /sdd1, partycja nie jest zamontowana, system Kubuntu 16.10