2010-06-18 14:25:36 +0000 2010-06-18 14:25:36 +0000
41
41

grub:从ISO启动

如何在GRUB中启动ISO文件?ISO文件在reiserfs分区,GRUB可以访问它(已经测试过了)。

答案 (2)

55
55
55
2010-06-18 18:30:23 +0000

启动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内容解压到驱动器上–因为这样可以直接访问它们,而不会混淆正在启动的操作系统。


Grub 1

… 不确定。如果可能的话,菜单项可能会看起来很像Grub4DOS,尽管我认为"map –hook”命令是Grub4DOS的改进。从好的方面看,Grub比Grub4DOS有更广泛的文件系统支持。

Grub with reiserfs (未经证实)的说明表明你 “必须用notail挂载分区才能工作"。

Memdisk是一个选项,见下文。


Grub4DOS

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。


Grub 2

这里有几个Grub2的例子。chainloader目前不能用来启动ISO,所以这些条目必须(1)使用loopback来 “挂载 "ISO,(2)在linux行中添加类似iso-scanfindiso这样的东西来指定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
}
1
1
1
2014-09-03 13:55:11 +0000

你可以在终端使用dd将iso文件写入一个分区。只是要小心,如果你用错了dd,你可能会把所有的东西都擦掉。它应该像这样: dd if=Desktop/LinuxCDFile.iso of=/Path/To/Partition。