Все устройство вывода стирается независимо от того, кратен ли он размеру блока, который вы передаете, dd
или нет.
notrunc
Флаг не имеет никакого эффекта , если выходной файл устройство, так как усечение файл устройство не имеет никакого эффекта. Если бы вывод был обычным файлом, это привело бы к тому, что выходной файл не был обрезан перед записью, что в некоторых файловых системах означает, что старые данные перезаписываются (в отличие от записи новых блоков данных и оставления остальных неприкрепленными), однако это не будет полезно, так как это свойство не гарантируется всеми файловыми системами, и, кроме того, команда не только перезапишет файл, но и продолжит запись, пока он не заполнит выходной диск (или не произойдет какая-либо другая ошибка).
Вместо того, чтобы использовать dd
и беспокоиться о том, используете ли вы его правильно (как это происходит, это работает в данном конкретном случае, но это сложно и иногда не работает ), просто используйтеcat
.
cat /dev/zero >/dev/sdX
Несмотря на распространенное мнение в Интернете, в этом нет абсолютно никакой магии, dd
которая делает его более подходящим для записи на диск. Магия в /dev
файлах. Любой инструмент, который может работать с двоичными данными, например любой современный cat
или head
, может выполнять ту же работу, что и dd
вы, если вы не передаете такие флаги как seek
или skip
.
Обратите внимание, что проблема разделяется dd
и cat
заключается в том, что при успешной работе они выдают ошибку «Нет места на устройстве» (ENOSPC). Если вы поместите это в скрипт, вам нужно будет либо проверить, что это ошибка ENOSPC, либо использовать другой метод. Более надежный метод заключается в том, чтобы сначала определить размер устройства (например, с использованием /proc/partitions
Linux), а затем записать точное количество байтов с помощью такого инструмента, как head
.
size=$(</proc/partitions awk '$4 == "sdX" {print $3}')
head -c "${size}k" /dev/zero >/dev/sdX