2008-09-10 9 views
7

¿Hay alguna forma de que Linux lea adelante cuando se clona un disco? Uso el programa llamado "dd" para clonar discos. La última vez que hice esto me pareció que el sistema operativo estaba leyendo y luego escribiendo, pero nunca al mismo tiempo. Idealmente, el disco de destino escribiría constantemente sin esperar, por supuesto, si el disco de origen puede mantener el ritmo.Clonación de disco rápido

ACTUALIZACIÓN: Normalmente elijo un tamaño de bloque grande al clonar (por ejemplo, 16M o 32MB).

Respuesta

11

Commodore Jaeger está sobre la derecha:

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

Además, el ajuste de "readahead" en las unidades por lo general mejora el rendimiento. El valor predeterminado puede ser algo así como 256, y 1024 óptimo. Cada configuración es diferente, por lo que tendría que ejecutar puntos de referencia para encontrar el mejor valor.

# blockdev --getra /dev/sda 
256 
# blockdev --setra 1024 /dev/sda 
# blockdev --getra /dev/sda 
1024 
# blockdev --help 
Usage: 
    blockdev -V 
    blockdev --report [devices] 
    blockdev [-v|-q] commands devices 
Available commands: 
    --getsz (get size in 512-byte sectors) 
    --setro (set read-only) 
    --setrw (set read-write) 
    --getro (get read-only) 
    --getss (get sectorsize) 
    --getbsz (get blocksize) 
    --setbsz BLOCKSIZE (set blocksize) 
    --getsize (get 32-bit sector count) 
    --getsize64 (get size in bytes) 
    --setra READAHEAD (set readahead) 
    --getra (get readahead) 
    --flushbufs (flush buffers) 
    --rereadpt (reread partition table) 
    --rmpart PARTNO (disable partition) 
    --rmparts (disable all partitions) 
# 
1

Tal vez se pueden utilizar dos procesos

dd if=indevfile | dd of=outdevfile 

Voy a asumir que puede configurar las otras opciones dd, ya que más le convenga. Esto tiene algunos gastos generales, pero debe permitir la asincronía entre leer un disco y escribir el otro.

0

¿Estás seguro de que no está haciendo eso al mismo tiempo? Esperaría que los cachés de disco se aseguren de que eso suceda. De lo contrario, las lecturas/escrituras no bloqueantes o incluso asincrónicas pueden ayudar,

+0

creo que el intercambio de lectura/escritura se produce debido a los sonidos de los discos estaban haciendo. – Mike

7

Puede intentar aumentar el tamaño del bloque utilizando el argumento bs; de forma predeterminada, creo que dd utiliza un tamaño de bloque igual al tamaño de bloque preferido del disco, lo que significará muchas más lecturas y escrituras para copiar un disco completo. dd de Linux soporta sufijos legibles:

dd if=/dev/sda of=/dev/sdb bs=1M 
0

Acerca de su cambio: ¿De qué tamaño son las cachés de su HDs? (especialmente el que escribe). Puede ser que sea demasiado y es posible que deba reducirlo para evitar bloqueos innecesarios.

+0

No recuerdo el tamaño de caché de ninguno de los discos. – Mike

5

El más rápido para mí:

dd if=/dev/sda bs=1M iflag=direct | dd of=/dev/sdb bs=1M oflag=direct 

alcanza ~ 100MiB/s, mientras que otras opciones (solo proceso, no, por defecto el tamaño de bloque 512b directa, ...) ni siquiera alcanzan 30MiB/s ...

para observar el avance, correr en otra consola:

watch -n 60 killall -USR1 dd 
+0

En realidad 'dd if =/dev/sda of =/dev/sdb bs = 1M' está en ayunas para mí. – pevik

1

si los dos discos utilizan diferentes canales (e. g., SATA) puede usar una herramienta de alto rendimiento como fastDD. Los autores afirman:

"En este trabajo, hemos revisado el problema de copiar datos de forma fiable y eficiente, recordando todos los mecanismos de hardware y software que intervienen y INTERFER en el proceso de copia Nuestra consideración han sido codificado . en fastdd, un programa C++ capaz de copiar datos muy de manera eficiente, como lo mostramos en nuestra prueba ".

Además, la herramienta mantiene una sintaxis muy similar a la antigua dd.

http://www.dei.unipd.it/~zagonico/fastdd/

https://github.com/zagonico86/fastdd