11

Я ищу способ клонировать один диск на несколько дисков одновременно.

Я подготовил образы системы на дисках объемом 1 ТБ, и для клонирования одного диска на другой требуется почти 2 часа, а затем он увеличивается в геометрической прогрессии, например, для клонирования 30 дисков.

Если бы можно было клонировать один диск для более чем одной цели, это значительно упростило бы всю процедуру.

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

Спасибо!

8 ответов8

18

Вы можете использовать "замену процесса" в 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

и если он у вас установлен, вы можете использовать pipe viewer вместо 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/dd передает данные через 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 , и распакуйте в местах назначения (network-> nc -> depressor-> dd -> disk).

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 должен это делать, и не забывайте быть осторожным с буквами дисков!

2

Все, что я знаю, это то, что есть некоторые вещи, называемые дубликаторами жестких дисков. Это специальные устройства для клонирования (дублирования) жестких дисков на несколько дисков одновременно. Может быть, эта статья поможет вам.

1

Я нашел 2 полезные ссылки в Интернете, связанные с этим. Один использовал dd без cat, чтобы сделать diskdupe:

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

1

Поскольку никто еще не упомянул об этом, я упомяну Clonezilla и их Server Edition. (к сожалению, прямой ссылки на него нет, но вы можете найти "Server Edition" в левом меню навигации сайта ...)

Мне очень повезло с Clonezilla Live, но я еще не попробовал Server Edition. Выглядит довольно гладко, хотя.

1

Если вы используете Mac OS X, это встроено. С машины вы собираетесь обслуживать образ с начала многоадресной сессии asr. С клиентов запустите загрузочный диск, откройте терминал и подключитесь к многоадресному потоку asr. Свободно.

Подробности: http://www.bombich.com/mactips/multicast.html

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 гигабайт в 6 раз, с 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-страница) - это специальный инструмент, который позволяет параллельное копирование одного источника по нескольким адресатам и работает как UNIX dd , с несколькими опциями of= .

Также возможно включить хеширование исходного тома и копий для проверки их целостности.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .