Как мне выполнить цепную загрузку от grub до syslinux?

Я расширяю мою спасательную флешку. Раздел USB является загрузочным, и я установил GRUB в MBR диска перехода. Это работает довольно хорошо - я могу загрузить Freedos и запустить некоторые утилиты, и я могу загрузить PING.

Я хотел бы добавить Ubuntu 9.10 LiveCD к этому спасательному USB-накопителю. У меня есть рабочий прыжковый привод, поэтому я могу довольно легко копировать файлы. Я мог бы выследить необходимое menu.lst записи, необходимые для GRUB, но Ubuntu LiveUSB использует довольно сложную конфигурацию syslinux. Кроме того, я бы хотел сохранить как можно больше текущего стиля LiveCD/LiveUSB, не перенося конфигурацию syslinux на GRUB.

По предложению ~ шарлатана я попробовал menu.lst запись:

 title Ubuntu 9.10 LiveCD
 root=(hd0,0)
 kernel /ubuntu-9.10/syslinux/isolinux.bin

но GRUB ответил с Error 13: Invalid or unsupported executable format, В командной строке GRUB я попытался:

 grub> root=(hd0,0)
 grub> kernel /syslinux/isolinux.bin

потому что у меня есть второй isolinux.bin файл в этом месте, но GRUB ответил с той же ошибкой. Я также попробовал:

 grub> chainloader /syslinux/isolinux.bin

и снова получил ошибку 13. Наконец, я попытался в командной строке GRUB:

 grub> root=(hd0,0)
 grub> kernel /ubuntu-9.10/install/mt86plus
 grub> boot

и это сработало

Что мне действительно нужно, так это способ, чтобы GRUB вызывал загрузчик syslinux/isolinux. Тогда syslinux может загрузить свое собственное меню и еще много чего.

Кто-нибудь знает, как это сделать?

4 ответа

Решение

Обновление: основываясь на вашей записи, я нашел статью "Grub chainloads syslinux и обратно", в которой в основном говорится "patch grub":

  • Цепная загрузка syslinux из GRUB, кажется, невозможна без патча. Я не знаю о GRUB2. Это может быть полезно для разделов с множественной загрузкой (на основе syslinux).

  • Возможна цепная загрузка syslinux из GRUB4dos (на разных разделах). Мне удалось это через отображение, объяснил (снова) здесь. Это решает некоторые проблемы в мультизагрузочных USB-устройствах.

На странице патча упоминается, что аналогичный патч был опубликован на grub-devel для Grub v2; этот пост может быть тем патчем. Или это сообщение, которое указывает на этот отчет об ошибке (от ноября 2009 года, так что он совсем недавно) для патча Grub v2.

Чтобы использовать один из патчей, вам нужно скачать исходный код Grub для вашей предпочтительной версии Grub, убедиться, что он не содержит патч, попробуйте применить патч, перекомпилировать и переустановить новый Grub.


Оригинальный ответ:

Сначала я попробую протестировать простую запись Grub. Это стандартная запись Grub для утилиты Memtest86+ в системе Debian:

title           Debian, memtest86+
root            (hd0,0)
kernel          /boot/memtest86+.bin

Просто попробуйте настроить их значениями (при необходимости измените корневой раздел или путь к ядру):

title           Ubuntu LiveUSB SysLinux boot
root            (hd0,0)
kernel          /syslinux/isolinux.bin

Я не думаю, что вам нужно chainloader+ Команда для этой задачи.

Название UBUNTU 9.1 ISO Boot

найти --set-root /ubuntu9.1.iso

карта /ubuntu9.1.iso (hd32)

карта - крюк

root (hd32)

Цепной загрузчик (HD32)

добавьте это в ur menu.lst и скопируйте ubuntu9.1.iso на диск, на котором существует menu.lst.

Вы можете легко загрузить syslinux из grub2. Самый простой и общий способ:

Нажмите "c" в меню grub, чтобы получить командную строку.

set root='hd1,msdos1'
chainloader +1
boot

где 'hd1,msdos1' - достаточно распространенное значение, загружающееся с USB, но вы можете искать большинство файловых систем с lsнапример, ls (hd1,msdos1) расскажу вам про часть, тогда ls (hd1,msdos1)/ покажет вам файлы. Если это файловая система, которая Grub normal не распознает, возможно, вам придется установить модуль fs с insmod, Вы можете использовать Grub's search Команда, чтобы найти его. search --no-floppy --set=root

Однако вам, скорее всего, не нужно загружать syslinux (или что-то еще). личинка гибкая. Например, на моей флешке Alpine я часто просто делаю так:

set root='hd2,msdos1'
configfile /boot/grub/grub.cfg

Который идет прямо в меню. Конечно, это с grub cfg. Вы также можете вручную настроить загрузку из grub без syslinux или grub на диске.

set root='hd2,msdos1' # or search...
linux /boot/vmlinuz
initrd /boot/initramfs

Для меня, я даже могу сделать что-то подобное на моей карте Xen'd Up Alpine USB

multiboot2 /boot/xen.gz
module2 /boot/vmlinuz-vanilla modules=loop,squashfs,sd-mod,usb-storage
module2 /boot/initramfs-vanilla

Но это в основном то, что в /boot/grub.cfg похоже, теперь с Alpine. Дело в том, что он может делать разные и разные ОС, initramfs и ядра. Я думаю, что вы также можете напрямую загрузить двоичный файл syslinux chainloader $path_to_bin и мой личинка на самом деле имеет syslinux_configfile а также syslinux_source команды, так что, кажется, это тоже работает:

syslinux_source /boot/syslinux.bin
syslinux_configfile /boot/syslinux/syslinux.cfg

Надеюсь, что одна из тех работ для вас. Изучение моего пути к личинке спасало меня много раз. Я сохранил установку linux с поврежденной конфигурацией или перенесенным / замененным жестким диском на удаленной машине в Амстердаме из США, нажав grub-rescue> over serial и загрузив модули с существующего жесткого диска и загрузившись в старый раздел /OS, чтобы исправить / перенастроить его.

Использование YUMI в системе Windows, кажется, является наиболее простым способом сделать это.

http://www.pendrivelinux.com/yumi-multiboot-usb-creator

Другие вопросы по тегам