Jak usunąć dysk twardy z nie dającymi się odczytać sektorami?

21

Mam twardy dysk, który się psuje. Chcę usunąć z niego dane przed wysłaniem ich do wymiany. Próbuję użyć dd if=/dev/zero of=/dev/sdXX, ale zatrzymuje się przy pierwszym błędzie zapisu. Jak mogę zastąpić dysk zerami, ignorując błędy zapisu? conv=noerrorwydaje się wpływać tylko na plik wejściowy.

TestUser16418
źródło
W bazie danych Debiana znajduje się raport o błędzie dotyczący tego zachowania, ale wygląda na to, że nie został jeszcze zaimplementowany.
Bobby,
Czy badblockszatrzymuje się także na błędach? Może mógłbyś z tym zrobić destrukcyjne pismo?
oktosiTe
Teraz zwróciłem również destrukcję, badblocksaby upewnić się, ile jest złych bloków, zanim zwrócę dysk w poniedziałek. Udało się również usunąć dysk, ale zajęło to prawie 50 godzin.
TestUser16418,

Odpowiedzi:

18

wypróbuj ddrescue zamiast dd - bardziej się stara z błędami

strumień
źródło
1
ddrescue pomyślnie usunął cały dysk, ignorując błędy zapisu. Dziękuję Ci bardzo.
TestUser16418,
15

Parametry, których użyłem z ddrescue, aby wymazać dysk /dev/sdb(wypełniony zerami z /dev/zero) i zapisać dane wyjściowe w pliku log.txt:

ddrescue --force /dev/zero /dev/sdb log.txt
Doug d.
źródło
Aby wyczyścić losowymi danymi, użyj: ddrescue --force / dev / urandom / dev / sdX tmp.log
Bastion
Skąd wiesz, kiedy to się skończy? Zrobiłem to i pozwoliłem mu działać przez około 20 minut i pozostało na 0,00% uratowanych. To dysk SSD NVMe ze złymi blokami, które próbuję usunąć ... narzędzie Samsung Secure Erase nie działało dla mnie.
user1960364
3

Jeśli chcesz tylko wyczyścić dysk, spróbuj dban

Ze strony:

Darik's Boot and Nuke („DBAN”) to samodzielny dysk rozruchowy, który bezpiecznie czyści dyski twarde większości komputerów. DBAN automatycznie i całkowicie usunie zawartość dowolnego dysku twardego, który może wykryć, co czyni go odpowiednim narzędziem do masowego lub awaryjnego niszczenia danych.

pbsmind
źródło
Chciałem to zasugerować.
qroberts,
3

Dla przypomnienia, dd ma również opcję conv=noerrorpomijania błędów. Jeśli masz błędy w pliku wejściowym, a gdy go nie używasz /dev/zero, powinieneś użyć conv=noerror,notrunclub conv=noerror,syncuniemożliwić dd obcięcie pliku wyjściowego tam, gdzie występują błędy w pliku wejściowym.

W przypadku zapytania możesz wypróbować następujące polecenie:

dd if=/dev/zero of=/dev/sdXX conv=noerror  

Aby przyspieszyć proces i potencjalnie uniknąć śmierci dysku w połowie kroku, możesz również spróbować zwiększyć rozmiar bajtu z domyślnej 512 (co powoduje, że dd odczytuje sektor po sektorze, co jest wolne) do czegoś większego, takiego jak 4K ( osiem razy większy):

dd if=/dev/zero of=/dev/sdXX bs=4K conv=noerror  

Uwaga: W przypadku większego rozmiaru bajtów pomijane błędy mogą pozostawić sekcje danych do odczytu nieco mniejszymi niż wybrany rozmiar bajtu, ale nadal jest mało prawdopodobne, aby ktokolwiek był w stanie uzyskać coś z tych sekcji po przepuszczeniu całego dysku przez proces.

Poza tym jestem pewien, że producenci dysków twardych właściwie pozbywają się dysków twardych, które są zwracane w celu wymiany gwarancyjnej, na wypadek, gdyby dysk ulegał awarii przed ukończeniem procesu nadpisywania.

czysta fuzja
źródło
man ddpokazuje „noerror” oznacza „kontynuuj po błędach odczytu”
Kevin Smyth
1

Zdecydowanie nie jest to rozwiązanie dla zaawansowanych użytkowników, ale jeśli błędy zapisu są rzadkie, możesz po prostu chcieć kontynuować ręcznie po ich wystąpieniu.

Możesz teoretycznie napisać skrypt, aby zrobić to automatycznie, ale nie jest to takie trywialne i wolałbym napisać narzędzie do załatwienia sprawy niż zawracać sobie głowę skryptami dd ..

   seek=BLOCKS
          skip BLOCKS obs-sized blocks at start of output
qdot
źródło
1
... lub użyj dd-rescue ...
Antti Haapala
... czy uchwyt dd-rescue poprawnie zapisuje błędy?
qdot