grub:从 ISO 启动

grub:从 ISO 启动

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

答案1

启动 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,但我认为“地图--钩子”命令是 Grub4DOS 的增强功能。从好的方面来说,Grub 比 Grub4DOS 具有更广泛的文件系统支持。

备注带有 reiserfs 的 Grub(未经证实) 表示您“必须挂载您的分区才能notail使其工作”。

Memdisk 是一个选项;见下文。


Grub4DOS

Grub4DOS提供一些实验性的“CD 模拟”适用于某些 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. 将 ISO 放在闪存驱动器上,然后运行实用程序来安装引导加载程序并配置启动菜单。

以下是Hak5 剧集安装 Grub4DOS。


Grub 2

以下是几个 Grub2 条目的示例。 链式装载机目前无法启动 ISO,因此这些条目必须 (1) 使用回送“挂载” ISO,然后(2)添加类似等扫描或者查找Linux的指定 ISO 文件的行。

不幸的是,没有通用的方法可以做到这一点。每个不同的启动项都必须根据目标 ISO 的内容进行定制。大多数 Linux LiveCD 使用 ISOLINUX 作为引导加载程序;找到isolinux配置文件并检查该启动项以查看其通常启动什么。

示例条目 (来源):

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
}

答案2

您可以从终端使用 dd 将 iso 文件写入分区。但要小心,如果您使用 dd 错误,您可能会抹去所有内容。它应该看起来像这样:dd if=Desktop/LinuxCDFile.iso of=/Path/To/Partition

答案3

有许多精美的示例以及针对许多流行操作系统的调整 Grub 2 iso 启动

menuentry "Focal Desktop iso" {
   set isofile="/iso/focal-desktop-amd64.iso"
   rmmod tpm // For GPT only
   loopback loop (hd0,5)$isofile
   linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
   initrd (loop)/casper/initrd
}

相关内容