как использовать dd для заполнения диска с 1

Заполнение диска с / dev / urandom кажется очень медленным, поэтому я создал файл, заполненный FF:

dd if=/dev/zero ibs=1k count=1000 | tr "\000" "\377" >ff.bin 

Я хотел бы заполнить диск копиями этого файла, но следующая команда записывает только один раз:

 dd if=ff.bin of=/dev/sdb count=10000 

Как заполнить диск копиями файла, или есть более быстрый способ заполнить диск с помощью 1?

  • Почему dd считывает с устройства вывода?
  • Аргумент «искать» в команде dd
  • Используйте `dd` для вырезания концевой части файла
  • Может ли dd перезаписывать части файла?
  • dd записывает в CF с задержкой
  • Как предотвратить прогресс dd от бессмысленности в Linux?
  • Что делает dd, когда недостаточно свободного места
  • Клонирование и повторная установка SD-карты
  • 3 Solutions collect form web for “как использовать dd для заполнения диска с 1”

    Просто выполните:

     tr '\0' '\377' < /dev/zero > /dev/sdb 

    Он будет прерван с ошибкой, когда диск будет заполнен.

    Использование dd здесь не имеет смысла. Вы используете dd чтобы убедиться, что чтения и записи сделаны из определенного размера. Здесь нет причин делать это. tr будет читать / записывать 4 или 8 килобайт, что должно быть достаточно хорошим.

    Для более быстрой /dev/urandom альтернативы есть shred -v -n 1 (если псевдослучайно в порядке) или с использованием cryptsetup со случайным ключом и обнуление этого (для зашифрованных нулей). Даже без ускорения AES он легко превосходит /dev/urandom .

    Не знаете, как быстро tr , иначе вы могли бы просто dd if= | tr | dd of= dd if= | tr | dd of= dd if= | tr | dd of= .

    Использование файла в качестве источника шаблона может быть выполнено следующим образом:

     (while [ 1 ]; do cat file; done) | dd of=... 

    Хотя файл должен быть достаточно большим для того, чтобы он был удаленно эффективным.

    Если значение count= важно для вас, добавьте iflag=fullblock в команду dd . Возможны частичные чтения, которые приведут к тому, что частичные блоки будут считаться полными. Это особенно важно при использовании больших блоков (например, bs=1M ), которые вам нужны, если вы хотите скорость.

    Это очень быстрый и эффективный способ записи строк размером 64 кбайта 0xFF снова и снова, используя awk , потребляя <8% от ЦП и ограничиваясь только скоростью вашего диска.

    Я попытался использовать tr как было предложено здесь, и обнаружил, что это было болезненно медленным и потребляло много процессоров, переводящих каждый байт. Мой метод работает в блоках на 64 КБ и по крайней мере на 3,5 раза быстрее, чем одиночный байт на основе символов (26 Мбайт / с против 7 МБ / с на старом PATA hw – завершение за 52 минуты в тишине против 3 часов с громким вентилем охлаждения набирает обороты …). Мне нравится, когда люди очищают базовые знания в области информатики, даже не проверяя их мнение в первую очередь.

    Я рекомендую создать следующий скрипт с использованием printf из оболочки, а не пытаться записать его в vi поскольку большинство загрузочных компакт-дисков не даст вам достаточного пространства tmp для журнала буфера для копирования и вставки 65536 раз …

    1) Составить сценарий

     $ printf "echo | awk '{\n\twhile (1) {\n\t\tprintf(\"%%s\", \"" >/tmp/writeones.sh $ for i in `seq 1 65536`; do printf '\377' >>/tmp/writeones.sh; done $ printf "\");\n}\n}'\n" >>/tmp/writeones.sh 

    2) Проверьте скрипт:

     $ sh /tmp/writeones.sh | od -Ax -tx1 000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff * Ctrl+C 

    3) Запустите сценарий и трубу на свой диск с помощью dd (проверьте, что у вас есть правильный диск !!!):

     # sh /tmp/writeones.sh | dd of=/dev/ada0 bs=65536 & 

    Почему я выбрал 64 КБ? 1. Ограничить список списков AWK и 2. для моего оборудования, это обеспечивает максимальную скорость для меня. Я также попытался написать это только в оболочке с использованием printf и обнаружил, что она на 40% медленнее и потребляет 80% процессора из-за всех вилок.

    Interesting Posts
    Linux и Unix - лучшая ОС в мире.