如何使用 GRUB 2 直接从硬盘运行 ISO 文件

Attila Orosz 的头像

·

·

·

15,506 次阅读

大多数 Linux 发行版都会提供一个可以从 USB 启动的 live 环境,以便用户无需安装即可测试系统。我们可以用它来评测这个发行版或仅仅是当成一个一次性系统,并且很容易将这些文件复制到一个 U 盘上,在某些情况下,我们可能需要经常运行同一个或不同的 ISO 镜像。GRUB 2 可以配置成直接从启动菜单运行一个 live 环境,而不需要烧录这些 ISO 到硬盘或 USB 设备。

获取和检查可启动的 ISO 镜像

为了获取 ISO 镜像,我们通常应该访问所需的发行版的网站下载与我们架构兼容的镜像文件。如果这个镜像可以从 U 盘启动,那它也应该可以从 GRUB 菜单启动。

当镜像下载完后,我们应该通过 MD5 校验检查它的完整性。这会输出一大串数字与字母合成的序列。

将这个序列与下载页提供的 MD5 校验码进行比较,两者应该完全相同。

配置 GRUB 2

ISO 镜像文件包含了整个系统。我们要做的仅仅是告诉 GRUB 2 哪里可以找到 kernel 和 initramdisk 或 initram 文件系统(这取决于我们所使用的发行版)。

在下面的例子中,一个 Kubuntu 15.04 live 环境将被配置到 Ubuntu 14.04 机器的 Grub 启动菜单项。这应该能在大多数新的以 Ubuntu 为基础的系统上运行。如果你是其它系统并且想实现一些其它的东西,你可以从这些文件了解更多细节,但这会要求你拥有一点 GRUB 使用经验。

这个例子的文件 kubuntu-15.04-desktop-amd64.iso 放在位于 /dev/sda1/home/maketecheasier/TempISOs/ 上。

为了使 GRUB 2 能正确找到它,我们应该编辑

/etc/grub.d40-custom

menuentry "Kubuntu 15.04 ISO" {
set isofile="/home/maketecheasier/TempISOs/kubuntu-15.04-desktop-amd64.iso"
loopback loop (hd0,1)$isofile
echo "Starting $isofile..."
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=${isofile} quiet splash
initrd (loop)/casper/initrd.lz
}

分析上述代码

首先设置了一个变量名 $menuentry ,这是 ISO 文件的所在位置 。如果你想换一个 ISO ,你应该修改 isofile="/path/to/file/name-of-iso-file-.iso".

下一行是指定回环设备,且必须给出正确的分区号码。

loopback loop (hd0,1)$isofile

注意 hd0,1 这里非常重要,它的意思是第一硬盘,第一分区 (/dev/sda1)。

GRUB 的命名在这里稍微有点困惑,对于硬盘来说,它从 “0” 开始计数,第一块硬盘为 #0 ,第二块为 #1 ,第三块为 #2 ,依此类推。但是对于分区来说,它从 “1” 开始计数,第一个分区为 #1 ,第二个分区为 #2 ,依此类推。也许这里有一个很好的原因,但肯定不是明智的(明显用户体验很糟糕)..

在 Linux 中第一块硬盘,第一个分区是 /dev/sda1 ,但在 GRUB2 中则是 hd0,1 。第二块硬盘,第三个分区则是 hd1,3, 依此类推.

下一个重要的行是:

linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=${isofile} quiet splash

这会载入内核镜像,在新的 Ubuntu Live CD 中,内核被存放在 /casper 目录,并且命名为 vmlinuz.efi 。如果你使用的是其它系统,可能会没有 .efi 扩展名或内核被存放在其它地方 (可以使用归档管理器打开 ISO 文件在 /casper 中查找确认)。最后一个选项, quiet splash ,是一个常规的 GRUB 选项,改不改无所谓。

最后

initrd (loop)/casper/initrd.lz

这会载入 initrd ,它负责载入 RAMDisk 到内存用于启动。

启动 live 系统

做完上面所有的步骤后,需要更新 GRUB2:

sudo update-grub

当重启系统后,应该可以看见一个新的、并且允许我们启动刚刚配置的 ISO 镜像的 GRUB 条目:

选择这个新条目就允许我们像从 DVD 或 U 盘中启动一个 live 环境一样。


via: https://www.maketecheasier.com/run-iso-files-hdd-grub2/

作者:Attila Orosz 译者:Locez 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

7 条回复

  1. snowhawkyrf [Chrome 46.0|GNU/Linux] 的头像
    snowhawkyrf [Chrome 46.0|GNU/Linux]

    请问这样进入的环境只能用来一次性测试镜像吗?能否像win一样重装系统呢?比如硬盘有/和/home分区,iso在/home内,通过grub2启动后进入live环境,能否直接安装新系统?只格式化/不改变/home,能实现吗?win我记得是可以把镜像放在D盘然后重装C盘的。

    来自上海
  2. 来自河北石家庄的 Chrome 35.0|Windows 7 用户 的头像
    来自河北石家庄的 Chrome 35.0|Windows 7 用户

    去年有个同样的帖子。。为什么总发重复的???

    来自石家庄
  3. linux [Chrome 46.0|Mac 10.11] 的头像
    linux [Chrome 46.0|Mac 10.11]

    可以作为安装。事实上这个和你用 ISO 刻盘然后启动一样,至于是 live 方式还是安装方式,看你自己的需要。

    来自北京
  4. linux [Chrome 46.0|Mac 10.11] 的头像
    linux [Chrome 46.0|Mac 10.11]

    是的,不同的翻译来源而已,选题有点重复了。

    来自北京
  5. 来自河南安阳的 UC Browser 10.7|Android 4.4 用户 的头像
    来自河南安阳的 UC Browser 10.7|Android 4.4 用户

    很有用的文章,网上还有很多类似的,更详细的也有

    来自安阳
  6. 来自北京的 Firefox 41.0|Windows 7 用户 的头像
    来自北京的 Firefox 41.0|Windows 7 用户

    想问下有直接在grub2下引导windows 7 安装iso的文章么?

    来自北京
  7. snowhawkyrf [Chrome 46.0|GNU/Linux] 的头像
    snowhawkyrf [Chrome 46.0|GNU/Linux]

    谢谢!以往总是刻U盘,还因为unetbootin的bug刻录出过问题耽误了事儿,后来都dd了。这个方法很不错!

    来自上海

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注