Для цього ви можете використовувати "заміну процесу" 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на кожній машині так:
- Машина-джерела
cat/ pv/ dds дані через ncмашину призначення 1.
- Машина 1 призначення має
ncпрослуховування даних з вихідної машини та трубопровід, через teeякий, в свою чергу, надсилає їх на ddдиск (і так на диск) та інший ncпроцес, який надсилає на машину призначення 2.
- Машина призначення 2 має
ncпрослуховування даних з машини призначення 1 і проходить через teeних протокол, який по черзі посилає їх на ddдиск (і так на диск) та інший ncпроцес, який надсилає на машину призначення 3.
- і так далі до останньої машини, яка щойно
ncзбирає дані з попередньої машини та надсилає їх на диск через dd.
Таким чином, ви потенційно використовуєте повну пропускну здатність мережі, якщо припустити, що ви перемикаєте і мережеві картки домовились про повне дуплексне посилання. Замість того, щоб машина-джерело надсилала 10 копій даних назовні (маючи на увазі 10 машин призначення), тому кожна обмежена 1/10 частиною вихідної смуги передачі, яка надсилається лише 1. Кожна машина призначення отримує одну копію даних та відправляє її знову. Ви , можливо , буде потрібно змінити налаштування розміру буфера pv, ncі ddнаблизитися до кращої практичної діяльності.
Якщо ви можете знайти якесь програмне забезпечення, яке просто підтримує багатоадресну передачу, це було б набагато простіше (і, можливо, трохи швидше)! Але сказане вище - це якесь хакітне рішення, яке я, можливо, досить спробую спробувати ...
Знову редагуйте
Ще одна думка. Якщо образ накопичувача добре стискається (що буде, якщо великі шматки його заповнені нулями), вихідна пропускна здатність вихідної машини не повинна бути проблемою, навіть якщо надсилати відразу до багатьох напрямків. Спершу просто стисніть зображення, передайте його скрізь, використовуючи tee+ nc, та декомпресуйте на місцях призначення (мережа-> nc-> декомпресор-> dd-> диск).