dd aplicado ao dev USB antes de conectar /dev/sdX corrompido e não funcionar

dd aplicado ao dev USB antes de conectar /dev/sdX corrompido e não funcionar

Eu tenho um USB onde estou lidando com um ISO de aproximadamente 5 Mb com um pequeno sistema operacional com seu próprio grub. Se eu conectar o dispositivo e verificarsudo fdisk -lEu recebo:

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

Se eu copiar com dd o ISOsudo dd if=meu_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 perfeitamente. Uma inicialização do BIOS em outro PC.

O problema é que às vezes esqueço de conectar o USB após atualizar o BIOS, então faço sem o USB conectado, a saída é:

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

Agora, o registro /dev/sdb está corrompido, a velocidade de cópia (770 MB/s) não faz sentido e não pode ser usado novamente dd até a reinicialização.

Já tentei reparar com ddrescue e não funciona

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

Minha pergunta é: o que está acontecendo exatamente e, se possível, como reparar /dev/sdb para evitar a reinicialização e o dd começar a funcionar novamente?

Obrigado.

Responder1

Nós de dispositivos como /dev/sd*aparecem apenas em /devdepois que o dispositivo estiver conectado, não antes. (Além disso, eles não são chamados de "registros".) Então, quando você o executou, dd of=/dev/sdbele não tocou em nenhum dispositivo - em vez disso, como o arquivo de saída não existia,dd criadaum novo arquivo com esse nome.

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

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

Portanto, não há realmente nada que possa ter sido "corrompido" e nada que faça sentido "reparar" ou ddrescue. Você simplesmente tem um arquivo enorme chamado /dev/sdbe, como ele existe, o kernel não pode criar um nó de dispositivo real ali.

(A velocidade de gravação faz todo o sentido – /devé armazenada na RAM, então você apenas copiou a imagem da RAM, onde ela foi armazenada em cache, de volta para a RAM, onde fica /dev.)

Exclua /dev/sdbe reconecte o dispositivo e orealo nó do dispositivo deve reaparecer.

informação relacionada