Reanudar un DD de un disco completo

Reanudar un DD de un disco completo

Estoy sobrescribiendo mi disco duro con datos aleatorios usando el viejo dd:

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512

Es una matriz de 2 TB y mi MacBook (con Linux, ¿vale?) sólo puede escribir datos a alrededor de 3,7 MB/s, lo cual es bastante patético ya que he visto que mi computadora de escritorio en casa alcanza 20 MB/s. Cuando vuelva a casa esta noche, me gustaría detener la ddcarrera aquí, llevármela a casa y ver qué tipo de progreso se puede lograr durante la noche con una máquina más potente.

He estado monitoreando el progreso usando un bucle simple:

while true; do kill -USR1 $PID ; sleep 10 ; done

La salida se ve así:

464938971+7 records in
464938971+7 records out
238048755782 bytes (238 GB) copied, 64559.6 s, 3.7 MB/s

Si tuviera que retomar el ddpase en casa, ¿cómo lo reiniciaría? Conozco el seekparámetro, pero ¿a qué lo señalo, el número de registro o el recuento de bytes?

Respuesta1

Como ya comentó @don_crissti, solo use seek=para reanudar.

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512 seek=464938971

GNU ddtambién admite la búsqueda en bytes, por lo que puedes reanudar exactamente, independientemente del tamaño del bloque:

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=1M \
   seek=238048755782 oflag=seek_bytes

Un tamaño de bloque más grande debería ayudar con las velocidades incluso para un dispositivo lento como /dev/urandom.

Si está buscando alternativas más rápidas, podría hacerlo cryptsetup plainOpencon una clave aleatoria y cero, debería superar /dev/urandomen un orden de magnitud (sin AES-NI) o incluso funcionar a máxima velocidad (con AES-NI).

También puede utilizarlos shred -n 1si los datos pseudoaleatorios son lo suficientemente buenos para su caso de uso. shreddebería poder utilizar la velocidad máxima del disco, incluso en una máquina muy lenta.

Respuesta2

Sólo un recordatorio para las personas que deseen copiar en lugar de simplemente aleatorizar discos (lo cual no esesocomún): puedes usarlo skip=BLOCKSpara comenzarlecturaen la posición adecuada y seek=BLOCKScomenzarescribiendoen la posición correcta. Ambas opciones usan bloques, no bytes. Al romper/reiniciar, es recomendable quitar un montón de bloques por si acaso. Por lo general, vale la pena aumentar el bsvalor por encima de 512, ya que puede lograr un mejor rendimiento si lee muchos datos seguidos.

En su caso, de hecho es un valor de bloque al que debe pasar seek. Tal vez debería intentar ajustar bspara ver si puede mejorar la velocidad, ya que /dev/randomdebería ir rápido (pseudoaleatorio y sin bloqueo cuando no tiene entropía disponible)

Respuesta3

Clonando un disco:

Ampliandoesterespuesta de este hilo, así es como se puede clonar un disco completo y reanudarlo:

Este ejemplo está optimizado para copiar desde una unidad rotativa de 5400 rpm a una SSD en un sistema específico. gddrepresenta GNU dd:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' bs=4M status=progress
247426187264 bytes (247 GB, 230 GiB) copied, 2082 s, 119 MB/s
59012+0 records in
59011+0 records out
247510073344 bytes (248 GB, 231 GiB) copied, 2082.92 s, 119 MB/s

Puedo reanudar esto de dos maneras:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=59011 skip=59011 \
status=progress

O:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=247510073344 skip=247510073344 \
oflag=seek_bytes iflag=skip_bytes \
status=progress

En el primer ejemplo, la razón por la que usamos 59011y no 59012es porque 59011cuántos registros del tamaño de un bloque se copiaron por completo antes de ser interrumpidos. (graba).

Respuesta4

Si puedes, usa

#ddrescue from to logfile
ddrescue /dev/sda /dev/sdb logfile

Mantenga el archivo de registro fuera del origen o del destino... y si tiene que presionar ctrl-c o algo así, ddrescue leerá su propio archivo de registro y se reanudará automáticamente. También copia todo fácilmente primero y, dado que puede reanudarse desde el archivo de registro, puede indicarle que "regrese y se esfuerce más" con los demás.

información relacionada