Próbując odzyskać jak najwięcej danych z uszkodzonego dysku twardego o pojemności 3 TB, postąpiłem następująco:
- Wykonałem skan powierzchni za pomocą HD Sentinel, który zidentyfikował dwa małe uszkodzone obszary i około 100 uszkodzonych sektorów (wcześniej liczba ta wynosiła 16).
- Następnie określiłem, które pliki dotknęły uszkodzone sektory, używając różnych metod .
- Przeniosłem te pliki (sześć dużych plików wideo) do specjalnego folderu i skopiowałem pozostałe pliki i foldery, zmniejszając ich kolejność; wszystko zostało pomyślnie skopiowane, z wyjątkiem jednego nieistotnego pliku .eml, który akurat znajdował się w pobliżu już zidentyfikowanych uszkodzonych sektorów.
- Potem pomyślałem, że najbezpieczniejszym sposobem na maksymalne wykorzystanie pozostałych plików (programów telewizyjnych, które nie są już online i dla których nie mam kopii zapasowej) byłoby użycie ddrescue - ale ponieważ jedyny pusty dysk twardy, jaki miałem, to 500 GB , Nie mogłem wyobrazić sobie wszystkiego. Niektóre z tych plików są masowo pofragmentowane (6000 do 12000 fragmentów każdy - zostały pobrane jednocześnie, tak sądzę, dlatego właśnie zostały zapisane we wzorcu „z przeplotem” powodującym taki poziom fragmentacji, ponieważ w przeciwnym razie HDD miałby dużo wolnego miejsca), więc Nie mogłem ich odzyskać po prostu przez wyodrębnienie sektorów, które zajmowały, ale pomyślałem, że obrazując pierwsze 10 GB, zwykle zawierające cały plik MFT i wszystkie inne pliki systemowe, a także cztery obszary, w których te pliki były zlokalizowane, będę w stanie łatwo wyodrębnij je z obrazu, używając WinHex lub R-Studio.
Ale niestety nie dostałem całego MFT: niektóre z nich (jak później dowiedziałem się, sprawdzając pełną listę nfi.exe tej partycji, którą utworzyłem wcześniej) znajdują się wokół znaku 200 GB, a trzeci fragment znajduje się na sam koniec partycji, blisko znaku 3 TB. Nie sądziłem, że stan dysku twardego pogorszy się tak szybko podczas próby odzyskania (teraz ma ponad 12000 przeniesionych sektorów plus 9000 oczekujących sektorów, zaledwie kilka godzin później! ...), i nie podjąłem żadnych środków ostrożności aby zapisać MFT z WinHex, kiedy mogłem. Teraz, gdy ddrescue stało się boleśnie powolne, prawdopodobnie nie dostanę całego MFT. Ponadto, jeśli otworzę ten częściowy obraz za pomocą WinHex, użyje on tej samej migawki woluminu, która została utworzona podczas badania urządzenia fizycznego, pliki, które chcę, zostaną wyświetlone z poprawnym rozmiarem i datami,
Ale odzyskałem sporą część fragmentów danych zawierających te sześć plików i dla każdego z nich mam szczegółową listę zajmowanych sektorów / klastrów (uzyskanych za pomocą trzech różnych narzędzi: nfi.exe, Recuva, HD Sentinel) . W jaki sposób mogę odbudować te pliki przy użyciu tych informacji za pomocą automatycznego skryptu? (Wykonanie tego ręcznie byłoby niemożliwe).
Z ddrescue mógłbym użyć przełączników -i (pozycja wejściowa) -o (pozycja wyjściowa) i -s (rozmiar wejściowy), ale jak mogę zautomatyzować proces i uruchomić te tysiące poleceń jednocześnie?
W systemie Windows znam narzędzie wiersza polecenia o nazwie dsfo, które może wyodrębnić dane z dowolnego źródła do pliku docelowego za pomocą polecenia takiego:
dsfo [source] [offset] [size] [destination]
Mógłbym edytować moją listę sektorów / klastrów za pomocą kombinacji Calc i TEDNotepad, aby utworzyć listę poleceń dsfo, ale utworzyłoby to tysiące fragmentów, do których musiałbym jakoś dołączyć. Czy jest lepszy sposób na zrobienie tego w jednym kroku?
EDYTOWAĆ :
Wziąłem więc listę klastrów / sektorów dla jednego z tych plików, wygenerowaną przez HD Sentinel, która jest przedstawiona w następujący sposób:
R:\fichiers corrompus\2017_07_2223_58 - Arte - Pink Floyd - The Dark Side of the Moon Live.mp4
Total Size: 883 787 365 bytes Position: 0 Attributes: Arc
Number of file fragments: 6040
VCN: 0 LCN: 516530293 Length: 4288 sectors: 4132506536 - 4132540839
VCN: 4288 LCN: 516534613 Length: 16 sectors: 4132541096 - 4132541223
VCN: 4304 LCN: 516534645 Length: 64 sectors: 4132541352 - 4132541863
VCN: 4368 LCN: 516534725 Length: 16 sectors: 4132541992 - 4132542119
VCN: 4384 LCN: 516534757 Length: 48 sectors: 4132542248 - 4132542631
VCN: 4432 LCN: 516534853 Length: 32 sectors: 4132543016 - 4132543271
VCN: 4464 LCN: 516534901 Length: 16 sectors: 4132543400 - 4132543527
VCN: 4480 LCN: 516534933 Length: 48 sectors: 4132543656 - 4132544039
VCN: 4528 LCN: 516535013 Length: 16 sectors: 4132544296 - 4132544423
...
VCN: 215760 LCN: 568126709 Length: 9 sectors: 4545277864 - 4545277935
Pierwsze pole prawdopodobnie oznacza „Wirtualny numer klastra” (nie znalazłem szczegółowego opisu w zintegrowanej pomocy), w każdym razie ta wartość oczywiście reprezentuje numer klastra w stosunku do początku pliku. Druga wartość musi być „logicznym numerem klastra” i jest numerem klastra w stosunku do początku partycji (patrz poniżej, na początku pomyliłem się, sądząc, że ta wartość dotyczy całego urządzenia). Trzecia wartość reprezentuje długość każdego fragmentu, również mierzoną w klastrach. Te trzy wartości powinny wystarczyć dla moich zamiarów i celów.
Zaimportowałem to do TED Notatnika i użyłem funkcji „Narzędzia”> „Linie”> „Kolumny, liczby”, wybrałem kolumny 2, 3, 1 z tabulatorami jako separatory, co dało wynik:
LCN: 516530293 Length: 4288 VCN: 0
LCN: 516534613 Length: 16 VCN: 4288
LCN: 516534645 Length: 64 VCN: 4304
LCN: 516534725 Length: 16 VCN: 4368
LCN: 516534757 Length: 48 VCN: 4384
LCN: 516534853 Length: 32 VCN: 4432
LCN: 516534901 Length: 16 VCN: 4464
LCN: 516534933 Length: 48 VCN: 4480
LCN: 516535013 Length: 16 VCN: 4528
...
LCN: 568126709 Length: 9 VCN: 215760
Następnie zaimportowałem to do Calc z tabulatorami i spacjami jako separatorami, dodałem kolumnę do obliczenia przesunięcia wejściowego od numeru klastra (= LCN * 8 * 512), kolejną do obliczenia długości w bajtach na podstawie długości w klastrach (= długość * 8 * 512) i wreszcie inny, aby uzyskać przesunięcie wyjściowe od wartości VCN (= VCN * 8 * 512), wkleił formuły do wszystkich innych wierszy, usunął dodatkowe kolumny, zastąpił „LCN:” słowem „ddrescue / media / sdb1 / ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i ”, zamieniono„ Length: ”na„ -s ”, zastąpiono„ VCN: ”na„ -o ”...
Teraz mam to ( z wyjątkiem tego, że dla każdego pliku istnieje 6000-12000 wierszy):
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115708080128 -s 17563648 -o 0
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115725774848 -s 65536 -o 17563648
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115725905920 -s 262144 -o 17629184
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115726233600 -s 65536 -o 17891328
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115726364672 -s 196608 -o 17956864
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115726757888 -s 131072 -o 18153472
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115726954496 -s 65536 -o 18284544
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115727085568 -s 196608 -o 18350080
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115727413248 -s 65536 -o 18546688
...
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2327047000064 -s 36864 -o 883752960
Więc jaki jest najprostszy sposób uruchamiania tej ogromnej serii poleceń w systemie na żywo Knoppix? Co w systemie Linux jest odpowiednikiem skryptu wsadowego dla wiersza polecenia w systemie Windows?
(Mógłbym znaleźć ten konkretny plik w sieci P2P, więc pozwoli mi to sprawdzić, czy ta metoda działa bezbłędnie, a jeśli tak, aby ocenić poziom uszkodzeń. Brak szczęścia dla pozostałych pięciu. Jeden z nich nie jest pofragmentowane, aby wyodrębnić je jako jeden fragment danych: pod koniec jest wiele pustych sektorów, ale reszta jest czytelna. Pozostały więc cztery pliki do wyodrębnienia w ten sposób.)
źródło
cat
plików wyjściowych razem.Odpowiedzi:
Uruchomiłem więc te skrypty ddrescue (najpierw uczyniłem je wykonywalnymi za pomocą polecenia „chmod + x”, a następnie wywołałem je za pomocą ./nazwa_skryptu):
- Na początku polecenia nie działały, ddrescue dawał tylko błędy, musiałem ponownie edytować skrypty, aby parametry były umieszczone przed nazwami plików wejściowych i wyjściowych. Polecenia wyglądały wtedy następująco:
- Następnie pierwsza próba wygenerowała nieczytelny plik bez poprawnego nagłówka MP4. Dlaczego ? Ponieważ lista dostarczona przez Hard Disk Sentinel podaje fizyczne / absolutne numery sektorów, ale logiczne numery klastrów (zweryfikowałem, otwierając plik obrazu za pomocą WinHex), więc musiałem dodać 264192x512 do obliczenia przesunięcia wejściowego (przesunięcie partycji to 264192 sektory lub 129 MB).
- Więc zadziałało. Zajęło to tylko kilka minut i wyprodukowałem pięć plików wideo, które są w większości czytelne, możliwe do pominięcia do końca, wraz z ich oczekiwaną zawartością - nie obejrzałem ich całkowicie, ale wydaje się tak bezbłędny, jak to tylko możliwe.
(Zrobiłem to wszystko na drugim komputerze działającym na Knoppixie na żywo z karty pamięci i użyłem TeamViewera do polecenia z mojego podstawowego komputera na Windows 7, a także aby móc łatwo przesyłać pliki skryptów. Może jest prostsza konfiguracja dla takie cele, ale cóż, działa!: ^ p)
- Ale oczywiście są części uszkodzone, ponieważ na tym częściowym obrazie były nieczytelne sektory. Skąd mam wiedzieć, gdzie szybko i niezawodnie? Cóż ...
wpadłem na pomysł, aby użyć trybu „generowania” ddrescue, który tworzy pliki dziennika (lub pliki map, jak się je teraz nazywa), analizując dane wyjściowe i biorąc pod uwagę, że całkowicie puste sektory to sektory nieprzeczytane, oznaczone jako „?”, Reszta oznaczenie „+”. Ponieważ ddrescue oczekuje pliku wejściowego i pliku wyjściowego, ale tylko plik wyjściowy jest w rzeczywistości analizowany w tym trybie, stworzyłem fałszywe pliki wejściowe za pomocą tego polecenia, które kopiuje tylko 1 MB, ale rozszerza rozmiar do rozmiaru plików wyjściowych (tylko w celu oszczędność czasu i miejsca):
Następnie uruchomiłem polecenie „generuj”:
A potem otworzyłem te pliki za pomocą ddrescueview:
(Trzy z sześciu plików są poważnie uszkodzone, podobnie jak pierwszy powyżej, z dużymi fragmentami pustych danych, pozostałe trzy mają tylko kilka uszkodzonych sektorów, takich jak drugi. Drugi to ten, który nie został podzielony, wyodrębniłem go za pomocą pojedynczego polecenia ddrescue).
A potem poklepałem się jedną ręką po plecach, a drugą uderzyłem się w twarz za to, że codziennie korzystałem z tego dysku twardego o pojemności 3 TB codziennie przez wiele miesięcy bez kopii zapasowej ... (Początkowo miało to przechowywać tylko tymczasowe rzeczy, podczas gdy Robiłbym miejsce na innych dyskach twardych, ale zabierało to więcej czasu, niż się spodziewano, i zabrakło mi miejsca na przechowywanie takich filmów, a nawet moich osobistych zdjęć i filmów w pewnym momencie, mogła to być poważna katastrofa, ale „to tylko usterka ”, jak powiedziałby Dick Jones).
źródło