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

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

решение1

Как уже прокомментировал @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Должна быть возможность использовать полную скорость диска даже на очень медленной машине.

решение2

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

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

решение3

Клонирование диска:

Расширяя наэтотответ из этой ветки, вот как можно клонировать целый диск и возобновить работу:

Этот пример оптимизирован для копирования с роторного диска со скоростью вращения 5400 об/мин на твердотельный накопитель в определенной системе. gddпредставляет собой GNU dd:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' bs=4M status=progress
247426187264 bytes (247 GB, 230 GiB) copied, 2082 s, 119 MB/s
59012+0 records in
59011+0 records out
247510073344 bytes (248 GB, 231 GiB) copied, 2082.92 s, 119 MB/s

Я могу продолжить это двумя способами:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=59011 skip=59011 \
status=progress

Или:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=247510073344 skip=247510073344 \
oflag=seek_bytes iflag=skip_bytes \
status=progress

В первом примере мы используем , 59011а не 59012, потому что 59011это количество записей размером с блок было полностью скопировано до того, как было прервано (записи закончились).

решение4

Если можете, используйте

#ddrescue from to logfile
ddrescue /dev/sda /dev/sdb logfile

Не включайте log-файл ни в from, ни в to... и если вам придется нажать ctrl-c или что-то еще, ddrescue прочитает свой log-файл и автоматически возобновит работу. Он также копирует все easy-файлы в первую очередь, и поскольку он может возобновить работу из log-файла, вы можете сказать ему "вернуться и постараться получше" для остальных.

Связанный контент