У меня есть 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
и снова подключите устройство, инастоящийузел устройства должен появиться снова.