Ваш пользователь должен иметь, по крайней мере, разрешения на запись и выполнение в целевой директории любым способом (т.е. если ваш пользователь является владельцем, по крайней мере, разрешения 300
, если ваш пользователь не является владельцем, но входит в группу, по крайней мере, разрешения 030
, и если ваш пользователь не является владельцем и не входит в группу, по крайней мере, разрешения 003
)
Ваш пользователь должен иметь, по крайней мере, разрешения на чтение и выполнение в исходном каталоге любым способом (т.е. если ваш пользователь является владельцем, по крайней мере, разрешения 500
, если ваш пользователь не является владельцем, но входит в группу, по крайней мере, разрешения 050
, и если ваш пользователь не является владельцем и не входит в группу, по крайней мере, разрешения 005
)
Причина, по которой ему необходимо иметь разрешение на запись (в первом случае) и разрешение на чтение (во втором случае), довольно очевидна; Причина, по которой необходимо иметь права на выполнение в обоих случаях, заключается в том, что для записи / чтения файлов необходимо иметь доступ к каталогу, который разрешен только в том случае, если пользователь имеет права на выполнение на целевой каталог / исходный.
Все устройство вывода стирается независимо от того, кратен ли его размер размеру блока, который вы передаете в 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
Нет проблем — dd
записывает в самый конец (No space left on device
), если не исчерпан ввод, ограничен count=x
или возникает другая ошибка (, например. плохие сектора, плохой кабель и т. д. ).
Если вашей целью является перезапись всего блочного устройства, проще использовать shred
.
shred -v -n 1 /dev/deleteme # pseudorandom data
shred -v -n 0 -z /dev/deleteme # zeroes
Илиcryptsetup
для случайных данных с шагом проверки (нули шифруются в случайные данные; случайные данные расшифровываются до нуля ).
илиblkdiscard
для твердотельных накопителей.
Или wipefs
, если речь идет о том, чтобы начать с нуля, а не о принудительном избавлении от всего, что вы когда-либо хранили на диске.