Клонирование одного диска на несколько дисков одновременно


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вызывался так же, как и другие, и отправлять стандартный вывод 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 - это диски для клонирования [...]" ---> «[...] и помни, чтобы быть осторожным с буквами!» : D Согласен !!!
dag729

1
@ mr.b: 1) По моему мнению, побитовое копирование лучше, чем использование потенциально опасных ярлыков. 2) Мех, лучший способ, который я могу придумать, - это поэкспериментировать с источником dd, чтобы он копировал в несколько мест одновременно, но было бы быстрее просто скопировать медленный путь.
Marcusw

Вы уверены в этом of=-? Просто создает -выходной файл, а не выводить на стандартный вывод для меня. Это может быть решено, просто пропуская ofопцию.
оттуда

Использование «тройника» таким образом не сработает. Пожалуйста , смотрите: joshhead.wordpress.com/2011/08/04/...
user35060

2

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


Да, я знаю о существовании этих устройств; Тем не менее, они все, но дешево, особенно в моем случае с нулевым бюджетом :( Спасибо за упоминание их, хотя.
mr.b

1
Хотя это и не совсем нулевая стоимость, если у вас есть запасная машина (с приличным источником питания), которую вы можете использовать и можете позволить себе пару дешевых контроллеров SATA (в моей домашней машине есть двухпортовый, который стоит десять). Вы можете создать свой собственный простой компьютер для дублирования и использовать метод dd + tee или другое программное обеспечение, если сможете найти такое, которое эффективно поддерживает «чтение из одного источника, запись во многие».
Дэвид Спиллетт

(Именно это я и предполагал в моем первоначальном ответе.)
Дэвид Спиллетт

1

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

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


Я поддержу Clonezilla как то, что кажется вам хорошим решением на основе ваших отзывов.
user35060

1

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

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


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


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 Гб, с 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=опциями.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.