Copia DD completa de HDD a HDD

34

PREGUNTA ORIGINAL:

Si tengo 2 discos duros idénticos con las siguientes características:

  • SATA 6.0 Gb / s
  • 5400 rpm
  • 3 TB

¿Cuánto tiempo debe tomar una copia dd completa para completar?

Hasta ahora ha estado funcionando durante 5 horas y sigue funcionando ...

Estoy usando Linux Ubuntu 12.04 64bit y el comando que estoy usando es:

dd if=/dev/sdb of=/dev/sdc

ACTUALIZACIÓN: 1

Ahora puedo ver el progreso, y han pasado más de 6 horas para copiar 430GB. El HDD es de 3 TB ...

¿No hay una forma más rápida de hacer esto?


ACTUALIZACIÓN: 2

Esto parece mucho mejor que antes (Gracias a Groxxda por las sugerencias):

sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128K

ETA es de aproximadamente 9 horas para 3 TB, mientras que antes de llegar a 430 GB después de 6 horas, así que supongo que habría tomado alrededor de 36 horas con el comando anterior.

oshirowanen
fuente
Intente obtener las estadísticas del proceso: el envío de una señal USR1 a un proceso 'dd' en ejecución hace que imprima las estadísticas de E / S con un error estándar y luego reanude la copia. $ dd if = / dev / zero of = / dev / null & pid = $! $ kill -USR1 $ pid Verifique en su página de manual la señal real, ya que difiere para diferentes implementaciones de dd.
groxxda
@Groxxda, no tengo idea de cómo hacerlo.
oshirowanen
1
GNU dd usa SIGUSR1, y BSD dd usaSIGINFO
groxxda
Además, ¿qué quieres decir con "conectado al mismo cable sata"? ¿Estás utilizando algún tipo de multiplicador de puerto? (Si usted alcanza una velocidad de transferencia de 150 MB / s debería tener que 5-6hrs, pero creo que la mitad de los que es más realista.)
groxxda
1
Es posible que pueda acelerar el proceso especificando un tamaño de bloque ( bs=argumento dd) diferente (más grande ). También considere conectar cada HDD a su propio puerto sata.
groxxda

Respuestas:

58

ddfue útil en los viejos tiempos cuando la gente usaba cintas (cuando importaban los tamaños de los bloques) y cuando las herramientas más simples como las catque no eran seguras para los binarios.

Hoy en día, dd if=/dev/sdb of=/dev/sdces una forma de escritura lenta , complicada, propensa a errores cat /dev/sdb >/dev/sdc. Si bien ddsigue siendo útil para algunas tareas relativamente raras , es mucho menos útil que la cantidad de tutoriales que lo mencionan te dejarían creer. No hay magia adentro dd, la magia está todo adentro /dev/sdb.

Su nuevo comando sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128Kes innecesariamente lento y complicado. Los datos se leen 128kB a la vez (que es mejor que el ddvalor predeterminado de 512B, pero no tan bueno como los valores aún mayores). Luego pasa por dos tubos antes de ser escrito.

Use el catcomando más simple y rápido . (En algunos puntos de referencia que hice hace un par de años con Linux, catfue más rápido que cppara una copia entre diferentes discos y cpfue más rápido que ddcon cualquier tamaño de bloque; ddcon un tamaño de bloque grande fue un poco más rápido al copiar en el mismo disco).

cat /dev/sdb >/dev/sdc

Si desea ejecutar este comando sudo, debe hacer que la redirección suceda como root:

sudo sh -c 'cat /dev/sdb >/dev/sdc'

Si desea un informe de progreso, ya que está utilizando Linux, puede obtenerlo fácilmente anotando el PID del catproceso (digamos 1234) y observando la posición de su descriptor de archivo de entrada (o salida).

# cat /proc/1234/fdinfo/0
pos:    64155648 
flags:  0100000

Si desea un informe de progreso y su variante de Unix no proporciona una manera fácil de llegar a las posiciones de un descriptor de archivo, puede instalar y usar en pvlugar de cat.

Gilles 'SO- deja de ser malvado'
fuente
Lo extraño de los bloques grandes es que el cuello de botella es el disco, entonces, ¿qué hace que sea catmás rápido que dd? ¿Podría ser que catusa el caché?
Emmanuel
1
@Gilles, gracias por la respuesta. Tengo otras cinco unidades de 3TB para clonar e intentaré la opción cat a continuación. Por lo que puedo decir, ese nuevo comando dd tardará otras 3 horas en completarse, hasta aproximadamente 11 horas en total. Si el enfoque cat es más rápido que 11 horas para el segundo disco duro de 3TB, usaré ese método para las unidades restantes.
oshirowanen
2
@Gilles, así que para obtener el informe de progreso, ¿lo uso en sudo sh -c 'pv /dev/sdb >/dev/sdc'lugar de sudo sh -c 'cat /dev/sdb >/dev/sdc'?
oshirowanen
1
@oshirowanen Sí, use pvdonde usaría cat.
Gilles 'SO- deja de ser malvado'
1
@unhammer ¡No! Copiaría cada dispositivo uno por uno, por ejemplo cat /dev/sdc1 >/dev/sdb1 && cat /dev/sdd1 >/dev/sde1. Concatenar las dos partes no tiene sentido. Si desea cambiar la estructura del volumen btrfs, para cambiarlo de tener dos subvolúmenes a uno, debe usar las herramientas btrfs para cambiar la estructura, o como lo hizo para crear un nuevo sistema de archivos con la estructura deseada y copiar los archivos .
Gilles 'SO- deja de ser malvado'
7

ddutiliza un tamaño de bloque muy pequeño por defecto (512 bytes). Eso genera muchos gastos generales (uno read()y write()syscall por cada 512 bytes).

Va mucho más rápido cuando usas un tamaño de bloque más grande. Las velocidades óptimas comienzan más bs=64ko menos. La mayoría de las personas usa una aún más grande bs=1Mpara que sea legible para los humanos (cuando dddice que se copió 1234 blocks, sabes que es 1234 MiBsin hacer ningún cálculo). Es poco probable que el uso de bloques de mayor tamaño resulte en mejoras de velocidad, solo un mayor consumo de memoria.

Entonces el comando debería ser:

dd bs=1M if=/dev/sdb of=/dev/sdc

Si ya tiene un ddfuncionamiento lento , puede interrumpirlo y reanudarlo con una ddinstancia más rápida . Para esto es importante saber hasta qué punto la copia ya progresó. ddgeneralmente imprime el progreso cuando lo cancela, o puede enviarle la USR1señal mientras se está ejecutando para que imprima su progreso.

kill -USR1 $(pidof dd)

Por ejemplo, si copió más de 1234MiB, puede reanudar en la posición 1234MiBusando:

dd bs=1M seek=1234 skip=1234 if=/dev/sdb of=/dev/sdc

Si copió menos de 1234MiB, su copia estará incompleta. Si copió más que 1234MiB, volverá a copiar algunas partes ya copiadas, lo que normalmente no hace ningún daño. Entonces, en caso de duda, debe elegir un valor un poco más pequeño que el que cree que ya se copió.

frostschutz
fuente
5

Obtener estadísticas sobre el proceso de dd en curso

Puede usar el killcomando con la señal adecuada para hacer que ddlas estadísticas de salida tengan un error estándar.
Desde la página de manual de GNU dd:

Sending a USR1 signal to a running 'dd' process makes it print I/O statistics to standard error and then resume copying.
      $ dd if=/dev/zero of=/dev/null& pid=$!
      $ kill -USR1 $pid
      18335302+0 records in 18335302+0 records out 9387674624 bytes (9.4 GB)  copied,  34.6279 seconds, 271 MB/s

Asegúrese de verificar primero en su página de manual la señal correcta, ya que puede diferir en diferentes implementaciones de dd: (BSD dd usa SIGINFO).

Acelerando el proceso

  1. Conecte cada HDD a su propio puerto SATA para que los datos puedan leerse desde un dispositivo y escribirse en el otro al mismo tiempo.
  2. Use un tamaño de bloque apropiado usando el bs=argumento. Echa un vistazo a este hilo en el superusuario y prueba algunos valores por ti mismo.
  3. Use ddinvocaciones separadas para leer y escribir y use una tubería para conectarlos ( dd if=/dev/sda bs=1M | dd of=/dev/sdb bs=1M).
    Si hace esto y especifica un tamaño de bloque, asegúrese de usar el mismo tamaño de bloque en cada invocación.
  4. Puede probar otras optimizaciones como el directargumento.
  5. Asegúrese de que sus discos duros no estén montados o puede provocar una copia corrupta.
groxxda
fuente
0

¿Has probado 'gparted'? Literalmente, puede copiar y pegar una partición de una unidad a otra y cambiar su tamaño según sea necesario. Obtiene la tasa de transferencia y el tiempo restante. Utiliza 'e2image' debajo para particiones Linux.

ioannis
fuente
0

Existe un software comercial llamado HDClone . Tiene licencia como freeware y comercial. Cualquiera de las versiones puede crear un pendrive de arranque o DVD, así como copiar discos. Conecte las HD de origen y de destino y siga las instrucciones basadas en GUI.

La versión gratuita se transferirá a una velocidad de aproximadamente 80 MB / seg, mientras que las versiones pagas pueden ir mucho más rápido. Para los sistemas de archivos NTFS y FAT, las versiones pagas se pueden configurar para clonar solo los bits ocupados del HD, lo que aumenta dramáticamente la velocidad de cada clon.

Gerold Manders
fuente
(1) ¿Está afiliado a este producto? (2) ¿Dónde podemos conseguirlo?
Scott
1
O simplemente puede usar "cat / dev / sdx> / dev / sdy" gratis ...
HörmannHH