当前位置: 首页>>技术教程>>正文


如何从 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 论坛上找到了 this info

第三种思路

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

  1. 安装 syslinux-common 包(用于在其中使用 memdisk;grub-imageboot 是一个非必需的挂钩包)

  2. 按 ‘c’ 键(命令助记键)激活 GRUB 2 内置 mini-shell(或者更准确地说,最小的 BASH-like shell)的命令提示符

  3. 在 GRUB 2 的 mini-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 
   # (e.g., /dev/sda2) and home partition (e.g., /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

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

目前,可以将这 4 行命令用作 GRUB 2 的 mini-shell 中的通用模式,即 loopback-linux-initrd-boot 序列加上一些传递给给定内核的参数,例如,引导许多流行的尽可能使用 Linux ISO 映像(在这种情况下,系统救援 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

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13659.html,未经允许,请勿转载。