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

1

Eu tenho um USB onde estou lidando com um ISO de 5 Mb aprox com um pequeno sistema operacional com seu próprio grub. Se eu conectar o dispositivo e verificar isso sudo fdisk -l eu recebo:

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

Se eu copiar com dd o ISO sudo dd if = my_os.iso de = / 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 da BIOS em outro PC.

O problema é, às vezes eu esqueço de conectar o USB depois de atualizar o BIOS, então eu faço ff 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 registrador / dev / sdb está corrompido, a velocidade de cópia (770 MB / s) não tem sentido e o usuário não pode gravar novamente até a reinicialização.

Eu tentei repará-lo com o 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 reiniciar e dd começar a trabalhar novamente?

Obrigado.

    
por vgonisanz 15.06.2016 / 10:46

1 resposta

5

Nós de dispositivo como /dev/sd* são exibidos apenas em / dev depois que o dispositivo é conectado , não antes. (Além disso, eles não são chamados de "registradores".) Então, quando você executou dd of=/dev/sdb , ele não tocou em nenhum dispositivo - em vez disso, como o arquivo de saída não existia, dd foi criado um novo arquivo com esse nome.

$ sudo dd if=archlinux-2016.04.01-dual.iso of=/dev/sdc
1482752+0 records in
1482752+0 records out
759169024 bytes (759 MB, 724 MiB) copied, 0.941926 s, 806 MB/s

$ ls -l /dev/sd*
brw-rw---- 1 root disk 8,  0 Jun 15 08:54 /dev/sda
brw-rw---- 1 root disk 8, 16 Jun 15 14:14 /dev/sdb
-rw-r--r-- 1 root root  724M Jun 15 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/sdb e, como ele existe, o kernel não pode criar um nó de dispositivo real lá.

(A velocidade de gravação faz todo o sentido - /dev é armazenado na RAM, então você acabou de copiar a imagem da RAM, onde ela foi armazenada em cache, de volta à RAM, onde / dev mora.)

Apague /dev/sdb e reconecte o dispositivo, e o nó do dispositivo real deve reaparecer.

    
por 15.06.2016 / 14:01

Tags