如何使用 GRUB 2 直接从硬盘运行 ISO 文件
大多数 Linux 发行版都会提供一个可以从 USB 启动的 live 环境，以便用户无需安装即可测试系统。我们可以用它来评测这个发行版或仅仅是当成一个一次性系统，并且很容易将这些文件复制到一个 U 盘上，在某些情况下，我们可能需要经常运行同一个或不同的 ISO 镜像。GRUB 2 可以配置成直接从启动菜单运行一个 live 环境，而不需要烧录这些 ISO 到硬盘或 USB 设备。 获取和检查可启动的 ISO 镜像 为了获取 ISO 镜像，我们通常应该访问所需的发行版的网站下载与我们架构兼容的镜像文件。如果这个镜像可以从 U 盘启动，那它也应该可以从 GRUB 菜
grub iso 启动
116.227.26.165
请问这样进入的环境只能用来一次性测试镜像吗？能否像win一样重装系统呢？比如硬盘有/和/home分区，iso在/home内，通过grub2启动后进入live环境，能否直接安装新系统？只格式化/不改变/home，能实现吗？win我记得是可以把镜像放在D盘然后重装C盘的。
snowhawkyrf [Chrome 46.0|GNU/Linux]
2015-10-18T11:22:10.000
222.222.30.34
去年有个同样的帖子。。为什么总发重复的？？？
来自河北石家庄的 Chrome 35.0|Windows 7 用户
2015-10-18T13:08:05.000
114.253.22.175
可以作为安装。事实上这个和你用 ISO 刻盘然后启动一样，至于是 live 方式还是安装方式，看你自己的需要。
linux [Chrome 46.0|Mac 10.11]
2015-10-18T20:43:27.000
114.253.22.175
是的，不同的翻译来源而已，选题有点重复了。
linux [Chrome 46.0|Mac 10.11]
2015-10-18T20:44:08.000
117.160.227.196
很有用的文章，网上还有很多类似的，更详细的也有
来自河南安阳的 UC Browser 10.7|Android 4.4 用户
2015-10-18T21:24:31.000
218.205.160.78
想问下有直接在grub2下引导windows 7 安装iso的文章么？
来自北京的 Firefox 41.0|Windows 7 用户
2015-10-19T09:51:26.000
116.227.26.165
谢谢！以往总是刻U盘，还因为unetbootin的bug刻录出过问题耽误了事儿，后来都dd了。这个方法很不错！
snowhawkyrf [Chrome 46.0|GNU/Linux]
2015-10-19T10:38:11.000
大多数 Linux 发行版都会提供一个可以从 USB 启动的 live 环境，以便用户无需安装即可测试系统。我们可以用它来评测这个发行版或仅仅是当成一个一次性系统，并且很容易将这些文件复制到一个 U 盘上，在某些情况下，我们可能需要经常运行同一个或不同的 ISO 镜像。GRUB 2 可以配置成直接从启动菜单运行一个 live 环境，而不需要烧录这些 ISO 到硬盘或 USB 设备。 获取和检查可启动的 ISO 镜像 为了获取 ISO 镜像，我们通常应该访问所需的发行版的网站下载与我们架构兼容的镜像文件。如果这个镜像可以从 U 盘启动，那它也应该可以从 GRUB 菜
![](/data/attachment/album/201510/18/094435clq6dy8jsvceze6l.png)


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


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


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


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


![](/data/attachment/album/201510/18/094435jfzdcd1otefsdj1o.png)


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


### 配置 GRUB 2


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


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


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


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



```
/etc/grub.d40-custom

```

![](/data/attachment/album/201510/18/094436h1yhby1hhxyozfh8.png)



```
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
}

```

![](/data/attachment/album/201510/18/094436m1k6oicxcod5w6iw.png)


### 分析上述代码


首先设置了一个变量名 `$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

```

![](/data/attachment/album/201510/18/094436h5zl1nvplhlommm7.png)


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


![](/data/attachment/album/201510/18/094437n49lir14269ab692.png)


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




---


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


作者：[Attila Orosz](https://www.maketecheasier.com/author/attilaorosz/) 译者：[Locez](https://github.com/locez) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

