Estoy sobrescribiendo mi disco duro con datos aleatorios usando el viejo bien dd
:
dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512
Es una matriz de 2TB y mi MacBook (con Linux, ¿de acuerdo?) Solo puede escribir datos a alrededor de 3.7MB / s, lo cual es bastante patético ya que he visto que mi escritorio en casa hace 20MB / s. Cuando vaya a casa esta noche, me gustaría detener la dd
carrera aquí, llevarla a casa y ver qué tipo de progreso se puede hacer de la noche a la mañana con una máquina más poderosa.
He estado monitoreando el progreso usando un bucle simple:
while true; do kill -USR1 $PID ; sleep 10 ; done
El resultado se ve así:
464938971+7 records in
464938971+7 records out
238048755782 bytes (238 GB) copied, 64559.6 s, 3.7 MB/s
Si dd
tuviera que reanudar el pase en casa, ¿cómo lo reiniciaría? Soy consciente del seek
parámetro, pero ¿a qué lo apunto, el número de registro o el recuento de bytes?
seek=464938960
Respuestas:
Como @don_crissti ya comentó, solo use
seek=
para reanudar.GNU dd
también admite la búsqueda en bytes, por lo que puede reanudar exactamente, independientemente del tamaño de bloque: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
cryptsetup plainOpen
hacerlo con una clave aleatoria y ponerla a cero, debería vencer/dev/urandom
por un orden de magnitud (sin AES-NI) o incluso correr a toda velocidad (con AES-NI).También podría usar
shred -n 1
si los datos pseudoaleatorios son lo suficientemente buenos para su caso de uso.shred
debería poder utilizar la velocidad total del disco, incluso en una máquina muy lenta.fuente
plainOpen
hasta ahora. ¡Excelente! Terminé mi codificación de una unidad de 2 TB en alrededor de 4 horas en lugar de 256 GB en más de 12 usando/dev/urandom
.Sólo un recordatorio para las personas que deseen copiar en lugar de discos sólo asignaron al azar (que no es que común): se puede usar
skip=BLOCKS
para iniciar la lectura en la posición correcta, yseek=BLOCKS
para empezar a escribir en la posición correcta. Ambas opciones usan bloques, no bytes. Al romper / reiniciar, es recomendable eliminar un montón de bloques por si acaso. Por lo general, vale la pena elevar elbs
valor por encima de 512, ya que puede alcanzar un mejor rendimiento si lee muchos datos seguidos.En su caso, es un valor de bloque al que debe pasar
seek
. Tal vez debería intentar ajustarbs
para ver si puede mejorar la velocidad, ya que/dev/random
debería ir rápido (pseudoaleatorio y sin bloqueo cuando no tiene entropía disponible)fuente
dd
con un tamaño de bloque pequeño como 512 bytes es probable que sea mucho más lento que el rendimiento máximo de su disco. Utilice un tamaño de bloque más alto (en una corazonada, diría que algunos MB) para un buen rendimiento. O usecat
: en Linux encontrécat
que era tan rápido comodd
con el tamaño de bloque óptimo cuando estaba involucrado un solo disco (no sé si eso también es válido para OSX).Para encontrar qué tan lejos
cat
ha llegado, ejecutelsof -p1234
donde 1234 es la ID delcat
proceso.Para reanudar desde una posición, use
donde 123456 es el desplazamiento en bytes.
fuente
Clonando un disco:
Ampliando esta respuesta desde este hilo, así es como se podría clonar un disco completo y reanudar:
Este ejemplo está optimizado para copiar desde un disco rotativo de 5400 rpm a un SSD en un sistema específico.
gdd
representaGNU dd
:Puedo resumir esto de una de dos maneras:
O:
En el primer ejemplo, la razón por la que usamos
59011
y no59012
, es porque59011
es cuántos registros de tamaño de bloque se copiaron completamente antes de ser interrumpidos. (registros).fuente