dd обратился к dev USB перед тем, как подключить поврежденный / dev / sdX и не работает

252
vgonisanz

У меня есть USB, где я копирую ISO размером 5 Мб с небольшой ОС с собственным grub. Если я подключаю устройство и проверяю его sudo fdisk -l, я получаю:

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

Если я копирую с dd ISO sudo dd if = my_os.iso из = / dev / sdb

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

Работает отлично. Загрузка из BIOS на другом ПК.

Проблема в том, что иногда я забываю подключить USB после обновления BIOS, поэтому я делаю ff БЕЗ подключенного USB, вывод:

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

Теперь регистр / dev / sdb поврежден, скорость копирования (770 МБ / с) не имеет смысла и не может снова использовать dd до перезагрузки.

Я пытался восстановить его с помощью ddrescue, и он не работает

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

У меня вопрос, что именно происходит, и если это возможно, как восстановить / dev / sdb, чтобы избежать перезагрузки и dd снова начать работать?

Благодарю.

1

1 ответ на вопрос

5
grawity

Device nodes like /dev/sd* only show up in /dev after the device is connected, not before. (Also, they aren't called "registers".) So when you ran dd of=/dev/sdb it didn't actually touch any device – instead, since the output file didn't exist, dd created a new file by that name.

$ 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 

So there's really nothing that could have been "corrupted", and nothing that makes sense to "repair" or ddrescue. You simply have a huge file named /dev/sdb, and because it exists, the kernel can't create a real device node there.

(The write speed makes perfect sense – /dev is stored in RAM, so you just copied the image from RAM, where it was cached, back to RAM, where /dev lives.)

Delete /dev/sdb and reconnect the device, and the real device node should reappear.