Как создать загрузочный USB из загрузочного ISO с помощью командной строки в Linux?

50

У меня есть компакт-диск, созданный из файла ISO, который я использую для установки пользовательской версии Ubuntu через plop linux.

Компакт-диск работает нормально, но я бы хотел вместо этого использовать загрузочный USB-накопитель. Я использовал команду dd, чтобы попытаться создать загрузочный USB:

dd if=filename.iso of=/dev/sdb1 bs=4k

Теперь это копирует файлы и делает загрузочный USB, но я получаю сообщение об ошибке «Отсутствует операционная система»

Есть идеи?

xsdf
источник
У вас есть только доступ к командной строке? Есть такие интерфейсы, как Unetbootin, которые работают очень хорошо и работают на Linux ..
инструментов
3
@dashboard Я бы предпочел командную строку, потому что она доступна на любой машине Linux.
xsdf
askubuntu.com/questions/116942/…
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件
@dashboard - мне кажется, что инструменты с графическим интерфейсом никогда не работают хорошо, и это верно в течение многих лет. Я счастлив узнать метод командной строки. Я считаю это проще и надежнее. Это намного менее расстраивает!
MountainX

Ответы:

58

Хорошо, после некоторого исследования я нашел решение, и я пройдусь по нему шаг за шагом. Проблема была двоякая.

  1. Подключите USB-накопитель и определите устройство, на котором он установлен, с помощью команды:

    sudo fdisk -l
    

    На этот раз это был / dev / sdc1 для меня, поэтому я буду использовать это в качестве примера.

  2. Размонтировать устройство

    umount /dev/sdc1
    
  3. Не уверен, если нужно, но я отформатировал диск в FAT32, на всякий случай

    sudo mkdosfs -n 'USB-Drive-Name' -I /dev/sdc -F 32
    
  4. Теперь мой ISO использовал isolinux, а не syslinux. Я знал, что это работает с компакт-дисками, поэтому я понял, что мне нужно вызвать изогибридную команду, которая позволяет ISO распознавать BIOS с жесткого диска.

     isohybrid filename.iso
    

    Вы можете узнать больше об этой команде здесь , но это было причиной сообщения «Отсутствует операционная система». Первая проблема была исправлена, но теперь она сказала, что «isolinux.bin отсутствует или поврежден»

  5. Следующим шагом является копирование ISO. Моя вторая проблема лежала здесь, где я копировал в раздел, sdc1, а не устройство, sdc.

    sudo dd if=filename.iso of=/dev/sdc bs=4k
    

    Кажется, это работает нормально, но на форуме, где я получил последнее исправление, было рекомендовано сделать следующее, прежде чем отключать устройство:

    sync
    sudo eject /dev/sdc
    
xsdf
источник
3
Вот способ проверить прогресс dd: unix.stackexchange.com/a/11264/13011 .
Никос Александрис
3
Делая здесь предположение, я думаю, что mkdosfsкоманда может быть необязательной, поскольку в iso уже есть файловая система (вероятно, включая MBR, не уверенная), которая копируется в начало блочного устройства. Мужик, isohybridклассная команда, не знал об этом!
Этеш Чоудхури
1
для загрузочной Windows 7 установите USB, также см. superuser.com/questions/256869/…
cwd
7
Шаг № 3 не нужен; ddкоманда в шаге 5 будет уничтожить вновь созданную файловую систему с содержимым ISO.
Ewhac
Я почти 12 часов ищу эту же проблему, пока не найду твой пост здесь, и я следил и шагал, и ... это сработало! (шаг 5 был моей проблемой, я еще не proв Linux, так что спасибо)
Исмаэль
3

Это распространенная проблема с USB-накопителями SanDisk или накопителями, не отформатированными в FAT32.

Если нет ни одного из них, то это, безусловно, проблема с порядком разделов флешки или файлом syslinux.cfg.

Шоувик Сайеф
источник
Флешка от Verbatim. Я переформатировал в FAT32 просто чтобы быть уверенным и все еще получил ту же ошибку.
xsdf
1

isohybridможет не всегда работать. Например, у меня был .iso с FreeDOS, и isohybrid не смог там найти некоторые важные файлы (я не знаю, должны ли они были туда помещены syslinux, который я тоже использовал, или что-то еще). Я предлагаю несколько альтернатив здесь.

1) Установите другой загрузчик, такой как GRUB. Это объясняется здесь :

«Предположим, что первый раздел вашего USB-накопителя - FAT32, а его раздел - / dev / sdy1» (у меня был grub2на Fedora Core, поэтому я немного изменил команды):

# mkdir -p /mnt/usb ; mount /dev/sdy1 /mnt/usb
# grub2-install --target=i386-pc --recheck --debug --boot-directory=/mnt/usb/boot /dev/sdy
# grub2-mkconfig -o /mnt/usb/boot/grub2/grub.cfg

# optional, backup config files of grub.cfg
# mkdir -p /mnt/usb/etc/default
# cp /etc/default/grub /mnt/usb/etc/default
# cp -a /etc/grub.d /mnt/usb/etc

# sync; umount /mnt/usb

2) FreeDOS вики предлагает метод соединения с резьбовыми и SysLinux здесь (хотя я не понимаю , как они начали grub>- я не мог загрузиться с USB до этой стадии).

3) Вот пост, который может быть полезен - он говорит: «Пока файлы command.com, kernel.sys, syslinux.cfg, ldlinux.sys и fat32lba.bss находятся в корне диска, а MBR и загрузочный сектор не перезаписан, диск должен оставаться загрузочным. '

4) Здесь объясняется, как создать загрузочный файл .iso с загрузчиком syslinux. Они даже не используют изогибрид. К сожалению, это не помогло мне (возможно, из-за syslinux).

5 *) Используйте программу Windows через wine. Я попробовал rufus, однако это не сработало, оно не смогло найти устройство.

Я предупреждаю вас, что, к сожалению, я не смог решить эту проблему, мое устройство не загружалось, но я надеюсь, что это может быть полезно для других людей (также тех, кто хочет установить не Linux на USB). Изображение usb, сгенерированное chtaube, хотя и сработало для меня, поэтому я думаю, что эти методы верны.

UPD: 3-й способ действительно работает (с исправлением для пользовательского установочного файла).

UPD2: (фиксированные ссылки). Возможно, проблема isohybridбыла в том, что версии isolinux.bin на iso и моей системе были разными. Перекомпилировал iso, используя genisoimageпредложенное здесь :

genisoimage -l -r -J -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -c isolinux/boot.cat -o fd11new.iso fd11new

Были также некоторые проблемы, они были решены с помощью метода, который был здесь до genisoimage:

cp /boot/extlinux/*.c32 fd11new/isolinux/
extlinux --install /boot/isolinux

== конец UPD2 ==

Ярослав Никитенко
источник
1-я ссылка: wiki.archlinux.org/index.php/GRUB#Install_to_external_USB_stick
Ярослав Никитенко,
2-й: freedos.sourceforge.net/wiki/index.php/USB#Linux_2 Вы можете добавить эти ссылки в сообщение, если система доверяет вам больше, чем мне. StackOverflow уже хорошо меня знает, так почему такая проблема у суперпользователя? Также у меня были проблемы с публикацией этого, это не показывало, что мой ответ уже был опубликован.
Ярослав Никитенко
Кажется, суперпользователь считает ссылки по их ссылкам, т.е. если я дважды ссылаюсь на один и тот же ресурс, он считается. Это похоже на ошибку. Обходной путь в UPD произошел от spiderbird.com/tag/fat32lba-bss
Ярослав Никитенко
Все ссылки в комментариях исправлены. Я оставляю их здесь, чтобы показать, сколько проблем приносит эта политика.
Ярослав Никитенко
0

Вы можете использовать bootisoутилиту , которая делает именно это, безопасно:

bootiso -d /dev/sdb filename.iso

bootiso проверит, что выбранное устройство /dev/sdbподключено через USB и, если оно этого не сделает, произойдет сбой, что является большим плюсом безопасности Он также автоматически обнаружит USB-устройство, если к вашей системе подключен только один USB-накопитель, посмотрите его в действии:

Если вы хотите установить загрузчик syslinux, чтобы обойти проблемы, упомянутые в @xsdf, используйте -bпараметр:

 bootiso -b -d /dev/sdb filename.iso

Чтобы установить его:

curl -L https://rawgit.com/jsamr/bootiso/latest/bootiso -O
chmod +x bootiso
Жюль Рэндольф
источник