En lo que respecta al resultado final, harán lo mismo. La diferencia está en cómo ddprocesar los datos. Y en realidad, ambos ejemplos son bastante extremos en ese sentido: el bsparámetro indica ddcuántos datos debe almacenar en la memoria antes de enviarlo.
Entonces, esencialmente, el primer comando intentaría leer 2GB en dos fragmentos de 1GB, y el último intentaría leer 2GB completos de una vez y luego enviarlo al aaarchivo.
El resultado será el mismo pero en el primer caso ddescribirá dos bloques de 1GB mientras que en el segundo bloque de 2GB. La diferencia es que ddmantiene el bloque copiado en la memoria. Necesitará 1 GB de RAM en el primer caso y 2 GB en el segundo.
En mi opinión, no hay necesidad de usar bloques tan grandes. Puedes hacer un par de pruebas, pero en mi caso logro una mayor velocidad con bloques mucho más pequeños (<1 MB)
El tamaño de bloque utilizado debe coincidir con la mejor configuración de velocidad para el dispositivo de origen y de destino.
Puede ver la diferencia mejor si intenta copiar un dispositivo LV. El uso de un tamaño BS muy pequeño interrumpirá el proceso de lectura innecesario. El uso de un tamaño BS muy grande dará lugar a largas esperas durante la escritura.
Dado que los LV estándar consisten normalmente en fragmentos de 4 MB, que también es un buen tamaño para el acceso al disco físico, uso bs = 4M para estos.
Intente experimentar con 16K o 256M, notará la diferencia, y observe el indicador de disco durante la copia ...
Las penalizaciones por tamaños de bloque pequeños o grandes se compensan en cierta medida por el almacenamiento en caché realizado por el núcleo. Vea aquí para un mini punto de referencia.
Gilles 'SO- deja de ser malvado'
@Gilles No recuerdo los números en mis pruebas, pero fueron mucho más dramáticos que los tuyos. ¿Qué configuración física de disco duro usó en su prueba? El mío estaba en un RAID de hardware 5 dividido en 5 discos (SAS 15k) con 128 KB. tamaño de la raya
Nils
Discos SATA, sin RAID, de lo contrario, máquina inactiva. No recuerdo las especificaciones exactas.
/dev/urandom
, no/dev/random
. Ver security.stackexchange.com/questions/3936/... , security.stackexchange.com/questions/3259/... , ...Respuestas:
En lo que respecta al resultado final, harán lo mismo. La diferencia está en cómo
dd
procesar los datos. Y en realidad, ambos ejemplos son bastante extremos en ese sentido: elbs
parámetro indicadd
cuántos datos debe almacenar en la memoria antes de enviarlo.Entonces, esencialmente, el primer comando intentaría leer 2GB en dos fragmentos de 1GB, y el último intentaría leer 2GB completos de una vez y luego enviarlo al
aa
archivo.fuente
El resultado será el mismo pero en el primer caso
dd
escribirá dos bloques de 1GB mientras que en el segundo bloque de 2GB. La diferencia es quedd
mantiene el bloque copiado en la memoria. Necesitará 1 GB de RAM en el primer caso y 2 GB en el segundo.En mi opinión, no hay necesidad de usar bloques tan grandes. Puedes hacer un par de pruebas, pero en mi caso logro una mayor velocidad con bloques mucho más pequeños (<1 MB)
fuente
La primera ocupará 1G de memoria, la llenará con datos del archivo de entrada y la enviará dos veces.
El segundo ocupará 2G de memoria, lo llenará con datos del archivo de entrada y lo generará.
fuente
El tamaño de bloque utilizado debe coincidir con la mejor configuración de velocidad para el dispositivo de origen y de destino.
Puede ver la diferencia mejor si intenta copiar un dispositivo LV. El uso de un tamaño BS muy pequeño interrumpirá el proceso de lectura innecesario. El uso de un tamaño BS muy grande dará lugar a largas esperas durante la escritura.
Dado que los LV estándar consisten normalmente en fragmentos de 4 MB, que también es un buen tamaño para el acceso al disco físico, uso bs = 4M para estos.
Intente experimentar con 16K o 256M, notará la diferencia, y observe el indicador de disco durante la copia ...
fuente