Все устройство вывода стирается независимо от того, кратен ли его размер размеру блока, который вы передаете в 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=$(/dev/sdX
Это должен быть комментарий, но у меня нет 50 очков репутации, поэтому я потеряю еще больше, опубликуйте этот комментарий как ответ:)
Если вы будете запускать этот скрипт каждые пять минут, ваш сервер может выключиться при загрузке еще до того, как вы сможете войти в систему. Так что не очень хорошая идея. Напишите системный таймер.