1 votos

`dd` nunca termina en OS X

Funcionando tanto en Linux como en OS X (10.10.5), estoy utilizando la herramienta de línea de comandos dd para copiar el contenido de una memoria USB desde y hacia un archivo comprimido. Para crear el archivo, utilizo lo siguiente en una unidad sin montar (en Linux el formato es algo así como /dev/sdb en OS X es algo como /dev/disk2 ):

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

que copia todo el contenido de la unidad, lo comprime y luego lo escribe en disk.image.gz . Para descomprimir la imagen en una unidad nueva, utilizo:

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

que toma la imagen de disco comprimida, la descomprime y la graba en la unidad. (Puede comprobar el progreso de cualquiera de los comandos ejecutando lo siguiente en una ventana independiente en Linux:

sudo killall -USR1 dd

o en OS X:

sudo killall -INFO dd

que en ambos casos señala dd 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, a pesar de que el archivo de origen (descomprimido) ha terminado, y la unidad de disco debería estar llena. Si espero hasta que se hayan escrito 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 correctamente. Pero, me preocupa que el comportamiento no es lo que espero.

¿Alguna idea de por qué dd ¿la escritura no termina nunca, aunque ya no reciba datos?

(BTW: si estás usando esto como instrucciones para grabar tus 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 le dices que haga, así que si te equivocas de identificador y le dices que sobrescriba tu unidad de arranque, lo hará encantado. Mira en otro sitio cómo determinar el dispositivo correcto).

1 votos

¿Seguro que los identificadores de las unidades son correctos? En OS X, son /dev/disk1 , /dev/disk2 etc.

0 votos

Sí; mis ejemplos usaban los identificadores de Linux, pero en OS X usaba /dev/disk2 (comprobando tres veces para no destrozar mi disco de arranque). Voy a aclarar en la pregunta.

0 votos

@DanielGriscom Es posible que desee utilizar cp en lugar de dd si no tiene necesidades especiales y sólo desea copiar el contenido de un dispositivo de bloque.

2voto

jojayontour Puntos 36

Puede que esto no responda realmente a la pregunta, pero podría aportar una solución.

En lugar de utilizar dd que parece comportarse de manera extraña para usted, sólo tiene que utilizar cat o cp . Al menos en OS X, funcionan muy bien en dispositivos de bloque. Así que:

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, sólo tiene que redirigir gunzip de salida:

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 sólo 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 sólo 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 problemas con el tamaño de los bloques.

0 votos

Acabo de probar lo anterior gunzip -c disk.image.gz | sudo tee /dev/disk1 > /dev/null dos veces. Falló una vez (continuó mucho más de lo esperado; no pude medir los datos transferidos porque no estaba usando dd ), y tuvo éxito una vez. Parece que algo más está pasando.

0 votos

@DanielGriscom Existe un proyecto de código abierto llamado progress anteriormente denominada cv que muestra el progreso de muchas utilidades. Tal vez quieras probar esto.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X