Dlaczego GNU jest niszczone szybciej niż dd podczas wypełniania dysku losowymi danymi?

8

Zauważyłem, że bezpiecznie usuwając dysk twardy przed wycofaniem z eksploatacji, dd if=/dev/urandom of=/dev/sdazajmuje to prawie cały dzień, podczas gdy shred -vf -n 1 /dev/sdana tym samym komputerze i na tym samym dysku zajmuje tylko kilka godzin.

Jak to jest możliwe? Myślę, że wąskim gardłem jest ograniczona wydajność /dev/urandom. Czy shred używa generatora pseudolosowego, który jest mniej przypadkowy i wystarcza tylko do jednego celu (tj. Bardziej wydajny) niż urandom?


źródło
Należy pamiętać, że najlepszą opcją do wymazywania dysków, zwłaszcza dysków SSD, jest polecenie bezpiecznego wymazywania SATA. Każda inna opcja - z wyjątkiem zniszczenia - zawiedzie. Jest także znacznie szybszy i może zająć kilka sekund na dysku SSD.
Maarten Bodewes

Odpowiedzi:

11

Shred używa wewnętrznego generatora pseudolosowego

Domyślnie te polecenia używają wewnętrznego generatora pseudolosowego zainicjowanego niewielką ilością entropii, ale można polecić użycie zewnętrznego źródła z opcją --random-source = plik. Zgłaszany jest błąd, jeśli plik nie zawiera wystarczającej liczby bajtów.

Na przykład plik urządzenia / dev / urandom może być użyty jako źródło losowych danych. Zazwyczaj to urządzenie gromadzi hałas otoczenia ze sterowników urządzeń i innych źródeł do puli entropii i używa puli do generowania losowych bitów. Jeśli w puli brakuje danych, urządzenie ponownie wykorzystuje wewnętrzną pulę do wygenerowania większej liczby bitów, używając kryptograficznie bezpiecznego generatora liczb pseudolosowych. Należy jednak pamiętać, że to urządzenie nie jest przeznaczone do masowego generowania losowych danych i jest stosunkowo wolne .

Nie jestem przekonany, że losowe dane są bardziej skuteczne niż jednym przejściu od zera (lub dowolnej innej wartości bajtów) w przesłaniając wcześniejsze zawartość.

Aby bezpiecznie wycofać napęd z użycia, używam dużego magnesu i dużego młotka.

RedGrittyBrick
źródło
2

Myślę, że byłoby to spowodowane raczej ddużyciem mniejszych porcji do zapisu danych. Spróbuj dd if=... of=... bs=(1<<20)sprawdzić, czy działa lepiej.

jpalecek
źródło
Spróbuję to przy następnej okazji i opublikuję wyniki.
+1 Domyślny ddrozmiar bloku to 512. Działał on znacznie poniżej limitów dysku na moim komputerze.
Piotr Findeisen
/ dev / urandom jest prawdopodobnie dość szybki - rozmiar bloku dd jest prawie na pewno problemem.
Dan Pritts,
2
Gdy zwiększysz rozmiar bloku, wygląda na to, że /dev/urandommoże stać się wąskim gardłem - testuję niektóre dyski SSD przez USB 3.0 i za pomocą tego samego ddpolecenia if=/dev/zeroif=/dev/urandom
uzyskuję