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