Клонування однодискового накопичувача на кілька дисків одночасно


12

Я шукаю спосіб клонування однодискового накопичувача на більш ніж один дисковий диск одночасно.

Я підготував зображення системи на дисках 1 ТБ, і для клонування одного диска на інший потрібно майже 2 години, а потім він іде вгору експоненціально, щоб сказати, що клонується 30 дисків.

Якби вдалося клонувати один диск на більш ніж одну ціль, це значно спростило б цілу процедуру.

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

Дякую!

Відповіді:


17

Для цього ви можете використовувати "заміну процесу" bash разом із командою tee:

cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

або для ясності (за рахунок невеликої ефективності) ви можете зробити так, щоб останні ddназивались так само, як і інші, і відправити stdout tee в / dev / null:

cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | /dev/null

і якщо він встановлений, ви можете використовувати інструмент перегляду труб замість того, catщоб отримати корисний показник прогресу:

pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

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

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

Наведене вище передбачає, що ви використовуєте Linux або подібні (він також повинен працювати на OSX, хоча імена пристроїв можуть бути різними), якщо ви використовуєте Windows або щось інше, тоді вам потрібно інше рішення.

Редагувати

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

Для цього ddметоду ви, ймовірно, могли б робити ланцюжки ромашок netcat+ tee+ ddна кожній машині так:

  1. Машина-джерела cat/ pv/ dds дані через ncмашину призначення 1.
  2. Машина 1 призначення має ncпрослуховування даних з вихідної машини та трубопровід, через teeякий, в свою чергу, надсилає їх на ddдиск (і так на диск) та інший ncпроцес, який надсилає на машину призначення 2.
  3. Машина призначення 2 має ncпрослуховування даних з машини призначення 1 і проходить через teeних протокол, який по черзі посилає їх на ddдиск (і так на диск) та інший ncпроцес, який надсилає на машину призначення 3.
  4. і так далі до останньої машини, яка щойно ncзбирає дані з попередньої машини та надсилає їх на диск через dd.

Таким чином, ви потенційно використовуєте повну пропускну здатність мережі, якщо припустити, що ви перемикаєте і мережеві картки домовились про повне дуплексне посилання. Замість того, щоб машина-джерело надсилала 10 копій даних назовні (маючи на увазі 10 машин призначення), тому кожна обмежена 1/10 частиною вихідної смуги передачі, яка надсилається лише 1. Кожна машина призначення отримує одну копію даних та відправляє її знову. Ви , можливо , буде потрібно змінити налаштування розміру буфера pv, ncі ddнаблизитися до кращої практичної діяльності.

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

Знову редагуйте

Ще одна думка. Якщо образ накопичувача добре стискається (що буде, якщо великі шматки його заповнені нулями), вихідна пропускна здатність вихідної машини не повинна бути проблемою, навіть якщо надсилати відразу до багатьох напрямків. Спершу просто стисніть зображення, передайте його скрізь, використовуючи tee+ nc, та декомпресуйте на місцях призначення (мережа-> nc-> декомпресор-> dd-> диск).


Дякуємо за поглиблене пояснення процесу. Це було дуже корисно. Я зараз вивчаю варіанти клонування мережі (використовуючи мультикаст), і якщо це не вдасться, я ще раз вивчу цей вектор DD.
mr.b

Ви не сказали, що накопичувачі були приєднані до різних комп'ютерів ... це робить речі абсолютно іншими!
marcusw

Це найбільше наближається до локального комп’ютера та мережі комп’ютерів, копіювання одного на багато дисків одночасно. Дякуємо за поглиблене пояснення!
mr.b

Для параметрів мережевого клонування, що базуються на Linux, ви можете розглянути Clonezilla. Він може клонуватись через багатоадресну передачу, а також кілька варіантів локального клонування, включаючи DD.
user35060

5

Перша відповідь на запропонованій google (в системі Linux): dd if=/dev/sdb of=- | tee >(dd of=/dev/sdc) >(dd of=/dev/sdd) >(dd of=/dev/sde)де / dev / sdb - це жорсткий диск, який ви хочете клонувати, і / dev / sdc, / dev / sdb, і / dev / sde - це диски, які потрібно клонувати (ви можете додайте стільки, скільки хочете, просто скопіюйте пасту). LiveCD повинен це робити, і не забудьте бути обережними з листами диска!


1
Правда. Я робив кілька досліджень до того, як задати це питання, але мені було цікаво почути досвід інших людей. DD - це велика невелика утиліта, але: 1) йому бракує поінформованості про фактичний вміст даних (він також буде копіювати порожній простір, по секторах), і 2) хтось повідомив про проблеми з продуктивністю, роблячи клонування на більш ніж один диск таким чином. Ще ідеї?
mr.b

"[...] де / dev / sdb - це жорсткий диск, який ви хочете клонувати, і / dev / sdc, / dev / sdb та / dev / sde - це приводи для клонування до [...]" ---> "[...] і пам’ятайте, будьте обережні з листами диска!" : DI Згоден !!!
dag729

1
@ mr.b: 1) На мою думку, роздрібнене копіювання краще, ніж використання потенційно небезпечних ярликів. 2) Мех, найкращий спосіб, який я можу придумати, - це возитися з джерелом дд, щоб зробити його копіювати в більш ніж одне місце одночасно, але було б швидше просто скопіювати повільний шлях.
marcusw

Ви впевнені в цьому of=-? Просто створює -вихідний файл, а не виводить stdout для мене. Це можна вирішити, просто залишивши цей ofваріант.
звідти

Використання "трійника" таким чином не вийде. Дивіться: joshhead.wordpress.com/2011/08/04/…
user35060

2

Все, що я знаю, - це те, що називають копії жорсткого диска. Це спеціальні пристрої для клонування (копіювання) HD-дисків на декілька дисків одночасно. Можливо, ця стаття вам допоможе.


Так, мені відомо про існування цих пристроїв; однак вони - все, але не дешеві, особливо в моєму випадку з нульовим бюджетом :( Дякую, що
згадуєте

1
Хоча це не абсолютно нульова вартість, якщо у вас є запасна машина (з гідним джерелом живлення), яку ви могли б командувати і можете дозволити собі пару дешевих контролерів SATA (у моїй домашній машині є двопортовий, який коштує десять) ви можете зробити власну просту машину дублювання та використовувати метод dd + tee чи інше програмне забезпечення, якщо ви зможете ефективно знайти такі, які підтримують "читання з одного джерела, записування багатьом".
Девід Спіллетт

(Це те, що я припускав, що ви намагалися зробити в моїй початковій відповіді.)
Девід Спіллетт,

1

Оскільки про це ніхто ще не згадував, я згадаю Clonezilla та їх Server Edition. (на жаль, не існує прямого посилання на нього, але ви можете знайти "Серверну версію" у лівому навіщому меню сайту ...)

Мені пощастило з Clonezilla Live Edition, але я ще не спробував Server Edition. Хоча виглядає досить гладко.


Я буду другою Clonezilla як те, що, здається, є хорошим рішенням для вас на основі наданих вами відгуків.
user35060

1

Якщо ви використовуєте Mac OS X, це вбудовано. З машини ви збираєтеся подавати зображення з початку сеансу обміну багатоадресною передачею. Від клієнтів запустіть на завантажувальний диск, відкрийте термінал і підключіться до потоку багатоадресної передачі asr. Безкоштовно.

Детальніше: http://www.bombich.com/mactips/multicast.html


1

Я знайшов 2 корисних посилання в мережі, що стосуються цього. Один використаний дд без кота, щоб зробити дискдуп:

dd if=/dev/sdb | tee >(dd of=/dev/sdc) | tee >(dd of=/dev/sdj) | dd of=/dev/sdh

http://joshhead.wordpress.com/2011/08/04/multiple-output-files-with-dd-utility

Це додатково розгорнуто ще одним посиланням, щоб показати показник прогресу:

dd if=/dev/sdb | pv -s $(blockdev --getsize64 /dev/sdb) | tee >(dd of=/dev/sdc) | tee >(dd of=/dev/sdj) | dd of=/dev/sdh

http://www.commandlinefu.com/commands/view/6177/dd-with-progress-bar-and-statistics


0

Я хотів розкрити відповідь Девіда

pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

drive.imageМоже бути на самому справі інший пристрій, наприклад ,/dev/sde

По-друге, ddкоманда швидше буде працювати при правильному bsналаштуванні. Я скористався bs=64kі побачив у 6 разів збільшення швидкості для копіювання розділу 40 Gig, з 1 години до 10 хвилин.

Отже, остаточна команда буде виглядати приблизно так:

pv drive.image | tee >(dd bs=64k of=/dev/sda) >(dd bs=64k of=/dev/sdb) >(dd bs=64k of=/dev/sdc) | dd bs=64k of=/dev/sdd

Якщо ваш джерело - це диск, а не файл, він виглядатиме так:

pv /dev/sde | tee >(dd bs=64k of=/dev/sda) >(dd bs=64k of=/dev/sdb) >(dd bs=64k of=/dev/sdc) | dd bs=64k of=/dev/sdd


0

Паралельне копіювання жорсткого диска є загальним завданням у комп'ютерній криміналістиці. dc3dd( man page ) - це спеціалізований інструмент, який дозволяє паралельно копіювати одне джерело до декількох напрямків та працює як UNIX dd, of=дозволено кілька варіантів.

Можна також увімкнути хешування джерела та копій, щоб перевірити їх цілісність.

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