¿Existe algún argumento en contra del uso de dd con bs=10G?

¿Existe algún argumento en contra del uso de dd con bs=10G?

Supongamos que tengo una unidad que tiene un superbloque (o bloque) defectuoso en alguna ubicación aleatoria. Es una unidad enorme, de 1 a 8 TB. No se formateará en ext3, así que lo escribiré lleno de ceros para poder formatearlo correctamente. lsblk -fmuestra su FSTYPE como una cadena vacía.

¿Hay alguna razón para no ejecutar el siguiente comando?

sudo dd if=/dev/zero bs=10G status=progress of=/dev/bad_disk

Respuesta1

Sospecho que no puedes interrumpir el programa mientras escribe un bloque y escribir 10 GB lleva mucho tiempo. En mi experiencia, la mejora del rendimiento con el tamaño de bloque se estabiliza con bastante rapidez, por lo que me apegaría a tamaños más razonables (4 MB...).

Respuesta2

Mi respuesta aborda exactamente el título:

¿Existe algún argumento en contra del uso ddwith bs=10G?

Pero en tu caso es un pocoproblema xy. El problema subyacente (bloques defectuosos) debe abordarse con smartctly badblocks, no con dd.


Uso de memoria

esta otra respuestamenciona "mejora del rendimiento con el tamaño del bloque":

Mejora del rendimiento con mesetas en el tamaño de los bloques con bastante rapidez

Es cierto, pero es sólo una bsparte "casi cero" de la historia. En el contexto de la pregunta, deberíamos decir la bsparte "va al infinito".

En el mundo real, la meseta en realidad se derrumba durante algunos años bs. Con bs=10Gla herramienta intentaremos asignar 10 GiB de memoria. Puede que tenga éxito o no (memoria agotada). Incluso si tiene éxito, todavía hay problemas:

  • Es posible que otros procesos cambien su memoria asignada al disco.
  • El búfer de ddpuede intercambiarse al disco. La herramienta lo usa constantemente, por lo que el sistema operativo probablemente intercambiaría primero otros datos (a los que no se haya accedido recientemente). Aún así, si tiene 8 GiB de RAM y 16 GiB de intercambio, no hay forma de incluir bs=10GRAM.
  • Si se necesita memoria más tarde,El asesino OOM puede entrar en acción. Tu ddpuede ser el primer proceso en matar.

Por supuesto, todo esto depende de cuánta RAM tenga y de cuánto espacio de intercambio tenga, y de lo que hagan otros procesos.


Consejos

Mi preferencia personal es utilizar bsun tamaño que se transfiera en 0,1-1 segundo; o menor bssi el uso de RAM puede ser un problema. De esta manera puedo interrumpir ddcasi instantáneamente (esta es la esencia delrespuesta ya mencionada). Si las limitaciones del hardware permitieran ddsuperar los 10 GiB/s y tuviera más de 40 GiB de RAM libre, lo consideraría bs=10G. En casa casi nunca subo arriba bs=64M.

Un caso de uso que bs=10Gpuede resultar útil es cuando desea procesarexactamentela misma cantidad de datos que utilizas count=1(o, por ejemplo, 5 veces más: count=5).Sin embargoen la práctica con grandes bspuedes obtenermenos, a menos que utilice iflag=fullblock(veresta respuesta). Debido al uso de la memoria, de todos modos volvería a calcular a un tamaño más pequeño bs.

información relacionada