Відновлення 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
Чи використовую я номер запису? Чи дорівнює це підрахунку записаного блоку?
Naftuli Kay

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.
Нафтулі Кай

4

Просто нагадування для людей , які хотіли б скопіювати , а не тільки рандомізації дисків (який не є , що об'єднує): ви можете використовувати , 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 об / хв на SSD в певну систему. 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.