опция dd command bs в конце диска

10

Если бы я использовал ddкоманду следующим образом:

dd if=/dev/zero of=/dev/sdX bs=16M

Что происходит в конце диска, если он не кратен 16M? Означает ли это, что последняя оставшаяся часть диска не обнуляется?

Я заметил в https://www.marksanborn.net/howto/wiping-a-hard-drive-with-dd/ , он пишет, что правительство США использует

dd if=/dev/urandom of=/dev/sda bs=8b conv=notrunc

Есть conv=notruncвариант способ гарантировать , что каждый последний байт вытирают?


источник

Ответы:

12

Все устройство вывода стирается независимо от того, кратен ли он размеру блока, который вы передаете, 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
Жиль "ТАК - перестань быть злым"
источник
8

Нет проблем - 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если это просто начало с нуля, а не принудительное избавление от всего, что вы когда-либо хранили на диске.

frostschutz
источник