Cómo determinar el mejor tamaño de byte para el comando dd

21

Sé que hacer un dd if = / dev / hda of = / dev / hdb hace una copia profunda del disco duro. He oído que las personas han podido acelerar el proceso al aumentar el número de bytes que se leen y escriben a la vez (512) con la opción "bs".

Mi pregunta es:

¿Qué determina el tamaño de byte ideal para copiar desde un disco duro?

y

¿Por qué determina eso el tamaño de byte ideal?

James T
fuente
Pensé que tendría que dividirse perfectamente en el tamaño de la unidad o partición: por lo tanto, he tratado de determinar el tamaño de byte exacto de la partición de destino, obtener los factores primos y determinar un bloque razonablemente grande que sea un múltiplo de varios de esos factores primos ...
PP.

Respuestas:

18

Como dice Chris S, el tamaño de bloque óptimo depende del hardware. En mi experiencia, siempre es mayor que los 512 bytes predeterminados. Si trabaja con dispositivos sin formato, la geometría del sistema de archivos superpuesta no tendrá ningún efecto. He utilizado el siguiente script para ayudar a "optimizar" el tamaño de bloque de dd.

#!/bin/bash
#
#create a file to work with
#
echo "creating a file to work with"
dd if=/dev/zero of=/var/tmp/infile count=1175000

for bs in  1k 2k 4k 8k 16k 32k 64k 128k 256k 512k 1M 2M 4M 8M 

do
        echo "Testing block size  = $bs"
        dd if=/var/tmp/infile of=/var/tmp/outfile bs=$bs
        echo ""
done
rm /var/tmp/infile /var/tmp/outfile
user9517 es compatible con GoFundMonica
fuente
44
En OS X, "1M ... 8M" debe estar en minúscula a "1m ... 8m".
Matt Beckman el
1
podría agregar un "tiempo" frente a dd, para tener información adicional sobre la cantidad de tiempo que pasó esperando a IO y qué cantidad es trabajo real ...
Olivier Dulac
1
@lain /dev/zerose genera, no es necesario leerlo desde el disco; podrías dd if=/dev/zero ibs=1M count=32 obs=$bs of=/var/tmp/outfile@ olivier-dulac bien, ddya imprimir la velocidad; no creo time(o /usr/bin/time) agregue ninguna información que valga la pena.
bufh
1

Lamentablemente, el tamaño perfecto dependerá de su bus de sistema, controlador de disco duro, la unidad en sí misma y los controladores para cada uno de ellos. La única forma de encontrar el tamaño perfecto es seguir probando diferentes tamaños. Advertencia justa de que algunos dispositivos solo admiten un tamaño de bloque, aunque esto es raro, y generalmente los controladores compensan la diferencia de todos modos.

Me parece que el tamaño de bloque de 2 ^ 15 o 2 ^ 16 funciona mejor para mis unidades SATA WDC (caché de 8 MB) conectadas a un controlador RAID SAS Adaptec, 4x PCIe, FreeBSD 8.0-STABLE de 64 bits. Pero para mi vieja memoria USB barata, los tamaños de 2 ^ 10 parecen ser los más rápidos.

El "tamaño perfecto" es casi siempre una potencia de dos.

Chris S
fuente
0

Puedo garantizar el mérito de medir el resultado de realizar una prueba en el dispositivo que se está utilizando antes de perder el tiempo. Estúpidamente no me molesté y después de medir, luego ajustar el tamaño de mi bloque redujo mi duración DD de una transferencia de 590 Gb a la mitad. El mismo valor de BS solo habría reducido el tiempo en un 20% utilizando un combo de carrito / unidad diferente.

Bernster
fuente