Szybsze odzyskiwanie z dysku z uszkodzonymi sektorami


10

Ostatnio próbowałem dd z niezdrowego dysku twardego do pliku. użyłem dd if=/dev/sdb of=somefile bs=4096 conv=noerror,sync. Mój problem polegał na tym dd tracił dużo czasu, gdy napotkał zły blok. W moim przypadku chętnie zapłaciłbym za utratę danych, aby uzyskać szybszy wynik.

Czy jest jakiś sposób, aby przyspieszyć obsługę błędów? Może poprawka jądra (mówienie dyskowi HDD, aby mniej się starał czytać blok)? Albo inny program?

Odpowiedzi:


23

Po pierwsze, aby oprogramowanie działało: możesz spróbować użyć ddrescue zamiast dd.

ddrescue ma przełącznik, który wykonuje tylko ograniczoną liczbę prób. Może również używać pliku dziennika, więc rejestruje, które bloki były złe. Jeśli później będziesz chciał zrobić więcej prób, możesz użyć podobnie plik dziennika do uruchomienia ddrescue jeszcze raz z różnymi opcjami (jak więcej prób) i ponowi próbę tylko niezbędnych bloków.

Przykładowe użycie:

# ddrescue -n /dev/sda /dev/sdb rescue.log
# ddrescue -r1 /dev/sda /dev/sdb rescue.log

Od ddrescue strona informacyjna:

   -n, --no-scrape     
          Skip the scraping phase. Avoids spending a lot of time
          trying to rescue the most difficult parts of the file.

   -r, --retry-passes=<n>
          Exit after given number of retry passes. Defaults to 0.
          -1 means infinity. Every bad sector is tried only once 
          in each pass. To retry bad sectors detected on a previous
          run, you must specify a non-zero number of retry passes.

Oto kilka dodatkowych źródeł do korzystania ddrescue:


Edytować

W przypadku, gdy sam dysk twardy trwa zbyt długo, możesz spróbować włączyć funkcję o nazwie TLER ( T ja ja L imitowane mi rror R odzyskiwanie) lub CCTL ( do dowództwo do ukończenie T ja ja L imit). Nie wszystkie dyski twarde go posiadają, ale można go użyć do ograniczenia czasu na samym kontrolerze HDD. Takie podejście można połączyć z użyciem ddrecue, oczywiście.

Linux ma narzędzie o nazwie smartctl (w smartmontools pakiet).

Aby sprawdzić bieżące ustawienie („wyłączony” oznacza nieograniczony czas, którego nie chcesz):

# smartctl -l scterc /dev/sda

Aby ustawić stałą wartość (5,0 sekund w tym przykładzie. Ustawienie na 0 wyłącza TLER):

# smartctl -l scterc,50,50 /dev/sda

Źródło dla TLER: http://en.wikipedia.org/wiki/TLER


2
Innym narzędziem do obejrzenia jest dc3dd, który jest wersją dd w śledztwie
fpmurphy

oh, nie znam tego narzędzia!
Slizzered

Nie miałem pojęcia o tym TLER, ale to naprawdę uratowało mi dzień. Na moim dysku te były wyłączone i za każdym razem, gdy uruchomiłem ddrescue, mój dysk został zablokowany po kilku sekundach. Wyłączanie, włączanie i następna próba. Teraz ustawiam go na 2 sekundy poleceniem, o którym wspomniałeś, i nigdy się nie blokuje, pomija niektóre sektory, ale przynajmniej trwa bez przerw.
Sven Rieke


2

Aby szybko i szybko uratować dysk, możesz użyć pliku skryptu sh i uruchomić plik za pomocą sh. Zawiera tę linię, po prostu powtórz sudo ddrescue i sleep 3 jeszcze kilka razy. Sen jest używany do zatrzymania dysku na kilka sekund:

#! /bin/sh -e 
sudo ddrescue -d -r0 -e +0 -T 1s -n /dev/drivepartition file.img log.logfile 
sleep 3

Opcje użyte powyżej:

  • -r0 : bez ponownych prób
  • -e +0: wyjście przy pierwszym błędzie
  • -T 1s: zakończ z 1 sekundowym odczytem błędu
  • -d : Bezpośrednie we / wy
  • -n : bez zadrapań

Możesz użyć -R po zakończeniu z opcją -A raz, spowoduje to odwrócenie i usunięcie wszystkich błędów i rozpoczęcie od nowa. Oznacza, że ​​odczytuje błędy inaczej.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.