dd применен к dev USB перед подключением повредил /dev/sdX и не работает

dd применен к dev USB перед подключением повредил /dev/sdX и не работает

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

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

Если я скопирую ISO с помощью ddsudo 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

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

Проблема в том, что иногда я забываю подключить USB после обновления BIOS, поэтому я делаю это БЕЗ подключенного 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

Узлы устройств /dev/sd*отображаются только в /devпосле подключения устройства, не раньше. (И они не называются «регистрами».) Поэтому, когда вы запускали dd of=/dev/sdbего, он фактически не касался никакого устройства – вместо этого, поскольку выходной файл не существовал,dd созданныйновый файл с таким именем.

$ sudo dd if=archlinux-2016.04.01-dual.iso of=/dev/sdc
1482752+0 записей в
1482752+0 записей вышло
759169024 байт (759 МБ, 724 МиБ) скопировано, 0,941926 с, 806 МБ/с

$ ls -l /dev/sd*
brw-rw---- 1 корневой диск 8, 0 июн 15 08:54 /dev/sda
brw-rw---- 1 корневой диск 8, 16 июня 15 14:14 /dev/sdb
-rw-r--r-- 1 root root 724M 15 июня 15:06 /dev/sdc

Так что на самом деле нет ничего, что могло бы быть "повреждено", и нет ничего, что имело бы смысл "исправлять" или ddrescue. У вас просто есть огромный файл с именем /dev/sdb, и поскольку он существует, ядро ​​не может создать там реальный узел устройства.

(Скорость записи вполне понятна – /devона хранится в ОЗУ, так что вы просто скопировали образ из ОЗУ, где он был кэширован, обратно в ОЗУ, где находится /dev.)

Удалите /dev/sdbи снова подключите устройство, инастоящийузел устройства должен появиться снова.

Связанный контент