Як би я прискорив повний диск dd?


62

Я роблю ddна двох однакових дисках з цією командою:

 dd if=/dev/sda of=/dev/sdb bs=4096

Обидва жорсткі диски точно однаковий номер моделі, і в обох є 1 ТБ місця для зберігання. /dev/sda використовує блочний розмір 4096. /dev/sdaє локальним накопичувачем та /dev/sdbвіддаленим кадді. Можливо, я можу використовувати такі протоколи:

  • USB2.0 HighSpeed ​​(на даний момент план)
  • Клон Gigabit Over-The Network (Дійсно, навіть не хочу цього пробувати)
  • USB3.0 (якщо я знайду іншого свого диска-диска)
  • eSATA (Якщо я знайду / придбаю кабель)
  • SATA (Якщо я знайду / куплю кабель, треба любити компакт-диски для ноутбуків)

Чи є спосіб запустити цю копію диска, яка займає менше 96 годин? Я відкритий для використання інших інструментів, крім dd.

Мені потрібно клонувати наступні розділи (включаючи UUID)

  • Розділ Fat32 EFI (*)
  • Розділ Windows NTFS (*)
  • Розділ HFS + OSX
  • Розділ Ubuntu EXT4 (*)
  • Поміняти розділ (*)

* Підтримується Clonezilla


Я спробував Clonezilla (і це було набагато швидше), але він не підтримує HFS + смарт-копіювання, яке мені потрібно. Можливо, це підтримує найновіша версія?

Коли я зробив перший клон, я зробив усі розділи, окрім HFS +, і це пішло дуже швидко. (Всього не більше 3 годин)


1
Вам, напевно, краще використовувати щось на кшталт клонезілла. ddкопіює все , включаючи вільний простір. Недоліки стають надзвичайно очевидними, коли у вас є великі диски, які не повністю наповнені.
Борис Павук

Чи можливо придбати кабель SATA та тимчасово підключити зовнішній диск до порту SATA на материнській платі?
Марк Плотнік

Можливо, хтось може розібратися в наступному: Як щодо клонування таблиці розділів (використовуючи клонезілу або dd), використовуючи Clonezilla для клонування всіх розділів, крім HFS +, і використовувати dd для цього одного розділу? Це було б можливо?
Олександр

@Alexander Саме так я зробив свій перший клон.
Каз Вулф

1
@LuisAlvarado Я щойно почав клонування, чоловіче!
Kaz Wolfe

Відповіді:


68

На мій досвід, я не думаю, що в командному рядку є щось швидше як dd. Налаштування bsпараметра може збільшити швидкість, наприклад, у мене є 2 HDD, на які я знаю, швидкість читання / запису перевищує 100 Мб / с, тому я роблю це:

dd if=/dev/sda of=/dev/sdb bs=100M

Є також pv(Потрібно встановити спочатку), який перевіряє швидкість на обох накопичувачах, а потім переходить до клонування. Це потрібно зробити, звичайно, з кореня:

pv < /dev/sda > /dev/sdb

З PV я отримав 156 Мб / с

Приємно, що pvкрім швидкості, це те, що він показує прогрес, поточну швидкість, час, коли він почався, і ETA. Щодо HFS +, я б не знав, я просто намагаюся допомогти на «швидкості». З pvабо дуже оптимізованим bsпараметром ви можете зробити диск на 4 ТБ менше ніж за 7 годин (6 годин 50 хвилин зі швидкістю струму 150 Мб / с).

введіть тут опис зображення

Я зробив пару тестів із типом підключення, яким ви користувалися, та іншими, які я мав у наявності. Я використовував Asus Z87 Pro та Intel DZ68DP. Це були мої результати, але спочатку ми повинні знати, що теоретичні швидкості для багатьох швидкостей передачі (Сирі швидкості) - це саме те, теорія . Здійснюючи реальні тести, було виявлено, що вони становлять від 40% до 80% цієї швидкості. Ці тести можуть змінюватися залежно від використовуваного пристрою, типу підключення, материнської плати, типу підключення кабелю, типу файлової системи тощо. Зважаючи на це, це те, що я отримав (я протестував лише швидкість запису на пристрій, читання зазвичай вище):

Connected Device  -  Connection Type  -  Speed (Write Speed)
  USB 2.0                 USB 2.0              25 MB/s
  USB 3.0                 USB 2.0              35 MB/s
  USB 3.0                 USB 3.0              73 MB/s
  eSata                   eSata                80 MB/s
  Sata 2G HDD             Sata 2G              120 MB/s
  Sata 3G HDD             Sata 2G              140 MB/s
  Sata 3G HDD             Sata 3G              190 MB/s
  Sata 2G SDD             Sata 2G              170 MB/s
  Sata 3G SDD             Sata 2G              210 MB/s
  Sata 3G SDD             Sata 3G              550 MB/s 

3
відправити сигнал USR1, щоб отримати прогрес ДД. Недоліком dd є те, що він копіює вільний простір.
jfs

1
На мій досвід, коригування bsпараметра може зробити так ddсамо швидко cat. Ви можете також використовувати catв першу чергу.
Жиль

3
pvсама по собі працює дуже добре.
Каз Вулф

11
Ви можете використовувати dd, щоб виконати роботу, але вставити pv у ланцюг для контролю швидкості передачі так:dd if=/dev/sda1 | pv | dd of=/dev/sdb1
thomasrutter

4
Я завжди використовував pvміж ddс. Ніколи не знав, що його можна використовувати окремо!
korylprince

12

Щоб скопіювати розділ оптом, використовуйте catзамістьdd . Нещодавно я проводив орієнтири , копіюючи великий файл, а не розділ, між двома дисками (на одному диску один і той же час відрізняються):

dd bs=64M    51.3
dd bs=1M     41.8
dd bs=4k     48.5
dd bs=512    48.9
cat          41.7
cp           45.3

Висновок з цього орієнтиру полягає в тому, що вибір розміру блоку для ddпитань (але не дуже багато) і catавтоматично знаходить найкращий спосіб зробити швидку копію: ddможе лише сповільнити вас. При невеликому розмірі блоку ddвитрачається час, втрачаючи крихітні читання та записи. При великому розмірі блоку один диск залишається в режимі очікування, а другий читає чи пише. Оптимальна швидкість досягається, коли один диск читає, а інший пише.

Щоб скопіювати розділ, скопіюйте файли, можливо, швидше cp -a. Це залежить від того, скільки файлів існує і скільки файлової системи вільного місця. Копіювання файлів має накладні витрати, приблизно пропорційні кількості файлів, але, з іншого боку, копіювання вільного простору витрачає час.

Максимальна швидкість передачі даних для USB2 - трохи менше 50 Мб / с, що працює на передачу 1 ТБ до 6–7 годин. Це передбачає достатньо швидкий жорсткий диск для насичення шини USB; Я думаю, що швидші диски 7200 об / хв можуть це зробити, але 5900 об / хв можуть бути не такими швидкими (можливо, вони призначені для лінійних записів?).

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


Я намагаюся скопіювати весь диск.
Каз Вулф

Я очікую, що різниця буде однаковою, але запускайте орієнтир у вашій системі, щоб отримати більш надійні дані.
Жиль

Можна catвикористовувати для dd if=ubuntu.iso of=/dev/usb? ddШвидкість для цього на USB2 або USB3 розчаровує повільно.
Oxwivi

1
@Oxwivi Так, cat ubuntu.iso >/dev/usbрівнозначно. У цьому немає ніякої магії dd, це лише інструмент для копіювання своїх даних на свій вихід.
Жиль

Наведена вище команда cat не працювала на mac. Я спробував sudo cat linuxmint-17.3-cinnamon-64bit.iso >/dev/disk1Дав назад "-bash: / Dev / disk1: Відмовлено в доступі"
Най

12

Проблема - ваш тип підключення та розмір блоку. Для найшвидших результатів розмір блоку повинен бути половиною найменшої швидкості запису, яку ви зазвичай отримуєте. Це дасть вам надійний запас, але все ж дозволить отримати велику кількість; звичайно, вам потрібно мати достатню кількість оперативної пам'яті, щоб зберігати дані.

Usb 2.0 - 12 мегабіт в секунду (Mbps), Usb 2.0 High Speed ​​- 480 Mbps. Це, звичайно, сира швидкість; з 8 бітами в байті та обрамленням накладних витрат, зручна швидкість в МБ / с зазвичай є десятковою комою. Так, наприклад, 480 сирих, стає 48 Мб придатним для використання. Майте на увазі, що це найкраще з математики, в реальному світі воно буде трохи нижче. Для високошвидкісних з'єднань USB 2.0 ви повинні очікувати десь близько 30-35 Мбіт максимальної швидкості запису, за умови, що фактичний запам'ятовуючий пристрій може зрівняти або перевершити швидкість з'єднання.


6
Пристрій заниження: Висока швидкість USB2.0 становить 480 Мбіт / с = 60 Мбіт / с, швидкість сировини. Корисна швидкість - це не десяткове місце після, а навпаки, приблизно 80% від необмеженої швидкості. Правильна величина "фактична швидкість в Мбіт / с становить 1/10 швидкості необробленої в Мбіт / с" є дійсною, хоча
jpa

5

Я погоджуюсь, що необмежена швидкість налаштованої команди dd('pv') або команди 'cat' важко перемогти, але якщо з копією є проблеми (поганий сектор, вимкнення електроенергії, помилка користувача тощо), вам доведеться почати над.

Я хотів би запропонувати ddrescue - інструмент FOSS, який має всю швидкість dd, але він буде працювати над помилками на диску та відновитись у більш пізній момент, якщо буде збій.


2

Я переміщую Windows 7 з жорсткого диска на SSD і знайшов цю та деякі інші відповіді ... Щось я дізнався, що може допомогти іншим. У моєму випадку вихідний привід більший, інакше я працював би на рівні пристрою / dev / sda -> / dev / sdb.

Win7 і його 3 розділи ... Я використовував живий компакт-диск Xbuntu 14.04 на usb. Вискочив DVD із комп’ютера win і поставив SSD на своє місце. Встановив partclone і спробував це:

partclone.ntfs -b -N -s /dev/sda3 -o /dev/sdb3

Partclone вивів на ntfs, що потребує запуску chkdisk у Windows, тому швидке виправлення отримало задоволення від partclone:

ntfsfix -b /dev/sda3
ntfsfix -d /dev/sda3

Усі команди виконуються як корінь. Користувацький інтерфейс partclone ncurses (опція -N) заявив, що передача становила 7 ГБ / хв і закінчилася 5 Гб / хв, що дорівнює 83 МБ / сек. Значна частина - це те, що частковий клон не копіює невикористаний простір, тому це зробило клон надзвичайно швидким.

Додатковий потенціал gotchyas:

  • якщо раніше був використаний накопичувач, який ви переносите, він може мати залишки GPT. Заводські установки Windows 7 зазвичай є таблицями розділів msdos / mbr. Вам потрібно буде видалити фрагменти GPT з цільового диска. Цей Quater Unix та Linux допоміг мені в цьому. Ви повинні використовувати gdiskна пристрої, використовувати x потім z і так, щоб запам’ятовувати дані GPT і переконайтесь, що ви зберігаєте MBR.

  • І не забувайте, якщо ви не робите пристрою рівня DD, вам потрібно буде скопіювати MBR, використовуючи,
    dd if=/dev/sdb of=/dev/sda bs=446 count=1
    де sdb є вихідним або старим накопичувачем, а sda - це призначення або новий диск ( джерело )


1

Нещодавно я створював образ 100 ГБ розділу (HDD) і записую його на новий диск SSD.

Ось порада, яка може різко прискорити процес :)

Розбийте файл на менші частини (чим більший файл, тим повільніше він працює)

sudo dd if=/dev/sda3 conv=sync,noerror bs=2M | split -a 3 -d -b 1G - /maindisk.img

Під час процесу ви можете перевірити швидкість, використовуючи (в окремому терміналі)

pgrep -l '^dd$' #to find PROCESSID
kill -USR1 PROCESSID #to check the speed

Тоді, коли у вас є каталог з файлами результатів (maindisk.img000, maindisk.img001 тощо), використовуйте

sudo cat maindisk.img* | sudo dd of=/dev/sda1

щоб 'записати' зображення в новий розділ SSD (розділ повинен бути такого ж розміру, як і старий)

Для мене це працювало в луо швидше звичайного способу (без розщеплення). Середня швидкість створення зображення становила ~ 13 Мб / с. Коли я використовую "звичайний" спосіб, він починається з ~ 15 Мб / с, а потім зменшується до 1 МБ / с.


1
Чому б повільніше писати один великий файл замість кількох менших файлів? Який тип цільової файлової системи та її прапорці монтажу?
Девід Фоерстер

Також conv=syncє згубним для продуктивності та досить марним у цьому випадку використання.
Девід Фоерстер

0

Для тих, хто знайде цю тему, набагато простіше і швидше просто використовувати інструмент, призначений для відновлення даних, як-от ddrescue . Він намагається спочатку врятувати хороші частини у випадку помилок читання. Також ви можете будь-коли перервати порятунок і відновити його пізніше в той же момент.

Виконати його двічі:

Перший раунд скопіюйте кожен блок без помилки читання та запишіть його на файл Rescue.log.

sudo ddrescue -f -n /dev/sdX /dev/sdY rescue.log

Другий раунд, скопіюйте лише погані блоки та спробуйте прочитати 3 рази з джерела, перш ніж здаватися.

sudo ddrescue -d -f -r3 /dev/sdX /dev/sdY rescue.log

Тепер ви можете встановити новий диск і перевірити файлову систему на наявність корупції.

Докладніше:
https://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html


0

Я рекомендую вхід / читання - файл / диск бути на SATA, щоб підвищити швидкість читання. Висока швидкість USB 2.0 теж хороша, тому що я отримую середню швидкість 33816 кб / с при DDrescue порівняно з тим, коли в 2014 році було встановлено USB 2.0 для SATA у 2014 kb / s


0

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

Для вимірювання швидкості в різних розмірах блоків використовуйте наступний bashсценарій:

  • встановити $devна пристрій
  • зафіксуйте cbtotalпринаймні 5x очікувану швидкість читання
    (set -o errexit; skip=0; cbtotal=$((120*1024**2)); bs=256;
    for power in `seq 10`; do
      bs=$((bs*2)); skip=$((skip/2)); count=$((cbtotal/bs));
      if [ "$count" -lt 1 ]; then break; fi;
      echo $bs;
      dd if=$dev of=/dev/null skip=$skip bs=$bs count=$count
      skip=$((skip+count))
    done)

Результат може бути упередженим до більшого розміру через попереду зчитування диска - саме тому важливо встановити cbtotalдосить великий розмір .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.