dd aplicado al dev USB antes de conectar /dev/sdX corrupto y no funciona

dd aplicado al dev USB antes de conectar /dev/sdX corrupto y no funciona

Tengo un USB donde tengo una ISO de 5 Mb aprox con un pequeño SO con grub propio. Si conecto el dispositivo y lo compruebosudo fdisk -lYo obtengo:

...
Device     Boot Start   End Sectors  Size Id Type
/dev/sdb1  *        1  9551    9551  4.7M cd unknown

Si copio con dd la ISOsudo dd if=my_os.iso of=/dev/sdb

14852+0 records in
14852+0 records out
7604224 bytes (7.6 MB) copied, 0.538487 s, 14.1 MB/s

Funciona perfectamente. Un arranque desde BIOS en otra PC.

El problema es que a veces me olvido de conectar el USB después de actualizar el BIOS, así que lo hago SIN el USB conectado, la salida es:

14852+0 records in
14852+0 records out
7604224 bytes (7.6 MB) copied, 0.00987684 s, 770 MB/s

Ahora, el registro /dev/sdb está dañado, la velocidad de copia (770 MB/s) no tiene sentido y no se puede volver a utilizar dd hasta que se reinicie.

He intentado repararlo con ddrescue y no funciona.

sudo ddrescue /dev/zero /dev/sdb conv=noerror,sync

Mi pregunta es, ¿qué está sucediendo exactamente y, si es posible, cómo reparar /dev/sdb para evitar reiniciar y comenzar a funcionar nuevamente?

Gracias.

Respuesta1

Los nodos de dispositivos como /dev/sd*solo aparecen en /devdespués de conectar el dispositivo, no antes. (Además, no se llaman "registros".) Entonces, cuando lo ejecutó, dd of=/dev/sdben realidad no tocó ningún dispositivo; en cambio, como el archivo de salida no existía,dd creadoun nuevo archivo con ese nombre.

$ sudo dd if=archlinux-2016.04.01-dual.iso of=/dev/sdc
1482752+0 registros en
1482752+0 registros eliminados
759169024 bytes (759 MB, 724 MiB) copiados, 0,941926 s, 806 MB/s

$ ls -l /dev/sd*
brw-rw---- 1 disco raíz 8, 0 15 de junio 08:54 /dev/sda
brw-rw---- 1 disco raíz 8, 16 15 de junio 14:14 /dev/sdb
-rw-r--r-- 1 raíz raíz 724M 15 de junio 15:06 /dev/sdc

Así que realmente no hay nada que pueda haber sido "corrompido" y nada que tenga sentido "reparar" o rescatar. Simplemente tiene un archivo enorme llamado /dev/sdb, y como existe, el kernel no puede crear un nodo de dispositivo real allí.

(La velocidad de escritura tiene mucho sentido: /devse almacena en la RAM, por lo que simplemente copió la imagen de la RAM, donde estaba almacenada en caché, de regreso a la RAM, donde vive /dev).

Elimine /dev/sdby vuelva a conectar el dispositivo, y elrealEl nodo del dispositivo debería reaparecer.

información relacionada