Возобновление DD всего диска

Я переписываю свой жесткий диск со случайными данными, используя старый добрый dd :

 dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512 

Это массив 2 ТБ, и мой MacBook (работает под Linux, нормально?) Может записывать только данные со скоростью около 3,7 МБ / с, что довольно жалко, поскольку я видел, что мой рабочий стол дома составляет 20 МБ / с. Когда я пойду домой сегодня вечером, я хотел бы остановить работу dd здесь, взять его домой и посмотреть, какой прогресс можно сделать за одну ночь с более мощной машиной.

Я отслеживаю прогресс, используя простой цикл:

 while true; do kill -USR1 $PID ; sleep 10 ; done 

Результат выглядит следующим образом:

 464938971+7 records in 464938971+7 records out 238048755782 bytes (238 GB) copied, 64559.6 s, 3.7 MB/s 

Если бы я возобновил прохождение dd дома, как бы перезапустить его? Я знаю параметр seek , но на что я указываю, номер записи или количество байтов?

3 Solutions collect form web for “Возобновление DD всего диска”

Поскольку @don_crissti уже прокомментировал, просто используйте seek= для возобновления.

 dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512 seek=464938971 

GNU dd также поддерживает поиск в байтах, так что вы можете точно вернуться, независимо от блока:

 dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=1M \ seek=238048755782 oflag=seek_bytes 

Больший размер блока должен поддерживать скорость даже для медленного устройства, например /dev/urandom .

Если вы ищете более быстрые альтернативы, вы можете cryptsetup plainOpen со случайным ключом и ноль, что он должен бить /dev/urandom на порядок (без AES-NI) или даже работать на полной скорости (с AES-NI) ,

Вы также можете использовать shred -n 1 если псевдослучайные данные достаточно хороши для вашего прецедента. shred должно иметь возможность использовать полную скорость диска даже на очень медленной машине.

Просто напоминание для людей, которые хотели бы скопировать, а не просто случайные диски (что не так часто): вы можете использовать skip=BLOCKS чтобы начать чтение в правильном положении, и seek=BLOCKS чтобы начать писать в правильной позиции. Оба варианта используют блоки, а не байты. При разрыве / перезапуске рекомендуется на всякий случай удалить кучу блоков. Обычно стоит повысить значение bs выше 512, так как вы можете достичь более высокой производительности, если будете читать много данных подряд.

В вашем случае это действительно значение блока, которое вам нужно передать для seek . Может быть, вы должны попытаться настроить bs чтобы узнать, можете ли вы увеличить скорость, так как /dev/random следует быстро (псевдослучайно и не блокировать, если нет энтропии)

dd с небольшим размером блока, например 512 байтов, скорее всего, будет намного медленнее, чем максимальная пропускная способность вашего диска. Используйте более высокий размер блока (по догадке, я бы сказал, несколько МБ) для хорошей производительности. Или используйте cat on Linux. Я обнаружил, что cat была такой же быстрой, как dd с оптимальным размером блока, когда был задействован один диск (я не знаю, подходит ли это для OSX).

Чтобы найти, как далеко дошла cat , запустите lsof -p1234 где 1234 – это идентификатор процесса процесса cat .

Чтобы возобновить работу с позиции, используйте

 { dd bs=1 seek=123456; cat /dev/urandom; } >/dev/disk/… 

где 123456 – смещение в байтах.

  • Чтение только 1 ГБ с использованием команды dd
  • В чем разница между этими двумя командами dd?
  • Почему dd из / dev / urandom останавливается раньше?
  • Как узнать, когда команда 'dd' была завершена?
  • Клонирование и повторная установка SD-карты
  • как использовать dd для заполнения диска с 1
  • Что делает dd, когда недостаточно свободного места
  • dd loop input Файл для вывода устройства?
  • Как проверить прогресс при клонировании диска с помощью `dd`?
  • Использование DD для копирования только половины (части) съемного устройства
  • Может ли dd перезаписывать части файла?
  • dd записывает в CF с задержкой
  • Linux и Unix - лучшая ОС в мире.