Uratowanie dysku twardego ze złymi sektorami: dd vs gddrescue

11

Gdzieś w Internecie przeczytałem, że gddrescue jest lepszy od dd, przynajmniej pod względem możliwości rozróżnienia między odczytami dysku wykonanymi w niesprawnym sektorze. Czy to naprawdę tak jest?

czas dd if = / dev / sda skip = 900343967 of = a.bin count = 4 iflag = direct conv = noerror, sync

dd: odczyt `/ dev / sda ': Błąd wejścia / wyjścia
2 + 0 zapisów w
2 + 0 zapisów
1024 bajty (1,0 kB) skopiowane, 18,6057 s, 0,1 kB / s
3 + 1 zapisów w
4 + 0 zapisów
2048 skopiowane bajty (2,0 kB), 18,6707 s, 0,1 kB / s

rzeczywisty 0m18.672s
użytkownik 0m0.000s
sys 0m0.004s

Btw, bezpośrednia flaga naprawdę pomaga, bez tego byłem w stanie odczytać tylko 1 sektor z 4 (w porównaniu z 3/4). To jednak wyraźnie spowalnia prędkość transferu - jest to dla mnie co najmniej około 5 razy wolniejsze: 5 MB / s vs 25 MB / s bez tej flagi. W każdym razie, teraz dla części gddrescue (ddrescue) ..

czas ddrescue -b512 -c1 -s4b -dnvD -i900343967b -o0b / dev / sda b.bin

Informacje o kopiowaniu 2048 bajtów z / dev / sda do b.bin
Pozycje początkowe : infile = 460976 MB, outfile = 0 B
Rozmiar bloku kopiowania: 1 twardy
blok Rozmiar bloku twardego: 512 bajtów
Max_retries: 0
Bezpośrednio: tak Rzadko: nie Podziel: bez Obcięcia: nie

Naciśnij Ctrl-C, aby przerwać
uratowane: 1536 B, błędny rozmiar: 512 B, bieżąca szybkość: 53 B / s
ipos: 460976 MB, błędy: 1, średnia szybkość: 53 B / s
opos: 1536 B, czas od ostatniego udanego odczytu: 0 s
Zakończone

rzeczywisty 0m18.736s
użytkownik 0m0.004s
sys 0m0.000s

Jak pokazano powyżej, wykonanie zajęło dokładnie tyle samo czasu. Zgodnie z oczekiwaniami - te same statystyki: 3/4. Jednak chociaż mogłem uzupełnić problematyczne sektory wartością 0x00 dla dd (conv = sync), gddrescue wydaje się brakować tej funkcji? Zamiast tego po prostu pomija problematyczny sektor bez zapisywania czegokolwiek na swoim miejscu i przechodzi do następnego następnego sektora (jeśli mam już dane zapisane nad tym sektorem w pliku wyjściowym - nie zostaną one zastąpione: czasami może to nie być pożądane ). Nie jestem pewien, jak działa opcja -t (obcinanie) dla urządzenia blokowego z gddrescue(myślę, że całkowicie nadpisze go 0x00), ale w zwykłym pliku, zgodnie z przewidywaniami, obetnie cały plik bez robienia tego tylko w obrębie wymiarów przesunięcia (tj. -o1). Jest to więc trochę podobne do synchronizacji dd , ale nie jest takie samo, jak naśladuje funkcjonalność identyfikacji, JEŚLI jesteś gotowy na zastąpienie całego urządzenia wyjściowego / pliku.

Chociaż dzięki obecności opcji pełnej i możliwości rejestrowania złych sektorów / bloków - gddrescue wydaje się lepszym wyborem. Należy zauważyć, że obie aplikacje zostały uruchomione z (prawie) identycznymi parametrami.

Dane wyjściowe

diff? .bin

jest pusty (wyjście 0), co oznacza, że ​​pliki są dokładnie takie same.

Teraz jest to część, której NIE rozumiem:

dd działa wolno nawet w przypadku elementów wolnych od błędów, ponieważ robi małe odczyty i zapisy. Spędza dużo czasu, przeżuwając błędne części dysku, zamiast czytać tyle bezbłędnych rzeczy, ile się da, NASTĘPNIE wracając do robienia trudnych rzeczy.

O co w tym wszystkim chodzi? Zwłaszcza część „ spędza dużo czasu na przeżuwaniu błędnych części napędu, zamiast czytać tyle bezbłędnych rzeczy, ile się da, A NASTĘPNIE wracając do trudnych rzeczy ”? Zajęło to tyle samo czasu, co pokazano powyżej (chociaż sprawdziłem bardzo małą część danych, ale czy to powinno mieć znaczenie?).

gddrescue oferuje przełącznik -r , który powinien kontrolować ilość ponownych odczytów w „złym sektorze”, jednak wydaje się, że dd działa z opcją -r0 przez cały czas (ponieważ zajęło to ten sam czas). Czy więc ta opcja służy jedynie do „przetwarzania końcowego”? Mam na myśli , że pierwotnie zarówno dd, jak i gddrescue wydają się działać z -r0, a dd nie wydaje się przeżuwać błędnych części bardziej niż gddrescue (oba wydają się zatrzymywać na złym bloku na 15-18 sekundy dają lub biorą, więc o co chodzi, w jaki sposób gddrescue jest szybszy ???)

Ponadto, do czego służy opcja -D (użyj zapisu synchronicznego dla pliku wyjściowego)? Nie zauważyłem żadnej różnicy w stosunku do niektórych przeprowadzonych testów.

Czy ktoś może komentować całość? Dzięki.

XXL
źródło

Odpowiedzi:

6

Nie jestem pewien, jak cytowany autor doszedł do swoich wniosków. Nie debatuję, czy ma rację, czy nie, po prostu nie mam tego doświadczenia.

Z drugiej strony, w odniesieniu do tego oświadczenia ...

gddrescue przewyższa dd przynajmniej pod względem możliwości rozróżnienia liczby odczytów dysku wykonanych w niesprawnym sektorze.

Prawdziwym „przynajmniej” powodem użycia gddrescue jest to, że gddrescue nie obcina danych wyjściowych przy wielokrotnych próbach odczytu / zapisu. gddrescue jest również w pełni automatyczny w odniesieniu do niektórych błędów odczytu, które zatrzymałyby dd.

Cytowany autor może mieć rację, może nie ... ale całe stwierdzenie nie ma sensu gddrescue.

AKTUALIZACJA: Szczegółowe różnice między dd i gddrescue.

dd conv = noerror, będzie kontynuował działanie po błędzie, ale po prostu pominie zły blok. nawet dodanie opcji synchronizacji spowoduje po prostu wstawienie zer zamiast pomijania. Jeśli użyjesz dd, aby zrobić kolejny odczyt przy użyciu tego samego wyjścia, po prostu nadpiszesz / utracisz wszystko, co wcześniej odzyskałeś.

gddrescue, będzie również działał po błędzie. Może odzyskać częściową wydajność ze złego bloku i wróci i spróbuje zablokować sektor po sektorze. gddrescue będzie przechowywać szczegółowy dziennik błędów z dobrym blokiem, uszkodzonymi blokami i sektor po sektorze z każdego uszkodzonego bloku. Jeśli spróbujesz wykonać odczyt ponownie, gddrescue odetnie (obciąć) i doda wszelkie odzyskane dane.

Pamiętaj, nawet w przypadku obu narzędzi, jeśli cały blok jest w 100% nieczytelny. Nadal nie otrzymasz z niego danych. gddrescue może potencjalnie uzyskać więcej danych, jeśli niektóre sektory w bloku pozostaną czytelne.

JM Becker
źródło
Rozumiem, cóż ... Jeśli chodzi o to, że gddrescue jest w pełni automatyczny, czy dd nie jest również w pełni automatyczny z konwekcją = noerror ? Czy możesz rozwinąć fragment „obcinania danych wyjściowych przy powtarzających się próbach odczytu / zapisu”? Masz na myśli „przetwarzanie końcowe ”, kiedy gddrescue otrzymuje polecenie ponownego zbadania sektorów, które początkowo nie zostały odczytane?
XXL
Zaktualizowałem swoją odpowiedź, aby odzwierciedlić twoje pytanie.
JM Becker,
Użyłem gddrescue wiele razy na dyskach twardych i nośnikach optycznych. Zaletą jest to, że próbuje odzyskać nieczytelne obszary. Możesz także go zatrzymać i uruchomić ponownie później, a on odbierze dokładnie tam, gdzie go przerwał.
Chris Thompson,
1
@TechZilla - gddrescue prostu pomija zły blok, a także, podobnie jak dd robi. Jak napisałem powyżej, wypełnianie zerami (conv = sync) jest dokładną opcją, której brakuje gddrescue i która jest czasami przydatna (przy dodatkowym wysiłku można to zrobić ręcznie za pomocą / dev / zero, ponieważ miałbyś dziennik uszkodzone sektory wyprodukowane według danych wyjściowych gddrescue ). Nie ma różnicy między gddrescue a dd pod względem odzyskiwania, gddrescue nie robi nic innego w tym zakresie. Dlaczego? Ponieważ przy tym samym rozmiarze bloku odzyskają tę samą ilość danych.
XXL
@TechZilla - jedyna faktyczna różnica polega na tym, że liczba sektorów do przetworzenia jest większa niż rozmiar bloku . To da ci możliwość zauważalnego przyspieszenia rzeczy w porównaniu do dd , ponieważ dd może działać tylko ze statycznym, nie zmiennym rozmiarem sektora. gddrescue , z drugiej strony, najpierw przeczyta tyle sektorów, ile ci to nakazało , ale zadeklaruje te fragmenty jako złe, jeśli pojedynczy blok w środku jest wątpliwy, a kiedy to zrobisz - przełącz się w tryb post-inspekcji mylących obszarów stopniowo zmniejszając rozmiar sektora, aż osiągnie minimalny rozmiar bloku
XXL
2

W zależności od tego, kiedy dysk twardy został wyprodukowany, a także od producenta i od jakiej wersji oprogramowania układowego działa, w przypadku nowoczesnych dysków twardych po wykryciu uszkodzonych sektorów są one usuwane z oprogramowania układowego, a dysk wie, że pomija uszkodzone sektory. Zatem pojęcie „ratowania” dysku twardego ze złych sektorów może być pod tym względem dyskusyjne. Pytanie, czy niegdyś uszkodzone sektory kiedyś miały prawidłowe dane, wydaje się rozwiązaniem, którego szukasz - nie ma zamiaru mówić!

Na stronie grc.com znajduje się oprogramowanie o nazwie spinrite 6, które twierdzi, że jest w stanie naprawić dyski twarde ze złymi sektorami. Jest to płatne oprogramowanie i nigdy go nie wypróbowałem. Warto o tym przeczytać, zwłaszcza jeśli ktoś próbuje „wskrzesić” dysk twardy i faktycznie działa tak, jak opisano. FAQ na grc.com dotyczące spinrite 6 wskazuje, że istnieje 30-dniowa gwarancja zwrotu pieniędzy (i nie ma wersji próbnej ani darmowej). Uwaga: nie jestem powiązany z grc.com, ani nie polecam go w twojej sytuacji. Wiem, że istnieje i może działać zgodnie z reklamą, ale nie wierz mi na słowo - zastrzeżenie.

W odniesieniu do oceny, czy gddrescue „przewyższa” dd, przynajmniej pod względem możliwości rozróżnienia między liczbą odczytów dysku wykonanych w niesprawnym sektorze, dowolną liczbą odczytów w uszkodzonym sektorze (ponieważ jest oznaczony jako inny niż sektor funkcjonalny na liście uszkodzonych sektorów przechowywanych na liście oprogramowania układowego) nie wydaje mi się przydatny w jakościowym użyciu gddrescue lub dd.

Przydatne może być przeczytanie strony internetowej, dd (Unix) pod adresem : https://secure.wikimedia.org/wikipedia/en/wiki/Gddrescue#Recovery-oriented_variants_of_dd

Przydatne może być także spojrzenie na: Jak utworzyć obraz uszkodzonego dysku twardego za pomocą UBCD, dd-rescue i P2 eXplorer na stronie : http://www.myfixlog.com/fix.php?fid= 21

Tomek
źródło