Как создать загрузочный USB из загрузочного ISO с помощью командной строки в Linux?
У меня есть компакт-диск, созданный из файла ISO, который я использую для установки пользовательской версии Ubuntu через plop linux.
Компакт-диск работает нормально, но я бы хотел вместо этого использовать загрузочный USB-накопитель. Я использовал команду dd, чтобы попытаться создать загрузочный USB:
dd if=filename.iso of=/dev/sdb1 bs=4k
Теперь это копирует файлы и делает загрузочный USB, но я получаю сообщение об ошибке "Отсутствует операционная система"
Есть идеи?
4 ответа
Хорошо, после некоторого исследования я нашел решение, и я пройдусь по нему шаг за шагом. Проблема была двоякая.
Подключите USB-накопитель и определите устройство, на котором он установлен, с помощью команды:
sudo fdisk -l
На этот раз это был /dev/sdc1 для меня, поэтому я буду использовать это в качестве примера.
Размонтировать устройство
umount /dev/sdc1
Не уверен, если нужно, но я отформатировал диск в FAT32, на всякий случай
sudo mkdosfs -n 'USB-Drive-Name' -I /dev/sdc -F 32
Теперь мой ISO использовал isolinux, а не syslinux. Я знал, что это работает с компакт-дисками, поэтому я понял, что мне нужно вызвать изогибридную команду, которая позволяет ISO распознавать BIOS с жесткого диска.
isohybrid filename.iso
Вы можете узнать больше об этой команде здесь, но это было причиной сообщения "Отсутствует операционная система". Первая проблема была исправлена, но теперь она сказала, что "isolinux.bin отсутствует или поврежден"
Следующим шагом является копирование ISO. Моя вторая проблема лежала здесь, где я копировал в раздел, sdc1, а не устройство, sdc.
sudo dd if=filename.iso of=/dev/sdc bs=4k
Кажется, это работает нормально, но на форуме, где я получил последнее исправление, было рекомендовано сделать следующее, прежде чем отключать устройство:
sync sudo eject /dev/sdc
Это распространенная проблема с USB-накопителями SanDisk или накопителями, не отформатированными в FAT32.
Если нет ни одного из них, то это, безусловно, проблема с порядком разделов флешки или файлом syslinux.cfg.
isohybrid
может не всегда работать. Например, у меня был.iso с FreeDOS, и isohybrid не смог там найти некоторые важные файлы (я не знаю, должны ли они были туда помещены syslinux, который я тоже использовал, или что-то еще). Я предлагаю несколько альтернатив здесь.
1) Установите другой загрузчик, такой как GRUB. Это объясняется здесь:
"Предположим, что первый раздел вашей флешки - это 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 wiki предлагает здесь составной метод с GRUB и 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 ==
Вы могли бы использовать 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