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.


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


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

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.


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.


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

1
... lub użyj dd-rescue ...
Antti Haapala

... czy uchwyt dd-rescue poprawnie zapisuje błędy?
qdot
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.