'dd' nunca termina en OS X

0

Trabajando en Linux y OS X (10.10.5), estoy usando la herramienta de línea de comandos dd para copiar el contenido de una unidad flash USB desde y hacia un archivo comprimido. Para crear el archivo, uso lo siguiente en una unidad desmontada (en Linux, el formato es algo así como /dev/sdb ; en OS X es algo así como /dev/disk2 ):

sudo dd if=/dev/disk1 bs=1m | gzip -c > disk.image.gz

que copia todo el contenido del disco, lo comprime y luego lo escribe en disk.image.gz . Para desempaquetar la imagen en una nueva unidad, uso:

cat disk.image.gz | gunzip -c | sudo dd of=/dev/disk1 bs=1m

que toma la imagen del disco comprimido, la descomprime y luego la escribe en la unidad. (Puede verificar el progreso de cualquiera de los comandos ejecutando lo siguiente en una ventana separada en Linux:

sudo killall -USR1 dd

o en OS X:

sudo killall -INFO dd

que en ambos casos señala a dd para generar un par de líneas sobre la cantidad de datos transferidos.)

Ambos procesos funcionan bien en Linux. Sin embargo, aunque la lectura y la compresión funcionan bien en OS X, la descompresión y la escritura nunca terminan. dd sigue escribiendo datos y más datos, incluso aunque el archivo de origen (descomprimido) haya finalizado y la unidad de disco esté llena. Si espero hasta que se escriban más datos de los que deberían caber en la unidad flash, y luego ^C para finalizar el comando, la unidad resultante parece montarse y funcionar bien. Pero, me preocupa que el comportamiento no sea lo que espero.

¿Alguna idea de por qué dd la escritura nunca termina, a pesar de que ya no está recibiendo datos?

(BTW: si está utilizando esto como instrucciones para grabar sus propias unidades de disco, ASEGÚRESE tiene los identificadores de dispositivo correctos (por ejemplo, el /dev/sdb o /dev/disk2 mencionado anteriormente). dd hace exactamente lo que usted le dice que haga, así que si obtiene el identificador incorrecto y le dice que sobrescriba su unidad de arranque, con mucho gusto lo hará. Busque en otra parte cómo determinar el dispositivo correcto.)

    
pregunta Daniel Griscom 05.04.2017 - 15:16

1 respuesta

1

Esto podría no responder realmente a la pregunta, pero podría proporcionar una solución.

En lugar de usar dd que parece comportarse de manera extraña para ti, solo usa cat o cp . Al menos en OS X, funcionan muy bien en dispositivos de bloque. Entonces:

sudo dd if=/dev/disk1 bs=1m | gzip -c > disk.image.gz

se convierte en

sudo cat /dev/disk1 | gzip -c > disk.image.gz

Si desea lo contrario, simplemente redirija la salida de gunzip :
cat disk.image.gz | gunzip -c | sudo dd of=/dev/disk1 bs=1m

se convierte en

gunzip -c disk.image.gz | sudo tee /dev/disk1 > /dev/null

Si solo desea copiar un dispositivo de bloque

sudo dd if=/dev/disk1 of=disk.image bs=1m

se convierte en

sudo cp /dev/disk1 disk.image

Si solo desea copiar una imagen a un dispositivo de bloque (por ejemplo, Raspbian a la tarjeta SD)

sudo dd if=disk.image of=/dev/disk1 bs=1m

se convierte en

sudo cp disk.image /dev/disk1

Esto también evita cualquier problema con los tamaños de bloque.

    
respondido por el Max Ried 05.04.2017 - 16:40

Lea otras preguntas en las etiquetas