grub:从ISO引导


41

如何启动GRUB中的ISO文件?ISO文件位于reiserfs分区上,并且GRUB可以访问它(已经测试过)。


哪个版本的grub?
quack quixote 2010年

1
同样的问题在这里回答。
dma_k 2014年


Answers:


55

引导ISO文件的最大问题是设计用于引导的ISO几乎总是被设计成从CD引导。正如Marco在有关Grub 2(重点是我的)的博客中所述

GRUB可以读取ISO9660(“ iso”)图像。例如,它可以加载前几个扇区并引导它。但是大多数人没有意识到是什么呢?加载的操作系统将做什么?它很可能会寻找CDROM,但找不到并失败。

因此从某个随机ISO文件进行引导的最简单的方法是将其作为虚拟CD加载到虚拟机(VirtualBox,VMware或Virtual PC)中,然后在其中进行引导。这几乎应该总是可行的,因为对于VM而言,它不是ISO文件,而是真正的CD硬件上的真正的CD。

从裸机上的ISO文件引导要困难得多。如何执行此操作取决于您所使用的Grub版本,结果可能会因所使用的ISO及其引导方式而异。这就是为什么大多数从USB启动ISO的工具(Unetbootin,WinToFlash等)通常将ISO内容提取到驱动器中的原因-因为那样可以直接访问它们,而不会混淆正在引导的OS。


rub 1

... 不确定。如果可能的话,菜单项可能看起来很像Grub4DOS,尽管我认为“ map --hook”命令是Grub4DOS的增强功能。从正面来看,Grub比Grub4DOS具有更广泛的文件系统支持。

关于带有reiserfs的Grub的注释(未确认)表示您“必须安装分区notail才能正常工作”。

内存磁盘是一个选项;见下文。


Grub4DOS

Grub4DOS 提供了一些可与某些ISO配合使用的实验性“ CD仿真”。不幸的是,Grub4DOS只读取FAT32 / NTFS文件系统。 下载Grub4DOS。

这是一个示例条目(source):

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。将ISO放在闪存驱动器上,然后运行该实用程序以安装引导加载程序并配置引导菜单。

这是有关安装Grub4DOS 的Hak5集


rub 2

这是几个示例Grub2条目。 chainloader目前无法启动ISO,因此这些条目必须(1)使用环回 “挂载” ISO,并且(2)在指定ISO文件的linux行中添加iso-scanfindiso之类的内容。

不幸的是,没有通用的方法可以做到这一点。每个不同的引导项都必须针对目标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
}

@albert:我在闪存驱动器上使用Grub2,并且对相同的事情感到沮丧,因此组装起来并不难。我正在调查您的另一个问题,但是我之前从未尝试过将ISO刻录到分区上,因此可能很有趣。
quack quixote 2010年

Ofc我可以在VMware内部引导它(并且我也已经做过),但这对我没有多大帮助,因为它是Windows,而当我通过VMware在磁盘上安装它时,它稍后将无法在(愚蠢的Windows ...)上引导。
艾伯特2010年

您能否给我一个建议,我应该首先尝试哪个选项,即Grub1,Grub2或Grub4DOS?我可以安装所需的任何东西,这根本不是问题。
艾伯特2010年

@albert:您是在问您之前的问题吗? 我相信您最好的选择是使用提取方法;Windows安装程序是不从硬件引导时会出现问题的ISO之一。您可以尝试memtest,但我对此并不了解。您可能想要使用闪存驱动器并使用它;参见superuser.com/questions/66948/…superuser.com/questions/62193/install-win7-from-usb
quack quixote 2010年

1
@quackquixote,关于粗体字“已加载的操作系统将执行什么操作?它很可能会寻找CDROM,但找不到并失败”,为什么操作系统需要寻找CDROM?它已经是一个完美的iso文件,而加载OS所需的一切都已经在iso文件中了,那么为什么不跳过寻找CDROM呢?
Pacerier

1

您可以从终端使用dd将iso文件写入分区。请注意,如果您使用dd错误,则可以擦除所有内容。它应该看起来像这样:dd if = Desktop / LinuxCDFile.iso of = / Path / To / Partition


但是该分区必须是主分区才能由Windows Loader引导。
Firelord

这仅偶尔起作用,通常结果是不可引导的。
David Tonhofer

1
@Firelord:好吧,不要使用Windows Loader。使用G。是的,如果您确实需要,它也可以启动Windows。
Evi1M4chine
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.