Отредактировано: не запускайте это, чтобы проверить это, если вы не хотите уничтожить данные.
Может ли кто-нибудь помочь мне понять, что я получил?
dd if=/dev/zero of=/dev/sda bs=4096 count=4096
Q: Почему конкретно 4096 для
count
?dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr blockdev --getsz /dev/sda - 4096)
Q: Что именно это делает?
Ответы:
Это обнулит первые 16 МБ диска. 16 МиБ, вероятно, более чем достаточно, чтобы уничтожить любую структуру «начала диска», при этом она достаточно мала, чтобы это не заняло много времени.
blockdev --getsz
получает размер блочного устройства в «512 байтовых секторах». Таким образом, эта команда выглядит так, как будто она была предназначена для обнуления последних 2 МБ диска.К сожалению, эта команда имеет неправильный синтаксис. Я ожидаю, что команда была первоначально предназначена для
и галочки потерялись где-то вдоль линии людей, копирующих / вставляющих это между различными средами.
Старые таблицы разделов, метаданные LVM, метаданные raid и т. Д. Могут вызвать проблемы при повторном использовании диска. Обнуление разделов в начале и конце диска, как правило, позволяет избежать этих проблем, и при этом выполняется намного быстрее, чем обнуление всего диска.
источник
expr blockdev --getsz /dev/sda - 4096
будет синтаксическая ошибкаexpr
. Я думаю, что предполагаемая команда была...seek="$(expr "$(blockdev --getsz /dev/sda)" - 4096)"
. Или лучше:...seek="$(($(blockdev --getsz /dev/sda) - 4096))"
Это удалит первый
4096*4096=16MB
и последний512*4096=2MB
из вашего жесткого диска, которые содержат важные структуры, полезные для восстановления. Я предполагаю, что этот код был размещен злонамеренно.Я никогда не сталкивался с ситуацией, когда явное указание
count
другого1
было бы полезным. У меня есть стерта первый блок , если я хотел , чтобы убедиться , что я не оставляя никаких следов позади MBR ...источник
sda
. Скорееsdb
илиsdc
. Но я могу ошибаться, конечно ...Эти команды будут перезаписывать ваше устройство sda нулями - первая будет делать первые 16 МБ (размер блока 4096 и количество блоков 4096), а вторая перезапишет последние 2 МБ (размер блока 512 с 4096 блоками) нулями. (технически это не стирает, и это относится к моему первому пункту ниже.)
(эта часть уже упоминалась в других ответах, включая ее здесь для полноты)
Еще одна вещь, о которой стоит упомянуть, это то, что размер блока имеет свои эффекты, но они обычно наблюдаются только при операциях с большими объемами. Наиболее эффективный (самый быстрый) способ выполнить команду - если размер блока команды соответствует размеру доступа устройства, в противном случае время теряется.
Если вам интересно, вы можете попробовать создать файл с миллионами блоков из 1 блока и файл с миллионами блоков и увидеть разницу:
Как видите, размер блока оказывает огромное влияние на эффективность. Возможно, это боковая панель ОП, но я чувствую, что она все еще актуальна.
TL; DR: не выполняйте произвольный код, который вы найдете в сети, или который вам не доверяет. Это испортит твой день.
источник
Don't execute arbitrary code you find on the net
линиюДругие объяснили, что они делают, поэтому я пропущу это.
Смысл в
dd
разделенииbs
иcount
аргументации заключается в том, чтоbs
контролирует, сколько написано за раз . Указывая действительно большие значения для последней команды, но некоторые (я думаю, что 6-8 лет назад) они начали делать диски с размером блока 4096 байт, что делает лучший выбор для современных дисков.bs
потребует очень большого буфера в программе, а указание значений, меньших, чем размер блока устройства, будет медленным, поскольку ядро должно собрать целый блок для записи на устройство (в таких случаях это может возможно, буферизует записи до полного блока, в других случаях может потребоваться прочитать то, что уже есть на диске). Поскольку две команды используют разные значения дляbs
, это заставляет меня думать, что вы, возможно, нашли их на двух разных сайтах. Жесткие диски имели размер блока 512 байт, что соответствуетbs=512
bs=4096
источник
bs
гораздо выше, чем это . Одна команда SATA может читать или записывать несколько секторов, поэтому ядро объединяет операции ввода-вывода перед их отправкой. Никуда отbs=64k
доbs=1024k
Разумно (L3 размер кэша часто 4-8MiB). Я часто используюbs=128k
, что составляет половину размера кэша L2 на современных процессорах Intel. (dd
включает две операции memcpy: вread(2)
источнике from (даже если это / dev / zero) иwrite(2)
. IIRC,sdd
имеет возможность записывать нули, что позволит сэкономить немного процессорного времени. Действительно актуально только в том случае, если место назначения является чем-то кроме диска).iostat -x 4
или что-то еще и обратите внимание на столбцы rrqm / s (запросы на чтение, сливаемые в секунду) и wrqm / s.ВНИМАНИЕ:
dd if=/dev/zero of=/dev/
используется для очистки диска или устройства перед судебным копированием данных. Перед копированием информации из системы, находящейся под судебным расследованием, диск или устройство всегда необходимо продезинфицировать, чтобы уменьшить перекрестное загрязнение. Следовательно, это не плохая команда, конечный пользователь должен понимать, для чего она используется, иначе он уничтожит свои данные. Если это то, что вы хотите, то для проверки операции нулевой записи сделайтеdd if=/dev/sda | hexdump -C | head
.Источник: Практическое руководство по компьютерным криминалистическим исследованиям доктора Даррена Хейса.
источник
Я использую
dd if=/dev/zero of=/dev/sdX oflag=sync
для проверки качества вставленного USB-накопителя или карты MicroSD ДО того, как я на самом деле использую его с gparted, fdisk или dd с образом диска. Я думаю, что это разумная идея, особенно с носителями MicroSD, которые имеют плохую историю качества.Конечно, будьте осторожны с of = sdX, потому что нет случайного прощения при случайной очистке диска. Убедитесь, что X = буква диска предполагаемой цели.
источник