Как мне выполнить цепную загрузку от 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, кажется, является наиболее простым способом сделать это.