Powiedz, że chcesz wyzerować uszkodzony dysk twardy. Chcesz zastąpić jak najwięcej zerami. Czego nie chcesz: proces przerywa się przy pierwszym błędzie zapisu. Jak to zrobić?
AFAICS, zwykły dd
zapewnia tylko opcję ignorowania błędów odczytu. Tak więc coś w tym rodzaju
dd if=/dev/zero of=/dev/disk/by-id/lousy-vendor-123 bs=128k
nie wystarcza.
ddrescue
wydaje się być lepszym w ignorowaniu błędów - ale jaka byłaby optymalna linia poleceń?
Moja próba z GNU ddrescue:
ddrescue --verbose --force --no-split /dev/zero /dev/disk/by-id/lousy-vendor-123
dd conv=noerror
może być rozszerzeniem GNU, nie jestem pewien. W każdym razie powinno wystarczyć. Warto jednak przyjrzeć się odpowiedzi SATA Tell-the-Drive-to-Erass-Era na wymazanie całych dysków.dd
dokumentównoerror
jako „kontynuuj po błędach odczytu” ...dd conv=noerror
jest standardem POSIX, ale może być bardzo powolnydd conv=noerror
musi być do odczytu błędów (według strony podręcznika), a nie do pisania błędów. Nie ma nic złego w połączeniu goconv=notrunc
, co pomogło mi zignorować błędy zapisu. unix.stackexchange.com/a/229379/4319dd if=/dev/zero of=/dev/sdX
, nie wykona odczytów dysku. Jak myślisz, dlaczego polecenie dd „nie wystarczy” ? Jakie „błędy” występują?Odpowiedzi:
Wolę do tego
badblocks
w trybie niszczenia. Pisze, kontynuuje to, gdy napotyka błędy, a na koniec informuje, gdzie były te błędy, a te informacje mogą pomóc ci zdecydować, co dalej (Czy to się połączy?).I lista bloków:
A co pozostało na dysku:
Uwaga: to nie są tak naprawdę losowe dane - wzorzec jest powtarzalny, więc jeśli pominiesz
1MiB
, zobaczysz ponownie ten sam wynik.Spróbuje również zweryfikować, odczytując dane z powrotem, więc jeśli masz dysk, który twierdzi, że zapisywanie zakończyło się powodzeniem, ale zwraca nieprawidłowe dane podczas odczytu, znajdzie również te błędy. (Upewnij się, że żadne inne procesy nie zapisują na dysk podczas działania badblocks, aby uniknąć fałszywych alarmów).
Oczywiście w przypadku mocno uszkodzonego dysku może to potrwać zbyt długo: nie ma kodu, który spowodowałby, że pomijałby całkowicie uszkodzone obszary. Jedynym sposobem na osiągnięcie tego
badblocks
byłoby użycie znacznie większego rozmiaru bloku.Nie jestem pewien, czy
ddrescue
to się poprawi; ma to zrobić w drugą stronę (jak najszybciej odzyskać jak najwięcej danych). Możesz to zrobić ręcznie dla dd / ddrescue / badblocks, określając pierwszy / ostatni blok ...źródło
-t random
lub-t 0
- czy złe bloki, to po prostu wykonaj jedno przejście zapisu? Patrząc na stronę man - wygląda na to, że bez-t
niej robi 4 przejścia (dla „0xaa, 0x55, 0xff, 0x00”).-t
, co podajesz w wierszu poleceń. Domyślnie 4 przejścia, jak mówisz.Jeśli dysk nie jest podłączony przez USB, rozważ użycie
hdparm
(wersja> 9.31), aby wykonać bezpieczne wymazywanie dysku ATA . To polecenie powoduje, że oprogramowanie układowe napędu czyści zawartość dysku, w tym uszkodzone bloki.Ostrzeżenie: Użyj poprawnej litery dysku - pokazałem
/dev/sdX
jako przykład - nie kopiuj / wklej.Najpierw sprawdź, czy rozumie polecenia ATA (większość dysków wyprodukowanych w ciągu ostatniej dekady lub więcej powinna):
Ostatnie dwa wiersze wyciągu wskazują, że jest on obsługiwany.
Dlatego dodaj hasło do dysku (najwyraźniej wymaganie):
i usuń:
Więcej informacji na temat tej procedury można znaleźć tutaj .
źródło
/dev/sdX
jest dobre, ponieważ jeśli ktoś pominie wystąpienie tego podczas wklejania i dostosowywania, nie będzie problemu.Widzę tutaj cztery praktyczne odpowiedzi:
hdparm
Metoda wysłane przez garethTheRed jest prawdopodobnie najlepiej, jeśli są podłączone bezpośrednio do komputera. Najwyraźniej jednak, jeśli spróbujesz podłączyć go przez USB, możesz zepsuć dysk. Jeśli robisz to dla dysku, który zamierzasz się pozbyć, może to być dobra rzecz. Prawdopodobnie jednak chcesz zabezpieczyć usuwanie przed odrzuceniem.Technika zgłoszona przez imza - Iwana Zakharyascheva będzie działać, ale może być bardzo powolna. Sugerowałbym, jeśli nie chcesz, aby dane można było odzyskać, użyj
/dev/urandom
zamiast/dev/zero
; na przykład,Odradzałbym następujące. Aby uzyskać coś szybszego, który robi to samo, skorzystaj z techniki zgłoszonej przez maxschlepzig (w pytaniu):
Będzie to szybsze niż
dd
polecenie, ale nie tak szybkie jakhdparm
polecenie. Zobacz poniżej, dlaczego nie polecam tego ...badblocks
Komenda będzie również działać, ale nie można losowe dane w ten sposób, i znów będzie bardzo powolny.Na koniec byłbym niedoceniony, gdybym nie wskazał najważniejszego powodu, dla którego ludzie chcą całkowicie wymazać dysk, ponieważ zamierzają go wyrzucić. W takim przypadku, jeśli jeszcze tego nie zrobiłeś, możesz najpierw spróbować odzyskać dysk. Jeśli odczytasz blok i zwróci błąd we / wy, to następnym razem, gdy napiszesz w tym samym bloku, dysk spróbuje ponownie przydzielić inny blok z listy rezerwowej. Gdy lista rezerwowa zostanie zapełniona, podczas zapisywania wystąpią błędy we / wy. Właśnie wtedy naprawdę powinieneś wyrzucić dysk.
Możesz więc zrobić coś prostego, na przykład:
A następnie, aby przepisać złe bloki, po prostu coś takiego:
Jeśli to polecenie działa, jeśli jesteś odważny, możesz sformatować dysk i użyć go ponownie.
Alternatywnie możesz uruchomić
badblocks
polecenie na dysku dwa razy. Za drugim razem nie powinien zgłaszać żadnych złych bloków ...To potrwa dłużej, ale jest bardziej niezawodne.
Warto również zauważyć, że żadna z technik tak naprawdę nie wykonuje bezpiecznego wymazywania, z wyjątkiem
hdparm
polecenia. Pamiętasz te wszystkie złe klocki? Wciąż mają one w części nienaruszone niektóre z oryginalnych danych. Ekspert ds. Odzyskiwania danych może uzyskać do nich dostęp, aby zobaczyć niewielką część tego, co poprzednio znajdowało się na dysku twardym.Jeśli chodzi o ddrescue i dlaczego odradzam to, mam następujące antidotum:
Problem polega na tym, że zbyt dobre będzie ignorowanie błędów. Miałem dysk twardy, który konsekwentnie z dd spadał prędkość zapisu na poziomie około 102 GB i zacząłem generować błędy zapisu na poziomie 238 GB. Byłem pod dużym wrażeniem, że ddrescue nadal krąży po dysku ze stałą prędkością, nawet nie zgłaszając żadnych błędów. 17 godzin później, kiedy było na 1300 GB, kiedy zauważyłem, że samo światło dysku przestało migać. Szybka kontrola wykazała, że cała obudowa USB przeszła w tryb offline. Wyciągnąłem dysk z bazy. Zauważyłem, że ddrescue z radością zgłosił, że nadal kopiuje bez błędów, nawet z dyskiem w moich rękach. Podłączyłem dysk do innej maszyny i stwierdziłem, że jest to teraz cegła.
Nie winię ddrescue za to, że dysk stał się cegłą. Napęd zawodził i stał się cegłą. Po prostu uważam, że niepokojący ddrescue nawet nie podaje liczby błędów, ile błędów zapisu ignoruje. W tym zastosowaniu ddrescue pozostawia wrażenie, że zakończyło się pełnym sukcesem, niezależnie od wszystkich błędów zapisu. Faktem jest, że nie powinno być w stanie kontynuować z pełną prędkością na odcinku ze spowolnieniem. Powodem, dla którego sekcja była powolna, jest to, że dysk przeniósł wiele bloków, powodując wiele poszukiwań podczas uzyskiwania dostępu do tej sekcji. Jest to prawdopodobnie punkt, w którym wyniki ddrescue stały się fikcyjne.
źródło
prawdopodobnie zrobił dla mnie lewę.
Wspomniane
musi być do odczytu błędów (według strony podręcznika). Nie ma nic złego w połączeniu tych dwóch.
Moje pełne polecenie zerowania dysku wyglądało następująco:
W
bs=
niektórych przypadkach może być potrzebne dodanie niestandardowego .źródło
Jest to szybka i dojrzała metoda
sdd
.Jeśli chcesz zniszczyć całą zawartość, zadzwoń:
sdd -inull bs=1m of=/dev/rdsk/cXdXtXp0 -noerror
Zawsze używaj „surowego” interfejsu sterownika dysku.
Jeśli chcesz naprawić dysk i zachować jak najwięcej starej zawartości, zadzwoń:
sdd if=/dev/rdsk/cXdXtXp0 of=/dev/rdsk/cXdXtXp0 bs=1m -noerror
Spowoduje to zastąpienie wszystkich nieczytelnych bloków zerami na poziomie 512 bajtów. Możesz zmodyfikować liczbę ponownych prób poprzez
try=#
, domyślnie 2.Zauważ, że
sdd
jest szybszy niżdd
w przypadku błędów, ponieważ najpierw próbuje odczytać dostarczony rozmiar bloku, aw przypadku błędów odczytuje 512 bajtów. Jeśli wystąpią błędy odczytu, sdd dokonuje losowych prób, a atrapa czyta, aby uspokoić oprogramowanie układowe napędu.Funkcje ulepszonego odzyskiwania po błędzie zostały opracowane w latach 80., kiedy pracowałem dla drugiego największego producenta OEM Sun-Microsystems.
Kod źródłowy SDD jest zawarty w narzędziach Schily:
http://sourceforge.net/projects/schilytools/files/
źródło