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


10

Я перезаписываю свой жесткий диск случайными данными, используя старые добрые данные 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
Я использую номер записи? Это соответствует количеству записанных блоков?
Нафтули Кей

2
Количество блоков = общее количество байт / размер блока, теоретически это должно быть 238048755782/512 = 464938976, но у вас есть некоторые частичные записи, поэтому я бы вычел несколько блоков из числа, чтобы быть в безопасности, напримерseek=464938960
don_crissti

Ответы:


8

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


Я не знал о plainOpenдо сих пор. Большой! Закончил шифрование диска объемом 2 ТБ примерно за 4 часа вместо 256 ГБ при использовании более 12 /dev/urandom.
Нафтули Кей

3

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

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


0

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

Чтобы узнать, как далеко catон продвинулся , запустите lsof -p1234где 1234 - идентификатор catпроцесса.

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

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

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


0

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

В продолжение этого ответа из этой цепочки можно выполнить клонирование всего диска и возобновить его:

Этот пример оптимизирован для копирования с вращающегося диска со скоростью 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в том, сколько записей размера блока было полностью скопировано перед прерыванием. (записывает).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.