启动ISO文件的最大问题是,ISO被设计为启动,几乎总是被设计为从CD启动。正如在Marco的博客上关于Grub 2的解释(重点是我的):
GRUB可以读取ISO9660("iso")图像。例如,它可以加载前几个扇区并启动它。但大多数人没有意识到的是 “然后呢?"。加载后的操作系统会做什么?它很可能会寻找一个CDROM,但它找不到,于是就失败了。
所以最简单的方法是从一些随机的ISO文件中启动,就是把它作为一个虚拟光盘加载到一个虚拟机(VirtualBox,VMware,或者Virtual PC)中,然后在那里启动。这几乎总是可行的,因为对虚拟机来说,它不是一个ISO文件–它是一张真正的CD,在真正的CD硬件上。
在裸机上从ISO文件启动要难得多。如何做到这一点取决于你使用的是哪个版本的Grub,结果可能会因你使用的ISO和它的启动配置而不同。这就是为什么大多数从USB启动ISO的工具(Unetbootin, WinToFlash, 等等)通常会把ISO内容解压到驱动器上–因为这样可以直接访问它们,而不会混淆正在启动的操作系统。
… 不确定。如果可能的话,菜单项可能会看起来很像Grub4DOS,尽管我认为"map –hook”命令是Grub4DOS的改进。从好的方面看,Grub比Grub4DOS有更广泛的文件系统支持。
Grub with reiserfs (未经证实)的说明表明你 “必须用notail
挂载分区才能工作"。
Memdisk是一个选项,见下文。
Grub4DOS 提供了一些实验性的 "光盘模拟”,可以与一些ISO一起工作。不幸的是,Grub4DOS只能读取FAT32/NTFS文件系统。下载Grub4DOS.
这是一个示例条目源)。
title fdfullcd.iso (0xFF)
find --set-root /fdfullcd.iso
map /fdfullcd.iso (0xFF)
map --hook
root (0xFF)
kernel /isolinux/data/memdisk
initrd /isolinux/data/fdboot.img
据说Win7的ISO可以用这个条目启动。
title Windows 7
map (hd0,0)/win7.iso (hd32)
map --hook
chainloader (hd32)
其他的ISO可以用Memdisk启动。
title Boot Hardware Detection Tool from iso image (with 'iso' parameter)
kernel /memdisk iso
initrd /hdt.iso
你也可以使用菜单配置器,比如 PenDriveLinux的MultiBootISOs.exe 。将ISOs放在U盘上,然后运行该实用程序来安装引导加载器并配置引导菜单。
这里是一集Hak5关于安装Grub4DOS。
这里有几个Grub2的例子。chainloader目前不能用来启动ISO,所以这些条目必须(1)使用loopback来 “挂载 "ISO,(2)在linux行中添加类似iso-scan或findiso这样的东西来指定ISO文件。
不幸的是,没有一个通用的方法可以做到这一点。每一个不同的引导条目都必须根据目标 ISO 的内容来定制。大多数Linux LiveCD使用ISOLINUX作为引导加载器;找到isolinux.cfg并检查该引导条目,看看它通常引导什么。
示例条目源)。
menuentry "Ubuntu Live 9.10 32bit" {
loopback loop /boot/iso/ubuntu-9.10-desktop-i386.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/iso/ubuntu-9.10-desktop-i386.iso noeject noprompt --
initrd (loop)/casper/initrd.lz
}
menuentry "Grml small 2009.10" {
loopback loop /boot/iso/grml-small_2009.10.iso
linux (loop)/boot/grmlsmall/linux26 findiso=/boot/iso/grml-small_2009.10.iso apm=power-off lang=us vga=791 boot=live nomce noeject noprompt --
initrd (loop)/boot/grmlsmall/initrd.gz
}
如果你想启动一个非Linux的LiveCD,你可能就不走运了。同样,Memdisk可能会有帮助。
menuentry "Boot Hardware Detection Tool from iso" {
linux16 /memdisk iso
initrd16 /hdt.iso
}
你可以在终端使用dd将iso文件写入一个分区。只是要小心,如果你用错了dd,你可能会把所有的东西都擦掉。它应该像这样: dd if=Desktop/LinuxCDFile.iso of=/Path/To/Partition。