Я скопировал ISO-файл в раздел (т.е. dd if = isofile of =/dev/sdb1). Как я могу загрузиться в этот раздел через GRUB?
Когда я пытаюсь просто с chainloader (hd1,0)+1, он говорит неизвестный исполняемый формат.
Смотрите мой ответ на ваш вопрос загрузки из ISO-файлов. Используя это в качестве отправной точки, я провел несколько тестов со старым жестким диском. Ранее я настроил Grub2 для загрузки флешки с несколькими ISO , поэтому я сделал следующее:
Создайте пару разделов на старом жестком диске. Это было сделано с помощью адаптера USB-IDE, поэтому диск отображается как /dev /sdb.
Смонтировал первый раздел в /mnt и установил копию Grub из моей системы на диск:
sudo grub-install --no-floppy --root-directory=/mnt /dev/sdb
"Сгорел" ISO до второго раздела:
sudo dd if=avg.iso /dev/sdb2
Это вирус-сканер AVG ISO; на моей флешке с несколькими ISO я использую это для прямой загрузки ISO:
menuentry "AVG Rescue CD" {
loopback loop /iso/avg.iso
linux (loop)/isolinux/vmlinuz max_loop=255 vga=791 init=linuxrc iso-scan/filename=/iso/avg.iso
initrd (loop)/isolinux/initrd.lzm
}
Чтобы сделать это с раздела жесткого диска, нам нужно отменить команду loopback и установить корневое устройство и тому подобное. Все мои попытки заставить Grub2 автоматически обнаружить корневое устройство не увенчались успехом, поэтому я указал его непосредственно на раздел. Это работает, но следите за перечислением устройств Grub; диск, с которого вы пытаетесь загрузиться, может не быть (hd0). Вот рабочая запись для раздела ISO:
menuentry "AVG Rescue CD" {
linux (hd0,2)/isolinux/vmlinuz max_loop=255 vga=791 init=linuxrc
initrd (hd0,2)/isolinux/initrd.lzm
}
Это приводит к загрузочному ISO-разделу.
Это работает, потому что Grub2 может читать файловые системы ISO9660, потому что этот конкретный ISO загружает ОС, которая может справиться с ISO в разделе, и потому что практически все, что загружает ядро, находится в initrd.
Если вы используете Grub4DOS или Grub 1, вы можете использовать аналогичный трюк с загрузчиком цепей. Предполагая, что это работает для загрузки Win7 ISO напрямую (источник):
title Windows 7
map (hd0,0)/win7.iso (hd32)
map --hook
chainloader (hd32)
Вам может повезти с этой модификацией (при условии, что вы "записали" ISO во второй основной раздел (hd0,1); в противном случае замените соответствующий раздел):
title Windows 7
map (hd0,1) (hd32)
map --hook
chainloader (hd32)
Вы также можете сойти с рук с этим:
title Windows 7
chainloader (hd0,1)
Однако ISO не настроен на загрузку с диска, поэтому вы можете столкнуться с другими проблемами.
Вот как я смог сделать это с помощью Grub4DOS (последняя официальная сборка):
Grub4DOS может загружать ISO-образы, поэтому он должен быть в состоянии сделать это для разделов.
Мы бы хотели отобразить раздел iso на новый диск и загрузиться с него:
title Boot ISO Partition
map (hd0,7) (0xff)
map --hook
chainloader (0xff)
Но это не работает, весь диск отображается.
К счастью, map
может принять «файл или блок-лист» в качестве первого аргумента.
Узнайте, сколько блоков занимает ваш раздел:
$ sudo fdisk -l /dev/sda
...
Device Boot Start End Blocks Id System
/dev/sda8 5948 6087 1124518+ b W95 FAT32
Я создал раздел 1.1Gb, поэтому мне нужно использовать 1124518 * 2 = 2249036
здесь.
(технически это 2249037, но это не имеет значения)
Теперь передайте блок-лист grub:
title Boot ISO Partition
map --heads=0 --sectors-per-track=0 (hd0,7)0+2249036 (0xff)
map --hook
chainloader (0xff)
И это работает!
Заметки:
(hd32)
вместо (0xff)
.Чтобы загрузить Grub4DOS из Grub2:
menuentry "Boot ISO Partition" {
root (hd0,1)
set opts='map --heads=0 --sectors-per-track=0 (hd0,7)0+2249036 (0xff);
map --hook;
chainloader (0xff) '
linux16 /boot/grub4dos/grub.exe --config-file=$opts
}
Добавьте это в /boot/grub/grub.cfg
(или лучше /etc/grub.d/40_custom
).
(при условии grub.exe
в /boot/grub4dos
на первом разделе)
Вывод: это действительно круто.
Это должно работать с любым гибридным ISO. Прекрасно работает с живыми образами ubuntu и другими Linux-системами, так как им удается найти свои файлы в разделе iso9660. Все в реальном режиме (DOS) тоже должно быть хорошо. Windows isos не сможет справиться.
Гудзин может сделать это также между прочим.