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

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

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

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

  • В чем разница между этими двумя командами dd?
  • Как узнать, когда команда 'dd' была завершена?
  • dd loop input Файл для вывода устройства?
  • Лучший способ удалить байты с начала файла?
  • Как наложить файл на нужный размер?
  • Как предотвратить прогресс dd от бессмысленности в Linux?
  • Я отслеживаю прогресс, используя простой цикл:

     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 , но на что я указываю, номер записи или количество байтов?

  • Аргумент «искать» в команде dd
  • В чем разница между этими двумя командами dd?
  • Как проверить прогресс при клонировании диска с помощью `dd`?
  • потерянный раздел dd
  • dd loop input Файл для вывода устройства?
  • Использование DD для копирования только половины (части) съемного устройства
  • 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 – смещение в байтах.

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