¿Cuándo es adecuado dd para copiar datos? (o, cuando se leen () y escriben () parcial) señala una advertencia importante al usar count
: dd
puede copiar bloques parciales, por lo que cuando count
se detenga, se detendrá después del número dado de bloques, incluso si algunos de los bloques estaban incompletos. Por lo tanto, puede terminar con menos de bs * count
bytes copiados, a menos que especifique iflag=fullblock
.
El tamaño de bloque predeterminado para dd es 512 bytes. count
es un limite; como su pregunta sugiere que no es necesario al copiar un dispositivo de tamaño finito, y realmente está destinado a copiar solo una parte de un dispositivo.
Creo que hay dos aspectos a considerar aquí: rendimiento y recuperación de datos.
En lo que respecta al rendimiento, lo ideal es que el tamaño del bloque sea al menos igual y un múltiplo del tamaño del bloque físico subyacente (por lo tanto, 2048 bytes al leer un CD-ROM). De hecho, hoy en día también puede especificar tamaños de bloque más grandes para dar a los sistemas de almacenamiento en caché subyacentes la oportunidad de almacenar cosas por usted. Pero aumentar el tamaño del bloque significa dd
tener que usar mucha más memoria, y podría ser contraproducente si está copiando a través de una red debido a la fragmentación de paquetes.
En lo que respecta a la recuperación de datos, puede recuperar más datos de un disco duro defectuoso si utiliza tamaños de bloque más pequeños; esto es lo que hacen los programas dd-rescue
automáticamente: leen bloques grandes inicialmente, pero si un bloque falla, lo vuelven a leer con tamaños de bloque más pequeños. dd
no hará esto, simplemente fallará todo el bloque.
dd bs=4m iflag=fullblock
vsdd bs=1111
y observe las velocidades de datos sustancialmente más altas que le proporcionará la anterior. Esto se debe a que el primero se alinea con los tamaños de bloque natural en la tarjeta SD, mientras que el segundo requiere que el controlador SD lea, copie y vuelva a flashear para escribir bloques físicos parciales. La importancia defullblock
no debe subestimarse, por cierto, ya que sin ella,bs
es solo un máximo y las lecturas parciales podrían conducir a desalineaciones persistentes posteriores.