Clonación de una sola unidad de disco en varias unidades simultáneamente


12

Estoy buscando una manera de clonar una sola unidad de disco en más de una unidad de disco al mismo tiempo.

He preparado imágenes del sistema en discos de 1TB, y tarda casi 2 horas en clonar un disco en otro, y luego sube exponencialmente, para tener 30 discos clonados.

Si fuera posible clonar un disco en más de un solo objetivo, simplificaría mucho todo el procedimiento.

Además, ¿hay algo que impida este tipo de operación? Quiero decir, ¿hay alguna razón especial por la que cada software de clonación de discos que conozco solo sea compatible con una unidad de destino único?

¡Gracias!

Respuestas:


17

Puede usar la "sustitución de proceso" de bash junto con el comando tee para hacer esto:

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

o para mayor claridad (a expensas de un poco de eficiencia), puede hacer que el último ddse llame de la misma manera que los demás y enviar el stdout de tee a / dev / null:

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

y si lo tiene instalado, puede usar el visor de tuberías en lugar de catobtener un indicador de progreso útil:

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

Esto lee la imagen de origen solo una vez, por lo que la unidad de origen sufre golpes de cabeza, lo que probablemente sea la razón por la que ve una desaceleración exponencial cuando intenta copiar la imagen varias veces por otros métodos. Usando teecomo arriba, los procesos deben ejecutarse a la velocidad de la unidad de destino más lenta.

Si tiene las unidades de destino conectadas a través de USB, tenga en cuenta que todas pueden compartir el ancho de banda del bus, por lo que escribir muchas en paralelo puede no ser más rápido que escribirlas secuencialmente porque el bus USB se convierte en el cuello de botella, no en las unidades de origen o de destino.

Lo anterior supone que está utilizando Linux o similar (también debería funcionar en OSX, aunque los nombres de los dispositivos pueden ser diferentes), si está utilizando Windows u otra cosa, entonces necesita una solución diferente.

Editar

La creación de imágenes a través de la red tiene un problema similar a la creación de imágenes de muchas unidades a través de USB: el canal de transporte se convierte en el cuello de botella en lugar de las unidades, a menos que el software que utilice sea compatible con algún tipo de transmisión de transmisión o multidifusión.

Para el ddmétodo, probablemente podría encadenar procesos netcat+ tee+ dden cada máquina de la siguiente manera:

  1. Máquina de origen cat/ pv/ dds los datos a través ncde la máquina de destino 1.
  2. La máquina de destino 1 ncescucha los datos de la máquina de origen y los canaliza a través de los teecuales, a su vez, los envía dd(y, por lo tanto, al disco) y otro ncproceso que envía a la máquina de destino 2.
  3. La máquina de destino 2 ncescucha los datos de la máquina de destino 1 y los conecta a través de los teecuales, a su vez, los envía dd(y, por lo tanto, al disco) y otro ncproceso que envía a la máquina de destino 3.
  4. y así sucesivamente hasta la última máquina que acaba de ncrecoger los datos de la máquina anterior y enviarlos al disco a través de dd.

De esta manera, potencialmente está utilizando su ancho de banda de red completo, suponiendo que su conmutador y las tarjetas de red hayan negociado un enlace dúplex completo. En lugar de que la máquina de origen envíe 10 copias de los datos (suponiendo que 10 máquinas de destino) estén limitadas a 1/10 del ancho de banda saliente, solo está enviando 1. Cada máquina de destino toma una copia de los datos y la envía. de nuevo. Es posible que tenga que ajustar la configuración de tamaño de búfer de pv, ncy ddpara acercarse a un mejor rendimiento práctico.

Sin embargo, si puede encontrar algún software que solo sea compatible con multidifusión, ¡eso sería mucho más fácil (y probablemente un poco más rápido)! Pero lo anterior es el tipo de solución hacky que podría ser tan tonto como para intentar ...

Editar de nuevo

Otro pensamiento Si la imagen de la unidad se comprime bien (lo que ocurrirá si grandes partes de ella están llenas de ceros), el ancho de banda saliente de la máquina de origen no necesita ser un problema, incluso si se envía a muchos destinos a la vez. Simplemente comprima la imagen primero, transmítala a todas partes usando tee+ ncy descomprima en los destinos (red-> nc-> descompresor-> dd-> disco).


Gracias por una explicación detallada del proceso. Fue de mucha ayuda. Estoy explorando las opciones de clonación de red en este momento (usando multidifusión), y si falla, exploraré este vector DD un poco más.
Sr.b

No dijiste que las unidades estaban conectadas a diferentes computadoras ... ¡eso hace que las cosas sean completamente diferentes!
marcusw

Esto se acerca tanto a la computadora local como a la red de computadoras de duplicación de disco de uno a muchos, simultáneamente. Gracias por la explicación en profundidad!
Sr.b

Para las opciones de clonación de red basadas en Linux, es posible que desee considerar Clonezilla. Puede clonar a través de multidifusión, así como varias opciones locales de clonación, incluida DD.
user35060

5

Primera respuesta en google sugerido (en un sistema Linux): dd if=/dev/sdb of=- | tee >(dd of=/dev/sdc) >(dd of=/dev/sdd) >(dd of=/dev/sde)donde / dev / sdb es el disco duro que desea clonar y / dev / sdc, / dev / sdb y / dev / sde son unidades para clonar (puede agregue tantos más de estos como desee, solo copie la pasta). ¡Un LiveCD debería hacerlo, y recuerde tener cuidado con las letras de sus unidades!


1
Cierto. Investigué un poco antes de hacer esta pregunta, pero estaba interesado en escuchar las experiencias de otras personas. DD es una pequeña gran utilidad, pero: 1) carece de conocimiento del contenido de datos real (copiará también el espacio vacío, sector por sector), y 2) alguien ha informado problemas de rendimiento al clonar en más de una unidad De este modo. ¿Alguna idea más?
Sr.b

"[...] donde / dev / sdb es el disco duro que desea clonar y / dev / sdc, / dev / sdb y / dev / sde son unidades para clonar a [...]" ---> "[...] y recuerda tener cuidado con las letras de tu unidad!" : DI De acuerdo !!!
dag729

1
@ mr.b: 1) En mi opinión, una copia bit por bit es mejor que tomar atajos potencialmente peligrosos. 2) Meh, la mejor manera en que puedo pensar es jugar con la fuente de dd para hacer que se copie en más de una ubicación simultáneamente, pero sería más rápido copiarlo de manera lenta.
marcusw

¿Estás seguro sobre el of=-? El solo crea un -archivo de salida en lugar de enviarlo a stdout para mí. Esto se puede resolver simplemente omitiendo la ofopción.
allí el

Usar "tee" de esa manera no funcionará. Ver: joshhead.wordpress.com/2011/08/04/…
user35060

2

Todo lo que sé es que hay algunas cosas llamadas duplicadores de disco duro. Estos son dispositivos especiales para clonar (duplicar) discos duros en múltiples unidades al mismo tiempo. Quizás este artículo te ayude.


Sí, soy consciente de la existencia de estos dispositivos; sin embargo, son todo menos baratos, especialmente en mi caso de presupuesto cero :( Gracias por mencionarlos, sin embargo.
Sr. b

1
Si bien no es completamente de costo cero, si tiene una máquina de repuesto (con una fuente de alimentación decente) que podría obtener y puede pagar un par de controladores SATA baratos (hay uno de dos puertos en mi máquina doméstica que cuesta diez dólares) puede hacer su propia máquina de duplicación simple y usar el método dd + tee u otro software si puede encontrar alguno que admita "leer desde una sola fuente, escribir en muchos" de manera eficiente.
David Spillett

(Esto es lo que supuse que estabas tratando de hacer en mi respuesta inicial.)
David Spillett

1

Como nadie lo ha mencionado todavía, mencionaré Clonezilla y su Server Edition. (desafortunadamente, no parece haber un enlace directo a él, pero puede encontrar "Server Edition" en el menú de navegación izquierdo del sitio ...)

He tenido mucha suerte con Clonezilla Live Edition pero aún no he probado Server Edition. Sin embargo, parece bastante elegante.


Segundo Clonezilla como lo que parece ser una buena solución para usted en función de los comentarios que ha proporcionado.
user35060

1

Si está utilizando Mac OS X, esto está integrado. Desde la máquina, servirá la imagen desde el inicio de una sesión asr de multidifusión. Desde el inicio de los clientes hasta el disco de arranque, abra la terminal y conéctese a la secuencia de multidifusión asr. Gratis.

Detalles: http://www.bombich.com/mactips/multicast.html


1

Encontré 2 enlaces útiles en la web relacionados con esto. Uno usó dd sin cat para hacer el 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

Esto se expande aún más con otro enlace para mostrar un medidor de progreso:

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

Quería ampliar la respuesta de David

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

En drive.imagerealidad, puede ser otro dispositivo, como/dev/sde

En segundo lugar, el ddcomando trabajará magnitudes más rápido con una bsconfiguración adecuada . Utilicé bs=64ky vi un aumento de velocidad de 6 veces para copiar una partición de 40 Gig, de 1 hora a 10 minutos.

Entonces el comando final se verá así:

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

Si su fuente es una unidad en lugar de un archivo, se verá así:

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

La duplicación paralela del disco duro es una tarea común en informática forense. dc3dd( página man ) es una herramienta dedicada que permite la copia paralela de una sola fuente hacia múltiples destinos y funciona como UNIX dd, con múltiples of=opciones permitidas.

También es posible habilitar el hash del volumen de origen y de las copias para verificar su integridad.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.