Mam uszkodzony dysk twardy, który nie może zapisać lub odczytać pierwszych sektorów dysku. Po prostu daje błędy we / wy i to wszystko. Istnieją inne obszary na dysku, które wydają się (w większości) w porządku. Próbuję zamontować partycję (ext4) i sprawdzić, czy mogę uzyskać dostęp do niektórych plików, które chciałbym odzyskać. Ponieważ mount
polecenie obsługuje tę offset
opcję, powinienem móc zamontować system plików, nawet jeśli tablica partycji jest nieczytelna i nie można jej zapisać. Problem polega na tym, jak znaleźć przesunięcie. Żadne z narzędzi ext4 nie wydaje się mieć tej konkretnej funkcji.
filesystems
partition
data-recovery
ext4
Ernest A.
źródło
źródło
Odpowiedzi:
Nie ma standardowego przesunięcia jako takiego, ponieważ oczywiście partycję można rozpocząć w dowolnym miejscu. Załóżmy jednak przez chwilę, że szukasz pierwszej partycji i została ona utworzona mniej lub bardziej jako domyślna. Są dwa miejsca, w których możesz je znaleźć, zakładając, że używasz tradycyjnej tablicy partycji DOS:
Teraz, aby kontynuować, będziesz chciał wybrać swoje ulubione narzędzie zrzutu heksadecymalnego i dowiedzieć się trochę o układzie dysku ext4 . W szczególności zaczyna się od 1024 bajtów wypełnienia, co ext4 ignoruje. Następnie pojawia się superblok. Możesz rozpoznać superblok, sprawdzając magiczną liczbę 0xEF53 z przesunięciem 0x38 (od początku superbloku lub 0x438 od początku partycji lub 1080 w systemie dziesiętnym.) Magiczna liczba to little-endian. Tak naprawdę jest przechowywany na dysku jako 0x53EF.
Oto jak to wygląda z
xxd -a
:0000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................ * 0000400: 0040 5d00 0084 7401 33a0 1200 33db a600 .@]...t.3...3... 0000410: 4963 5300 0000 0000 0200 0000 0200 0000 IcS............. 0000420: 0080 0000 0080 0000 0020 0000 6637 0952 ......... ..f7.R 0000430: 6637 0952 0200 1600 53ef 0100 0100 0000 f7.R....S....... 0000440: 9938 f851 004e ed00 0000 0000 0100 0000 .8.Q.N..........
Zauważ, że kiedy podajesz przesunięcie do montowania (lub losetup), musisz podać przesunięcie do miejsca, w którym zaczyna się wypełnianie - a nie do superbloku.
Teraz, jeśli nie jest to pierwsza partycja, lub w inny sposób nie znajduje się w jednym z dwóch (trzech) oczekiwanych miejsc, w zasadzie możesz poszukać magicznej liczby 0xEF53. To właśnie robi
testdisk
(zalecane w komentarzu) dla Ciebie.źródło
testdisk
nie znalazłbym tego. Dziękuję wszystkim za pomoc.dd if=/dev/sda skip=$start_sector | xxd -a | grep '[02468]30: .... .... .... .... 53ef'
aby uzyskać prawdopodobne dopasowania. Prawdopodobnie niezbyt szybko, ale możesz pozwolić mu działać, gdy znajdziesz lepszą metodę.testdisk
, po prostu musiałem dodać edycjętl;dr:
nagłówkaW oparciu o odpowiedź @ derobert napisałem program ( gist ), który przeanalizuje strumień wejściowy zi
dd
skanuje każdy sektor w poszukiwaniu czegoś, co wygląda jak początek partycji ext.Będzie działać co najmniej tak szybko, jak
dd
można odczytać z dysku twardego. Skrócona wersja znajduje się poniżej.Najprostsze użycie jest po prostu
sudo dd if=/dev/xxx | ext2scan
, chociaż prawdopodobnie będziesz chciał zmodyfikowaćdd
polecenie, aby poprawić rozmiar bloku lub wybrać region do przeszukania.Uwaga: znajdzie nie tylko początek partycji, ale także superbloki w nich.
W obu przypadkach polecam użycie
dumpe2fs
do analizy wyników. Możesz zrzucić początek podejrzanego superbloku do pliku (co najmniej pierwszych sześciu sektorów, zgodnie z moim nieformalnym testem), a jeśli jest to superblok,dumpe2fs
powiesz (między innymi) względne lokalizacje innych superbloków .źródło
Zgadnij, gdzie zaczyna się partycja i zastosuj brutalną siłę:
Wyobrażam sobie, że może to zająć trochę czasu, ale jeśli spędziłeś już 6 godzin z testdisk, być może warto spróbować.
źródło
echo "--->$i<---"
powodu, ponieważ w przeciwnym razie niemożliwe jest zmierzenie postępu. Myślę, że możesz zwiększyćbsz
do 4096, co przyspieszy.Wypróbuj inną opcję (np. Używając debugfs i fsck.ext4):
debugfs:
Najpierw musisz zamontować debugfs (a nie sam wadliwy dysk twardy):
http://johnsofteng.wordpress.com/2013/11/20/sysfs-procfs-sysctl-debugfs-and-other-similar-kernel-interfaces/
http://afzalkhanlinuxtalk.wordpress.com/2013/08/07/how-to-recover-deleted-file-in-linux/comment-page-1/#comment-8
http://blesseddlo.wordpress.com/2010/10/12/using-debugfs/
(w gruncie rzeczy należy użyć „debugfs -w” z trybem zapisu, a następnie „lsdel”, aby wyświetlić listę wszystkich usuniętych plików). alternatywnie możesz użyć
a tu jest fsck.ext4:
http://linuxexpresso.wordpress.com/2010/03/31/repair-a-broken-ext4-superblock-in-ubuntu/
Innym jest „sleuthkit” („sudo apt-get install sleuthkit”), które mają polecenie takie jak „istat” do dostarczania blokowych informacji o i-węzłach - z których można uzyskać przesunięcie, a tym samym łatwo zablokować zawartość danych.
https://www.ibm.com/developerworks/cn/linux/l-cn-ext4resize/
(BTW, jeśli rozmiar bloku to 1024, z polecenia debugfs „show_super_stats”, to wynika z tego, że blok 1 jest przesunięty o 1024 bajty od początku dysku, a każda grupa bloków może mieć także kilka bloków.)
źródło
Miałem obraz oprogramowania układowego e-booka, który zawierał obraz partycji ext3fs, aby zamontować i edytować, musiałem zeskanować obraz za pomocą narzędzia bgrep, aby znaleźć wszystkie pozycje magicznej liczby ext3fs
0x53EF
i spróbować zamontować przy użyciu znalezionych przesunięć.Oto skrócony skrypt, który wykonuje montowanie:
Kompletny skrypt znajduje się tutaj .
źródło
To nie zostało przetestowane, ale myślę, że możesz użyć metody omówionej w tym SU Pytania i odpowiedzi zatytułowanej: Odwrotne wyszukiwanie i-węzła / pliku od przesunięcia w surowym urządzeniu na Linuksie i ext3 / 4? .
Wygląda na to, że możesz użyć i-węzła pliku + przesunięcia dysków + rozmiaru bloku, aby określić przesunięcie pliku.
źródło