我发现可以loopback
这样做
menuentry "Lucid ISO" {
loopback loop (hd0,1)/boot/iso/ubuntu-10.04-desktop-i386.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/iso/ubuntu-10.04-desktop-i386.iso noprompt noeject
initrd (loop)/casper/initrd.lz
}
但它只适用于 ubuntu 或其衍生产品。如果我想启动其他实时映像(如 fedora、cent、opensuse 等),应该如何编写?
编辑:我发现了一些其他条目,但它们可能都是基于 debian 的。
menuentry "Linux Mint 10 Gnome ISO" {
loopback loop /linuxmint10.iso
linux (loop)/casper/vmlinuz file=/cdrom/preseed/mint.seed boot=casper initrd=/casper/initrd.lz iso-scan/filename=/linuxmint10.iso noeject noprompt splash --
initrd (loop)/casper/initrd.lz
}
menuentry "DBAN ISO" {
loopback loop /dban.iso
linux (loop)/DBAN.BZI nuke="dwipe" iso-scan/filename=/dban.iso silent --
}
menuentry "Tinycore ISO" {
loopback loop /tinycore.iso
linux (loop)/boot/bzImage --
initrd (loop)/boot/tinycore.gz
}
menuentry "SystemRescueCd" {
loopback loop /systemrescuecd.iso
linux (loop)/isolinux/rescuecd isoloop=/systemrescuecd.iso setkmap=us docache dostartx
initrd (loop)/isolinux/initram.igz
}
编辑2:如何进行链式加载grub
和syslinux
来自grub2
?
编辑3:我想在没有任何可移动设备的情况下启动其他实时图像并使用,grub2
因此需要特定于的菜单项grub2
。
答案1
从 iso 启动是发行版必须支持的功能,该iso-scan/filename=
选项在 Fedora 或其他发行版中不起作用。这些发行版可能有其他内核选项来实现此功能,或者根本不支持此功能。
我找到了一种启动 Fedora 16 DVD 的方法,如下所示。
从 grub 启动 Fedora 15 DVD iso
菜单项“Fedora 15 (DVD)”{ insmod 回送 修改 iso9660 设置 isofile="/Fedora-15-x86_64-DVD.iso" 环回循环(hd0,2)$isofile linux (循环)/isolinux/vmlinuz rootfstype=auto root=live:UUID=:$isofile ro quiet initrd(循环)/isolinux/initrd.img }
它假定您的 iso 文件位于内部硬盘第二个分区的根目录。
您可以在谷歌中搜索其他发行版,因为它不是一个独立于发行版的功能。
注1:它也适用于 Fedora 16,我刚刚测试过它。
笔记2:当您将 iso 文件放在 fat 或 ext4 分区时,该方法似乎有效。
从 grub2 启动 grml 小 iso
格鲁姆也可以从 grub2 启动。注意这里用的是findiso
option 而不是iso-scan/filename
option,表示从 iso 启动在不同的发行版中是作为不同的选项实现的。
(菜单项“Grml small 2009.10”{ 环回循环 /boot/iso/grml-small_2009.10.iso linux (循环)/boot/grmlsmall/linux26 findiso=/boot/iso/grml-small_2009.10.iso apm=power-off lang=us vga=791 boot=live nomce noeject noprompt -- initrd(循环)/boot/grmlsmall/initrd.gz }
这一页有几个其他发行版从 Grub2 启动的示例。
从 iso 启动 openSUSE 13.1 Live
这是唯一有效的解决方案(其他所有人都给了我一个无法找到 MBR 标识符并停止)。在此示例中,iso 放置在第一个磁盘的第三个分区中的目录中/home/username/
。
菜单项“openSUSE_13.1_GNOME_Live”{ 加载视频 安装gzio 修改 part_msdos 修改 ext2 设置根目录='(hd0,msdos3)' 设置 isofrom_device='/dev/sda3' 设置 isofrom_system='/home/用户名/openSUSE-13.1-GNOME-Live-i686.iso' 设置加载程序='/boot/i386/loader' 环回循环$isofrom_system linux (循环)$loader/linux isofrom_device=$isofrom_device isofrom_system=$isofrom_system ramdisk_size=512000 ramdisk_blocksize=4096 ro quiet splash $vt_handoff preloadlog=/dev/null showopts initrd(循环)$loader/initrd }
资料来源janeppo 的评论。
Fedora 17 Gnome Live Iso
这是 Fedora 17 的启动菜单 grub.cfg 条目。iso 放在第一个磁盘的第三个分区。文件名也已更改。
菜单项“Fedora Live”{ 环回循环 (hd0,3)/fedora.iso linux (循环)/EFI/BOOT/vmlinuz0 root=live:/fedora.iso rootfstype=auto ro liveimg quiet rhgb rd.luks=0 rd.md=0 initrd (hd0,3)/initrd-fromiso }
最后说明:我认为这个答案可以作为一个例子。不需要再举例子了。
答案2
以下是我找到的用于启动的 iso 文件grub2
。
我已经成功启动了以下 ISO
- Ubuntu Precise Pangolin 12.04 ISO
- 系统救援光盘
- 启动硬件检测工具
- 免费
- Hiren 的启动 CD
- 终极启动 CD
我发现如果您想启动其他 ISO(如 Hiren 的启动 CD 等),您可以使用MEMDISK
实用程序作为内核。
在哪里可以获取 MEMDISK?
从以下位置下载 Syslinux这里. 将其移至桌面。
如何使其工作?
cd ~/Desktop/
tar xvif syslinux-4.05.tar.xz
cd syslinux-4.05/memdisk/
sudo mkdir /customboot
sudo mv memdisk /customboot/
cd /customboot/
sudo mv memdisk memdisk4.05
gksudo gedit /etc/grub.d/40_custom
然后将以下条目粘贴到 gedit 中。您需要更改set isofile="/path/to/iso-file.iso"
。
然后发出update-grub
。重启并检查。
40_custom
文件中的我的条目。
menuentry "Ubuntu Natty Narwhal 11.04 ISO" {
set isofile="/OS/ubuntu-11.04-desktop-i386.iso"
loopback loop (hd0,6)$isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject --
initrd (loop)/casper/initrd.lz
}
menuentry "Ubuntu Precise Pangolin 12.04 ISO" {
set isofile="/OS/ubuntu-12.04-desktop-i386.iso"
loopback loop (hd0,6)$isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject --
initrd (loop)/casper/initrd.lz
}
menuentry "SystemRescueCd" {
set isofile="/OS/systemrescuecd-x86-2.7.0.iso"
loopback loop (hd0,6)$isofile
linux (loop)/isolinux/rescuecd isoloop=$isofile setkmap=us docache dostartx
initrd (loop)/isolinux/initram.igz
}
menuentry "Boot Hardware Detection Tool from iso using memdisk 4.05" {
linux16 /customboot/memdisk4.05 iso
initrd16 /customboot/hdt.iso
}
menuentry "Free Dos from iso using memdisk 4.05" {
set isofile="/OS/fdbasecd.iso"
linux16 /customboot/memdisk4.05 iso
initrd16 (hd0,6)$isofile
}
menuentry "Hiren's boot CD using memdisk 4.05" {
set isofile="/OS/Hiren's.BootCD.10.1.iso"
linux16 /customboot/memdisk4.05 iso
initrd16 (hd0,6)$isofile
}
menuentry "Ultimate Boot CD iso using memdisk 4.05" {
set isofile="/OS/ubcd511.iso"
linux16 /customboot/memdisk4.05 iso
initrd16 (hd0,6)$isofile
}
所有 ISO 都保存sda6/OS
在MEMDISK
安装 ubuntu 的分区上(在根目录中),并重命名为,memdisk4.05
因此它的路径是/customboot/memdisk4.05
笔记 : fedora 与给出的其他答案不兼容。仍在尝试启动 fedora :(。
答案3
不幸的是,这些建议都对我没有帮助。所以我找到了方法,并愿意与你分享。例如,要启动 centos,您需要:将 iso 映像放在目录中。如果您的根目录安装在 /dev/sda1 上,则创建目录 /iso 并将 iso 放在那里。转到 grub 控制台(当出现菜单 grub 时按“c”。)
选择合适的设备 - hd0 表示 sda。您需要选择一个 iso 所在的设备。
loopback loop (hd0,msdos1)/iso/Redhat.iso
linux (loop)/isolinux/vmlinuz inst.repo=hd:sda1:/iso/Redhat.iso
initrd (loop)/isolinux/initrd.img
boot
然后启动它!
答案4
似乎 13.04 需要不同的语法来实现这一点。有人从物理磁盘成功启动了 ubuntu-13.04-desktop-amd64.iso 并愿意分享 grub 语法吗?
编辑:回答了我自己的问题。需要将 vmlinuz 重命名为 mvlinuz.efi 才能正常工作。
menuentry "Ubuntu-13.04-desktop-amd64.iso" --class ubuntu {
set isofile="/archives/ubuntu-13.04-desktop-amd64.iso"
loopback loop (hd1,6)$isofile
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noeject noprompt --
initrd (loop)/casper/initrd.lz
}