Повна копія DD з HD на HDD


34

ОРИГІНАЛЬНЕ ПИТАННЯ:

Якщо у мене є 2 однакових жорстких диска з такими характеристиками:

  • SATA 6,0 Гбіт / с
  • 5400 об / хв
  • 3 ТБ

Скільки часу потрібно провести повну копію DD?

Поки він працює вже 5 годин і все ще йде ...

Я використовую 64-бітний Linux Ubuntu 12.04, і команда, яку я використовую:

dd if=/dev/sdb of=/dev/sdc

ОНОВЛЕННЯ: 1

Зараз я бачу прогрес, і минуло 6+ годин для копіювання 430 Гб. Жорсткий диск 3TB ...

Чи немає швидшого способу зробити це?


ОНОВЛЕННЯ: 2

Це здається набагато краще, ніж раніше (Спасибі Groxxda за пропозиції):

sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128K

ЕТА становить близько 9 годин за 3 ТБ, тоді як до 630 ГБ він досяг через 6 годин, тож я здогадуюсь, що за попередньої команди минуло б близько 36 годин.


Спробуйте захопити статистику процесу: Надіслання сигналу USR1 до запущеного процесу 'dd' примушує його друкувати статистику вводу-виводу на стандартну помилку, а потім відновити копіювання. $ dd, якщо = / dev / zero of = / dev / null & pid = $! $ kill -USR1 $ pid Перевірте на своїй сторінці чоловіка фактичний сигнал, оскільки він відрізняється для різних реалізацій DD.
groxxda

@Groxxda, я не маю уявлення, як це зробити.
oshirowanen

1
GNU dd використовує SIGUSR1, а BSD dd використовуєSIGINFO
groxxda

Також що ви маєте на увазі під "підключеним до того ж сата кабелю"? Ви використовуєте якийсь множник порту? (Якщо ви досягнете швидкості передачі в 150 Мб / с, це займе у вас 5-6 годин, але я думаю, що половина цього є більш реалістичним.)
groxxda

1
Ви можете прискорити процес, вказавши інший (більший) розмір блоку ( bs=аргумент до dd). Також розгляньте можливість підключення кожного жорсткого диска до власного порта sata.
groxxda

Відповіді:


58

ddбуло корисно в старі часи, коли люди використовували стрічки (коли значення розмірів блоків були важливі) та коли простіші інструменти, такі як, catможливо, не були безпечними для бінарних файлів.

У наш час dd if=/dev/sdb of=/dev/sdcце просто складний, повільний спосіб написання тексту cat /dev/sdb >/dev/sdc. Незважаючи на те, що ddвона корисна для деяких відносно рідкісних завдань , вона набагато менш корисна, ніж кількість навчальних посібників, в яких згадується, що дозволить вам повірити. У магії немає dd, в чарі все /dev/sdb.

Ваша нова команда sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128Kзнову непотрібно повільна і складна. Дані зчитуються 128 кБ за один раз (що краще, ніж dd512B за замовчуванням, але не так добре, як навіть більші значення). Потім він проходить через дві труби, перш ніж писати.

Використовуйте більш просту і швидку catкоманду. (У деяких тестах, які я робив пару років тому під Linux, catбув швидшим, ніж cpдля копії між різними дисками, і cpбув швидшим, ніж ddпри будь-якому розмірі блоку; ddвеликий розмір блоку був трохи швидшим при копіюванні на один і той же диск.)

cat /dev/sdb >/dev/sdc

Якщо ви хочете виконати цю команду sudo, вам потрібно зробити переспрямування як корінь:

sudo sh -c 'cat /dev/sdb >/dev/sdc'

Якщо ви хочете отримати звіт про хід роботи, оскільки ви використовуєте Linux, ви можете легко отримати його, помітивши PID catпроцесу (скажімо, 1234) і переглянувши положення його вхідного (або вихідного) дескриптора файлу.

# cat /proc/1234/fdinfo/0
pos:    64155648 
flags:  0100000

Якщо ви хочете, щоб звіт про хід виконання, і ваш варіант Unix не забезпечує простий спосіб отримати позиції дескриптора файлу, ви можете встановити та використовувати pvзамість цього cat.


Що дивно з великими блоками, це те, що вузьким місцем є диск, і що робить catшвидше, ніж dd? Чи може це catвикористовувати кеш?
Еммануель

1
@Gilles, дякую за відповідь. У мене є ще п’ять накопичувачів 3 Тб, щоб клонуватись, і спробую наступний варіант cat. Наскільки я можу сказати, для виконання нової команди dd потрібно ще 3 години, а загалом - близько 11 годин. Якщо на другому HDD 3 ТБ швидше, ніж наближається кішка, я скористаюся цим методом для інших накопичувачів.
oshirowanen

2
@Gilles, тож, щоб отримати звіт про хід роботи, чи потрібно використовувати його sudo sh -c 'pv /dev/sdb >/dev/sdc'замість sudo sh -c 'cat /dev/sdb >/dev/sdc'?
oshirowanen

1
@oshirowanen Так, використовуйте pvтам, де ви б використовували cat.
Жиль "ТАК - перестань бути злим"

1
@unhammer Ні! Ви скопіювали б кожен з пристрою по одному, наприклад cat /dev/sdc1 >/dev/sdb1 && cat /dev/sdd1 >/dev/sde1. Об’єднання двох частин не має сенсу. Якщо ви хочете змінити структуру тома btrfs, змінити її з наявності двох підпунктів на один, вам потрібно використовувати інструменти btrfs для зміни структури, або так, як ви це робили для створення нової файлової системи з потрібною структурою та копіювання файлів .
Жил "ТАК - перестань бути злим"

7

ddза замовчуванням використовує дуже невеликий розмір блоків (512 байт). Це призводить до великих витрат (один read()і write()систематичний виклик на кожні 512 байти).

Це йде набагато швидше, коли ви використовуєте більшу величину блоку. Оптимальні швидкості починаються з bs=64kабо близько того. Більшість людей використовують ще більший розмір, bs=1Mтому він стає читабельним для людини (коли ddкажуть, що це скопійовано 1234 blocks, ви знаєте, що це 1234 MiBне робити математики). Використання ще більших розмірів блоку навряд чи призведе до покращення швидкості, просто більшого споживання пам'яті.

Отже команда повинна бути:

dd bs=1M if=/dev/sdb of=/dev/sdc

Якщо у вас вже є повільний ddхід, ви можете перервати його та відновити з більш швидким ddекземпляром. Для цього важливо знати, наскільки далеко вже просувалася копія. ddзазвичай друкує прогрес при його скасуванні, або ви можете надсилати йому USR1сигнал під час роботи, щоб він надрукував свій хід.

kill -USR1 $(pidof dd)

Наприклад, якщо воно скопійовано більше 1234MiB, ви можете відновити позицію, 1234MiBвикористовуючи:

dd bs=1M seek=1234 skip=1234 if=/dev/sdb of=/dev/sdc

Якщо його скопійовано менше 1234MiB, копія буде неповною. Якщо воно скопійовано більше 1234MiB, воно повторно скопіює деякі вже скопійовані частини, що зазвичай не приносить ніякої шкоди. Тож якщо ви сумніваєтесь, вам слід вибрати значення трохи менше, ніж те, що ви вважаєте, вже скопійоване.


5

Отримання статистики про процес, що триває в режимі dd

Ви можете використовувати killкоманду з відповідним сигналом, щоб зробити ddстатистику виводу до стандартної помилки.
На головній сторінці GNU dd:

Sending a USR1 signal to a running 'dd' process makes it print I/O statistics to standard error and then resume copying.
      $ dd if=/dev/zero of=/dev/null& pid=$!
      $ kill -USR1 $pid
      18335302+0 records in 18335302+0 records out 9387674624 bytes (9.4 GB)  copied,  34.6279 seconds, 271 MB/s

Переконайтеся, що ви спочатку перевірте правильність сигналу на своїй сторінці чоловіка, оскільки він може відрізнятися в різних реалізаціях dd: (BSD dd використовує SIGINFO).

Прискорення процесу

  1. Підключіть кожен жорсткий диск до власного порту SATA, щоб дані можна було прочитати з одного пристрою та записати на інший одночасно.
  2. Використовуйте відповідний розмір блоків, використовуючи bs=аргумент. Погляньте на цю тему на суперпопулярному і спробуйте деякі значення для себе.
  3. Використовуйте окремі ddвиклики для читання та запису та використовуйте трубу для їх з'єднання ( dd if=/dev/sda bs=1M | dd of=/dev/sdb bs=1M).
    Якщо ви це зробите та вкажете розмір блоку, переконайтеся, що ви використовуєте однаковий розмір блоку для кожного виклику.
  4. Ви можете спробувати інші оптимізації, як directаргумент.
  5. Переконайтесь, що ваші жорсткі диски не встановлені, інакше це може призвести до пошкодження копії.

0

Ви пробували "gparted"? Ви можете буквально скопіювати і вставити розділ з одного диска на інший і відповідно змінити його розмір. Ви отримуєте швидкість передачі та час, що залишився. Він використовує 'e2image' під ним для Linux-розділів.


0

Існує комерційне програмне забезпечення під назвою HDClone . Він ліцензується як безкоштовний, так і комерційний. Будь-яка версія може створити завантажувальний мандрівник або DVD, а також копіювати диски. Підключіть джерела та місце призначення HD та дотримуйтесь інструкцій на основі GUI.

Безкоштовна передаватиметься зі швидкістю близько 80 Мб / сек, тоді як платні версії можуть йти набагато швидше. Для файлових систем NTFS та FAT платні версії можуть бути налаштовані на клонування лише зайнятих бітів HD, що різко збільшує швидкість кожного клону.


(1) Ви пов’язані з цим продуктом? (2) Де ми можемо взяти його?
Скотт

1
Або ви можете просто використати "cat / dev / sdx> / dev / sdy" безкоштовно ...
HörmannHH
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.