2 votos

¿Por qué no funciona la puesta a cero de una unidad con dd?

Estoy usando MacOS Catalina.

Tengo una tarjeta microSD de 16GB que tenía Raspbian, que son 2 particiones:

  • Partición de arranque de 45 MB
  • gran partición de Linux

Necesitaba borrarlo, así que conecté la tarjeta SD a mi Mac e hice esto:

$ sudo bash -c 'gdd if=/dev/zero of=/dev/rdisk2 bs=4M; sync'

gdd es la versión GNU de dd Instalado con homebrew.

/dev/disk2 es definitivamente la tarjeta microSD correcta que estoy poniendo a cero, confirmado con la Utilidad de Discos.

Yo uso rdisk en lugar de disk porque es mucho más rápido y apunta al mismo disco.

Cuando el comando comienza a ejecutarse, la utilidad de discos de MacOS muestra que el nombre de la unidad cambia de "boot" a algo como "Generic Flash Device" o algo así, así que sé que definitivamente está haciendo algo.

gdd se ejecuta durante un tiempo, y después de unos minutos, muestra esto:

gdd: error writing '/dev/rdisk2': Input/output error
3799+0 records in
3798+0 records out
15931539456 bytes (16 GB, 15 GiB) copied, 419.932 s, 37.9 MB/s

El error tiene sentido, ya que intenta escribir ceros en la tarjeta microSD hasta que se queda sin espacio. En este punto, la tarjeta SD debería contener todos los ceros. He hecho esto literalmente docenas de veces en Linux. Nunca falla. Incluso he hecho esto con éxito en High Sierra docenas de veces.

Lo que no tiene sentido para mí es que tan pronto como el gdd proceso termina de ejecutarse, la Utilidad de Discos vuelve a mostrar la tarjeta SD como "de arranque", se monta automáticamente en /Volumes/boot y los archivos siguen ahí. ¿Cómo es que gdd muestra que ha escrito con éxito toda la tarjeta SD llena de ceros, y sin embargo los datos siguen ahí?

Actualización: El Mac en el que estaba haciendo esto casualmente tenía VMware fusion en él, así que hice esto:

  • Creé una VM, le adjunté la ISO de Arch Linux y la arranqué
  • Conectar el dispositivo lector de tarjetas USB a la VM
  • Usé dd en Arch para poner a cero la unidad

Apagué la VM, y el dispositivo USB se volvió a conectar al MacOS. Exactamente lo mismo - la partición de "arranque" todavía está allí, todavía auto-monta, y tiene todos los archivos allí. ¿Qué está pasando?

Actualización 2: Parece que no puedo borrar las particiones. Utilizo la VM de Arch, y o bien fdisk o cfdisk para borrar las 2 particiones de la tarjeta SD, dice que las ha borrado con éxito, pero en cuanto vuelvo a comprobarlo, las particiones siguen ahí. La tarjeta SD es nueva. No veo ningún error de E/S al leer o escribir en ella que pueda sugerir que está dañada.

Actualización 3: Ni siquiera puedo borrar los archivos. Monto cualquiera de las dos particiones bajo Arch, uso rm -rf * para eliminar TODOS los archivos de esa partición, y ls muestra que se han ido. Desmonto la partición, e inmediatamente la vuelvo a montar, y todos los archivos siguen ahí.

1 votos

¿Por qué no utilizar diskutil para borrar y preparar esto?

0 votos

Sobre todo porque soy un tipo de Linux - no un tipo de mac. ¿Importa? Se supone que MacOS da a cualquier proceso que tenga permisos para leer o escribir en /dev/rdiskX acceso absoluto al dispositivo. dd se ha utilizado para operaciones de disco de bajo nivel durante décadas. ¿Estoy equivocado?

0 votos

¿Desmontó/expulsó la unidad antes de ejecutar dd ?

1voto

Douglas Puntos 10417

El error tiene sentido, ya que intenta escribir ceros en la tarjeta microSD hasta que se queda sin espacio.

Has interpretado mal el error.

gdd: error writing '/dev/rdisk2': Input/output error

Eso significa que hubo un error escribir al dispositivo. El comando que emitió debe hacer lo que quieres - llenar la unidad con ceros, pero este error dice lo contrario.

Lo que no tiene sentido para mí es que tan pronto como el proceso de la gdd termina de ejecutarse, la Utilidad de Discos muestra la tarjeta SD como "boot" de nuevo, se monta automáticamente en /Volumes/boot, y los archivos siguen ahí. ¿Cómo es que la gdd muestra que ha escrito con éxito toda la tarjeta SD llena de ceros, y sin embargo los datos siguen ahí?

gdd no hizo tal cosa. Te dio un mensaje de error de E/S cuando estaba escribiendo en el dispositivo. Tus archivos originales están ahí porque no se escribió nada en la tarjeta SD.

Posibles causas:

  • La tarjeta podría estar protegida contra escritura
  • La tarjeta podría ser defectuosa (especialmente si es falsa, es decir, si dice que tiene 16 GB pero sólo tiene 2 GB de almacenamiento real)
  • El lector de tarjetas USB podría estar defectuoso

0 votos

1. No tardó 419 segundos a 37,9 MB/s en hacer nada. Definitivamente hizo algo. 2. Cuando no le das a dd un límite de datos para leer o escribir, lee hasta que el origen se queda sin datos, o el destino se queda sin espacio. /dev/zero nunca se va a quedar sin datos. /dev/rdisk2 NO tiene espacio ilimitado. Se va a quedar absolutamente sin espacio, tan pronto como se hayan escrito todos los bloques. Esto tiene todo el sentido, y sucede cada vez, en cada uno de los sistemas en los que he ejecutado esto, que son fácilmente más de cien veces. Este error es esperado

0 votos

Tengo nunca ha obtenido un error de E/S en cualquier dispositivo que estaba funcionando correctamente. dd no escribe datos hasta que se produce un error, y si lo hiciera obtendrías el error "No hay espacio en el dispositivo" en lugar de un error de E/S. Y hablando desde un punto de vista totalmente pragmático, esa es una forma horrible de indicar a un usuario "proceso terminado".

0 votos

Dd es de bajo nivel. No tiene idea, y no le importa, de dónde está leyendo o a qué está escribiendo. Sólo las interfaces (file/stdin/etc). No te va a decir "tu tarjeta SD se quedó sin espacio". Te dice exactamente el error con el que se encontró - no pudo escribir más. Además, yo uso dd todo el tiempo, pero estoy seguro de que hay cientos de usos de dd que no he probado. El hecho de que nunca te hayas encontrado con esto no significa que no sea lo esperado. Sólo significa que nunca has intentado poner a cero un dispositivo. Pruébalo. Puedo garantizar que verás un error muy similar a este, dependiendo de tu versión de dd

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