polecenie dd opcja bs na końcu dysku

10

Gdybym miał użyć ddpolecenia w następujący sposób:

dd if=/dev/zero of=/dev/sdX bs=16M

Co stanie się na końcu dysku, jeśli nie będzie to dokładna wielokrotność 16M? Czy to oznacza, że ​​ostatnia pozostała część dysku nie jest wyzerowana?

Zauważyłem w https://www.marksanborn.net/howto/wiping-a-hard-drive-with-dd/ , pisze, że rząd USA używa

dd if=/dev/urandom of=/dev/sda bs=8b conv=notrunc

Czy conv=notruncopcja jest sposobem na wyczyszczenie każdego ostatniego bajtu?


źródło

Odpowiedzi:

12

Całe urządzenie wyjściowe jest czyszczone bez względu na to, czy jego rozmiar jest wielokrotnością rozmiaru bloku, który przekazujesz, ddczy nie.

notruncFlaga nie ma znaczenia, gdy wyjście jest plikiem urządzenia, bo obcinanie plik urządzenia nie ma wpływu. Jeśli dane wyjściowe były zwykłym plikiem, spowodowałoby to, że plik wyjściowy nie byłby obcinany przed zapisem, co w niektórych systemach plików oznacza, że ​​stare dane są nadpisywane (w przeciwieństwie do zapisywania nowych bloków danych i pozostawiania nieprzyłączonych), nie byłoby to jednak użyteczne, ponieważ ta właściwość nie jest gwarantowana przez wszystkie systemy plików, a ponadto polecenie nie tylko nadpisuje plik, ale także kontynuuje zapis, dopóki nie zapełni się dysku wyjściowego (lub wystąpi inny błąd).

Zamiast używać ddi martwić się, czy używasz go poprawnie (tak się składa, działa w tym konkretnym przypadku, ale jest skomplikowany i czasami nie działa ), po prostu użyjcat .

cat /dev/zero >/dev/sdX

Pomimo powszechnego przekonania w Internecie, nie ma w tym absolutnie żadnej magii, ddco sprawia, że ​​lepiej nadaje się do zapisu na dysku. Magia jest w /devplikach. Każde narzędzie, które może poradzić sobie z danymi binarnymi, takie jak każdy nowoczesny catlub head, może wykonać tę samą pracę, o ddile nie przekazujesz flag takich jak seeklub skip.

Należy zauważyć, że problem wspólne ddi catto, że na udanej operacji, oni się z błędu „No lewo na urządzenie przestrzeni” (ENOSPC). Jeśli umieścisz to w skrypcie, albo musisz sprawdzić, czy błąd to ENOSPC, albo użyć innej metody. Bardziej niezawodną metodą jest najpierw określenie rozmiaru urządzenia (np. Używanie /proc/partitionspod Linuksem), a następnie zapisanie dokładnie odpowiedniej liczby bajtów za pomocą narzędzia takiego jak head.

size=$(</proc/partitions awk '$4 == "sdX" {print $3}')
head -c "${size}k" /dev/zero >/dev/sdX
Gilles „SO- przestań być zły”
źródło
8

Nie ma problemu - ddzapisuje do samego końca ( No space left on device), chyba że zabraknie danych wejściowych, zostanie ograniczony przez count=xlub wystąpi inny błąd (np. Złe sektory, kiepski kabel itp.).

Jeśli Twoim celem shredjest zastąpienie całego urządzenia blokowego, jest łatwiejsze w użyciu.

shred -v -n 1 /dev/deleteme     # pseudorandom data
shred -v -n 0 -z /dev/deleteme  # zeroes

Lub cryptsetupw przypadku danych losowych z krokiem weryfikacji (zera są szyfrowane do danych losowych; dane losowe są odszyfrowywane z powrotem do zer).

Lub w blkdiscardprzypadku dysków SSD.

Lub wipefsjeśli chodzi tylko o to, aby zacząć od nowa od zera, a nie siłą pozbywać się wszystkiego, co kiedykolwiek zapisałeś na dysku.

frostschutz
źródło