如何从GRUB2中的.iso文件启动?

有没有办法做到这一点?

它可能比您从网络上的所有详细解释中获得的印象容易得多。 我刚刚在Ubuntu 12.04上执行了以下操作来启动FreeDOS .iso以进行固件更新

  • 安装grub-imageboot
  • 将.iso文件复制到/ boot / images /
  • 运行update-grub2

或者复制/粘贴这些:

sudo -s apt-get install grub-imageboot mkdir /boot/images/ cp $YOUR_ISO_FILE.iso /boot/images/ update-grub2 

而已。

有时,在运行update-grub2之前,您可能还需要执行2个步骤:

如果您以前从未这样做过,则需要编辑/ etc / default / grub,以便在启动时看到grub菜单:

 ## To show the menu, disable the hidden_timeout, and set a timeout #GRUB_HIDDEN_TIMEOUT=0 GRUB_TIMEOUT=10 

对于某些.iso映像,您可能需要在/ etc / default / grub-imageboot中添加此选项:(我的FreeDOS .iso需要它)

 ISOOPTS="iso raw" 

如果您确实编辑了其中一个配置。 文件,您需要再次运行update-grub2

更新:这是由“dma_k”询问的结果菜单项

 menuentry "Bootable ISO Image: SV100S2_64_128_120229" { insmod part_msdos insmod ext2 set root='(hd0,msdos6)' search --no-floppy --fs-uuid --set=root 6ca082d0-63d0-48c3-9e5f-2ce5d7a74fe4 linux16 /boot/memdisk iso raw initrd16 /boot/images/SV100S2_64_128_120229.iso } 

这是针对具有一些固件更新等的FreeDOS映像。

我假设您要在GRUB菜单中添加.iso条目并启动它?

我在Ubuntu论坛上找到了这个信息

http://ansi.interblc.com/2010/02/06/howto-boot-iso-images-via-grub2-with-ubuntu/

  1. 切换到/etc/grub.d目录。
  2. 在此处添加以50开头的ISO映像。 例如,我的普通Ubuntu ISO映像(50_ubuntu)的条目如下所示:

echo "Adding $(egrep menu[e]ntry $0 | cut -d'"' -f2)" >&2
cat << EOF
menuentry "Ubuntu 10.04 Daily Build" {
loopback loop (hd0,3)/ansi/software_and_config/ISOs/ubuntu/lucid-desktop-i386.iso linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/ansi/software_and_config/ISOs/ubuntu/lucid-desktop-i386.iso file=(loop)/preseed/ubuntu.seed quiet splash bootkbd=sg -- initrd (loop)/casper/initrd.lz
}

我的ISO文件存储在/ ansi / software_and_config / ISOs / ubuntu /下的sda3上。 为了根据您的需要进行更改,需要更改3个元素。 环回行包含grub样式的硬盘(hdx,yx = 0-> sda x = 1-> sdb aso)和路径。 要改变的第三个要素是linux行。 将此文件存储为“/etc/grub.d”中的“50_ubuntu”,使用“chmod a + x 50_ubuntu”使其可执行,并使用“ubdate-grub”激活更改。 重启后,您应该可以使用shift键激活grub菜单并选择新条目。

(注意:如果有人可以使用正确的[CODE]格式,那就太棒了。我似乎无法让它正常工作.–tyblu)

我来到这里是因为我厌倦了无数可启动的ISO 9660图像,因此想要使用GRUB 2来引导FreeDOS,以更新希捷硬盘的固件/微代码。 作为mivk答案的补充或替代(使用syslinux的memdisk ),以下是我利用GRUB 2的强大function所做的:

  1. 安装syslinux-common软件包(用于在其中使用memdisk ; grub-imageboot是一个非必要的挂钩包)
  2. 按’c’键(命令助记符)激活GRUB 2内置迷你shell的命令提示符(或者更准确地说,是最小的BASH类shell)
  3. 在GRUB 2的迷你shell中发出3行命令:
  linux16 (hd0,gpt2)/usr/lib/syslinux/memdisk iso raw initrd16 (hd0,gpt3)/myUserAccount/download/Barracuda-ALL-GRCC4H.iso boot # where Barracuda-ALL-GRCC4H.iso is a FreeDOS-based ISO 9660 image, and # the mathematical 2-tuples or ordered pairs, (hd0,gpt2) and (hd0,gpt3), # are GRUB 2's respective device notations for my rootfs partition # (eg, /dev/sda2) and home partition (eg, /dev/sda3). # NOTE: This procedure also applies to Seagate's SeaTools (based on # FreeDOS as well); just substitute the file SeaToolsDOS223ALL.iso # for Barracuda-ALL-GRCC4H.iso. 

有关syslinux的memdisk的信息, 请访问http://www.syslinux.org/wiki/index.php/MEMDISK

通过直接在迷你shell中操作命令,这个过程比大多数上述方法更灵活,更自然,因为每次你想尝试不同的Linux发行版或BSD时都不必费心调整和更新那些GRUB 2的配置基于现场CD。

目前,正是这4行命令可以用作GRUB 2的迷你shell中的通用模式,即loopback-linux-initrd-boot序列加上传递给给定内核的一些参数,例如,尽可能多地引导许多流行的Linux ISO映像(在这种情况下,使用System Rescue CD的3个内核命令行参数):

  loopback lb (hd0,gpt3)/myUserAccount/download/systemrescuecd-x86-3.7.0.iso linux (lb)/isolinux/rescue64 isoloop=systemrescuecd-x86-3.7.0.iso setkmap=us docache initrd (lb)/isolinux/initram.igz boot 

NB严格来说,当您打算安装Linux发行版(如Debian衍生版)而不浪费光盘时,通用模式的loopback部分并不是强制性的。

正如Mark Rooney所说,你可以在Ubuntu论坛上找到一个很棒的指南 。

这将允许您从ISO文件启动,但仅限ISO支持。 (所有最近的Ubuntu版本应该和其他一些发行版一样)。

如果您计划从实时ISO进行安装,则应将该文件放在与要安装的文件不同的分区上(因为您无法写入正在运行的分区)。 很可能,安装人员会抱怨。 您需要做的是手动编辑/etc/mtab并删除与ISO文件分区对应的条目。

要从USB磁盘/记忆棒上的ISO文件启动, 可能最方便用户的方式MultiSystem : http : //liveusb.info/dotclear/index.php?pages / install

您只需拖放即可将大多数 ISO映像包含在LiveUSB磁盘/操作系统的启动菜单中。