Całe urządzenie wyjściowe jest czyszczone bez względu na to, czy jego rozmiar jest wielokrotnością rozmiaru bloku, który przekazujesz, dd
czy nie.
notrunc
Flaga 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ć dd
i 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, dd
co sprawia, że lepiej nadaje się do zapisu na dysku. Magia jest w /dev
plikach. Każde narzędzie, które może poradzić sobie z danymi binarnymi, takie jak każdy nowoczesny cat
lub head
, może wykonać tę samą pracę, o dd
ile nie przekazujesz flag takich jak seek
lub skip
.
Należy zauważyć, że problem wspólne dd
i cat
to, ż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/partitions
pod 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