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/sdb
en 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: /dev
se 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/sdb
y vuelva a conectar el dispositivo, y elrealEl nodo del dispositivo debería reaparecer.