grub:从 ISO 启动

Alb*_*ert 46 boot iso-image grub

如何引导到 GRUB 中的 ISO 文件?ISO 文件位于 reiserfs 分区上,GRUB 可以访问它(已经测试过了)。

qua*_*ote 60

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


幼虫 1

... 没有把握。如果可能,菜单条目可能看起来很像 Grub4DOS,尽管我认为“map --hook”命令是 Grub4DOS 的增强。从好的方面来说,Grub 比 Grub4DOS 具有更广泛的文件系统支持。

关于带有 reiserfs(未经证实)的Grub的注释表明您“必须安装分区notail才能使其工作”。

Memdisk 是一种选择;见下文。


Grub4DOS

Grub4DOS提供了一些与某些 ISO 配合使用的实验性“CD 模拟”。不幸的是,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
Run Code Online (Sandbox Code Playgroud)

据说可以使用以下条目启动 Win7 ISO :

title Windows 7
  map (hd0,0)/win7.iso (hd32)
  map --hook
  chainloader (hd32)
Run Code Online (Sandbox Code Playgroud)

其他 ISO 可以使用 Memdisk启动:

title Boot Hardware Detection Tool from iso image (with 'iso' parameter)
  kernel /memdisk iso
  initrd /hdt.iso
Run Code Online (Sandbox Code Playgroud)

您还可以使用PenDriveLinux 中的 MultiBootISOs.exe等菜单配置。将 ISO 放在闪存驱动器上,然后运行该实用程序以安装引导加载程序并配置引导菜单。

这是关于安装 Grub4DOS的 Hak5 插曲


幼虫 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
}
Run Code Online (Sandbox Code Playgroud)

如果您尝试引导非 Linux LiveCD,您可能不走运。同样,Memdisk 可能会有所帮助

menuentry "Boot Hardware Detection Tool from iso" {
  linux16 /memdisk iso
  initrd16 /hdt.iso
}
Run Code Online (Sandbox Code Playgroud)