Вы можете использовать «процесс подстановки» bash вместе с командой tee, чтобы сделать это:
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
или для ясности (за счет небольшой эффективности) вы можете сделать так, чтобы последний dd
вызывался так же, как и другие, и отправлять стандартный вывод 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
/ dd
s передает данные 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
-> диск).