注意:本教程只适用于支持 EFI 启动的计算机。如安装盘中包括 Linux,则选用的 Linux 发行版需要支持 EFI 启动。
我平时给自己或者别人重装系统的频率还算挺高的,因为有时候要装 macOS 有时候要装 Windows,每次都要重新把安装包刷到我的 U 盘里,不但非常折腾,而且对寿命也不好。于是我这几天就花时间研究了一下怎么把这些安装盘都塞到一个 U 盘里,并取得了不错的结果。
这个 U 盘不仅可以选择启动多个系统,而且当某一个系统的安装盘需要更新的时候,并不需要抹掉整个盘,只要单独处理对应的分区就好,非常方便。启动的时候效果是这样的:
我的这个盘包括了一个 macOS 安装器、一个 Windows10 安装器、一个 GParted Live(GParted 是一个 Linux 平台的分区工具,这是一个仅提供该分区工具及其他一些基本功能的简易 Linux 发行版)和一个 WinPE。接下来的教程我会教大家怎样制作一个这样的启动 U 盘并应对一些启动问题。
预备知识
为了不让你看得云里雾里,我们先来看一看 EFI 是个什么东西。简单来说,EFI 是一种操作系统的引导方式。
不知道你是否还记得几年前的电脑刚开机是什么样子的。
这个黑底白字的画面被称为开机自检画面,是由主板上一块叫做 BIOS 的芯片生成的。该芯片在开机时首先完成上电自检(POST)并初始化各种硬件,之后会读取磁盘的一个固定区域来寻找启动程序(0 面 0 道 1 扇区)。操作系统会把自己的引导程序写在里面,当 BIOS 发现这段程序后,就会交出控制权,操作系统就启动了。这种引导方式被称为 Legacey Boot,而这种包含了启动程序区块的分区表格式被称为主引导记录(MBR),与其相对的就是 GPT。
2005 年发明的 EFI 与 Legacey 不同,它并不会从磁盘的固定位置去寻找启动程序,而是在每一个分区中寻找 EFI 文件夹中的引导程序。对于一个只支持 Legacey Boot 的操作系统而言,假如你要让一个磁盘可以引导,需要用一些特殊的程序去写入启动区块,而且由于一个硬盘只有一个启动区块,实现多系统启动非常的麻烦,需要工具的帮助才能实现(YUMI – Multiboot USB Creator)。而 EFI 的启动程序和普通的文件放在同一个地方,假如你要把一个支持 EFI 的操作系统安装盘扔进 U 盘里,只要简单的把所有文件复制进去就可以了。直接就可以开机,不需要进行任何多余的操作,本教程就是利用了这一点。
由于只有新的电脑才会支持 EFI 引导,在较老的电脑上使用之前请先确认电脑是否支持 EFI 引导。以及如果你想要确认自己要扔进 U 盘里的安装盘支不支持 EFI,只需要打开 ISO 文件,看看里面有没有一个叫 EFI 的文件夹就可以了。
材料准备
如果你想要存下这么多的安装盘,首先你需要一个至少 16GB 的 U 盘。作为参考:
- macOS 10.13 安装盘需要的空间为为 5.5 GB。
- Win10 1709 安装盘尺寸为 5 GB。
(以上大小以 0.5 为单位上取整)
你需要一个可用的 Windows 系统,用于运行分区工具,虚拟机也可以。macOS 的磁盘工具基本上就是个废物,当你在一个 U 盘中同时创建 HFS+ 和 FAT 文件系统的时候会直接报错。而且在 Windows 中弄好的 FAT 分区在 macOS 中也无法调整大小。
准备好你需要放进去的安装盘等,如果需要的话还可以准备一个 WinPE。我这里推荐 AOMEI PE,是一个国外的 Win PE 环境,支持自己添加软件和驱动。(这个 PE 运行的时候会屏蔽掉自己所在的驱动器,这可能会有一些问题,我们后面会讲。)
需要的软件有:
- 解压软件。由于一些 Linux 的 ISO 镜像直接挂载会报错,我们需要一些工具把其中的文件解压出来。Mac 下如:The Unarchiver,Windows 下如:7Zip
- 分区工具,如:DiskGenius
- 镜像写入工具。Mac 下的 NTFS 不好用,U 盘分区需要被格式化为 FAT32。而 Windows 的安装盘中含有一些大于 4GB 的文件,这不被 FAT32 支持。所以我们需要一些特殊工具来做写入操作。如:UNetBootin(选择 UNetBootin 的原因主要是这款软件支持写入到分区而不是整个硬盘)
写入 macOS 安装器
先从 macOS 开始。首先下载好 macOS 的安装程序(.app)备用,我们来进行一些分区操作。macOS 启动需要使用 GPT(GUID)分区表,所以我们需要把磁盘格式化成这种格式而不是 U 盘里默认的 MBR。
打开磁盘工具,首先在左边选中你的 U 盘,注意是选中 U 盘而不是其中的分区,之后点击抹掉按钮,这会把整个磁盘抹成 GPT。⚠️该操作会清空 U 盘的全部内容,注意备份。⚠️(虽然一些软件可以直接转换 MBR 和 GPT,不过我还是觉得直接都抹掉比较干净)
按照图上的做法,将分区格式选为 Mac OS 扩展(日志式),方案选择 GUID 分区图。点击抹掉。有一定概率出现第一次抹掉不成功的情况,是由于系统没有正确卸载磁盘导致的,这个 Bug 很常见。如果第一次失败了,就再试一次。
之后还是选中 U 盘,点击分区。你现在应该看到整个硬盘使用一个分区。点击下面的加号新建一个分区,上面的硬盘会被平均分为两个。选择右边的一个(第一个分区),在右侧的详细信息中将分区的名称改为「macOS」(在之后的写入命令中我们会用到这个名称),将大小改为 5.5GB(其实可以再小一点,但是为了能够兼容之后的 macOS 更新,我觉得这里 5.5 是一个比较合理的大小)。点击分区。
之后你应该能在 Mac 的桌面上同时看到这两个分区。完成分区操作之后我们接下来写入安装器。打开系统终端,找到你的下载的 .app 文件,拖入终端窗口中来输入文件路径。终端会在文件路径的后面加一个空格,要注意删掉。
紧接着在后面输入 /Contents/Resources/createinstallmedia --volume /Volumes/macOS
,之后按回车继续运行,程序会询问你是否确定要抹掉,输入 y 回车。之后只要等着完成就可以了。
等到程序提示「Done.」的时候就说明已经写入成功了。如果你在写入的过程中不小心关掉了终端窗口,那请到磁盘工具中抹掉 macOS 这个分区再重来一遍。
重启电脑,在开机过程中按住 Option 键,你应该看到系统的启动菜单里出现了安装程序的图标。
其他分区处理和写入 Linux 分区
不是所有的电脑都像 Mac 这样可以在启动菜单显示 U 盘中的每一个分区的,有的 EFI BIOS 会直接从 U 盘能识别的第一个区启动(macOS 在 PC 中会被忽略,原因是 macOS 的引导程序存储在 .IABootFiles 而不是一般的 EFI 文件夹),其后面的分区就都没用了。假如你的第一个分区就是 Windows 安装程序,那么你将没有办法进入到放在另一个分区的系统(比如说 WinPE)中。
要解决这个问题,我们可以把一个 Linux 发行版放在 macOS 分区后面的第一个分区。因为 Linux 发行版大多含有一个叫做 GRUB 的引导程序,这个程序可以从其自带的命令行跳转到另一个分区来启动。
如果你本来就需要一个 Linux,请把它写在紧随 macOS 分区之后的分区里。如果你不需要 Linux,我这里推荐写入一个 GParted Live。GParted 是一个非常实用的分区工具,发行版的体积很小,解决问题的同时还具备实用性。下载地址:gparted.org,下载 64Bit ISO 即可。
接下来我们先进入 Window 进行分区操作,将 U 盘连接到 Windows,虚拟机也可以。系统可能会提示分区损坏,取消掉不要格式化,这是因为 Windows 读不了 HFS+ 的分区。
打开 DiskGenius(下称 DG),点击这个向右的小箭头切换到 U 盘:
你可以看到如下的分区图示:
右键删除右侧的这个大分区,点击保存更改。DG 每次每次修改分区结构都需要保存一次,否则可能会出现都已经点到对话框里填好参数了还叫你出去保存一下再重新进来的情况(这什么诡异的交互设计)。
在空白区域建立一个 1GB 的分区(如果你要装自己的发行版,可能需要更大的分区),分区格式为 FAT32,DG 在新建分区的时候只能使用整数大小,所以先这么办,回头再调整。完成后不要忘了点击保存更改。
关闭 DG,你应该能够在资源管理器中看到出现的 U 盘了。用解压工具打开下载好的 GParted 或者其他 Linux 发行版的安装 ISO,将其中的文件直接扔进去就可以了。
重新进入 DG,右键刚才的分区调整分区大小,针对 GParted,我这里调整为 350M 大小。
之后重启系统应该就可以在启动菜单中看到写入的 GParted 启动盘了。在 Mac 上应该表示为一个名叫「EFI BOOT」的黄色硬盘图标。
写入 Windows 安装程序
分区的方法和 Linux 的做法类似。在空白区域建立一个新分区,对于 Windows 我的推荐大小是 5GB,分区格式还是 FAT32。
我们前面讲过,Windows 安装盘中有一个文件超过了 FAT32 的最大文件大小,需要用第三方工具来写入。运行 UNetBootin,选择下方的 ISO,点击三个点的按钮选中 Windows 的安装镜像。然后选择刚刚创建的分区作为目标。⚠️千万不要选错,把别的分区抹掉就要重来了。⚠️
点击写入等待完成。
之后重启应该就可以看到又多一个启动盘了。
写入其他内容
如果你没有什么其他的安装盘要写了的话,我们就可以在 DG 中把剩余空间建立一个新分区,用于存储文件。
最后我们把 WinPE 装进去。我们没必要给 WinPE 单独弄一个分区,直接放在这最后一个分区里就可以了。我来介绍一下 AOMEI PE。
国内的 PE 系统想必很多人都用过,问题非常多。比如很多都不支持 NVME 硬盘,导致无法给 SSD 做备份,一些无良作者还会夹带私货,偷偷改电脑浏览器的主页啊,自动给你装个某数字公司杀毒软件啊什么的。而且还有一个问题就是丑。即便是目前中国网上能找到的最好的「微 PE」里面也有很多乱加图标的程序。所以在这里我选择了一个国外的 PE 来用,虽然其中没有国人常用的一些软件,不过因为能够支持自己添加,所以实际使用起来还是非常舒服的。最重要的是,对 EFI 启动和 NVME 硬盘支持都很好。
在官网下载一个安装器,这个安装器要先装到系统里。运行的时候是这样的。注意一下中间这一步可以自己添加软件和驱动,不要忘了加。最后选择生成 ISO。
这里再次推荐 DG,因为这个 PE 在运行的时候会隐藏掉自己所在的盘,也就是说你没办法用剩余空间来备份文件。DG 自带了一个文件浏览器,可以读写没有挂载的磁盘中的文件,在需要备份的时候就非常方便了。要么还要再插一另外个盘。
之后继续各种下一步,生成出来就可以了。
老规矩把这个盘中的所有文件复制出来,扔到我们刚刚建立的最后一个分区中。为了让我们这个拿来存文件的分区干净一些,我们还可以在右键菜单中选择「属性」,把这些文件和文件夹都隐藏掉。
重启之后你应该能看到另一个新的启动盘。
便捷性调整
你可能注意到了一些问题,在启动画面中,后三个盘都叫 「EFI BOOT」。我们要怎么分清哪个是哪个呢?我花了很多的时间去研究怎么修改这个显示名称,结论是不行。Mac 似乎不支持修改 FAT32 文件系统的显示名。不过这也不要紧,我们还有一个东西可以改,就是磁盘的图标。
在 Mac 中,启动盘的图标是由一个在根目录的 .VolumeIcon.icns 决定的。这里我做好了一些对应的图标,你可以下载使用:百度云 GoogleDrive。另外你还可以使用 Image2Icon 这个 App 自己制作 ICNS 文件,也非常方便。
扔图标进去然后改名成 .VolumeIcon.icns 就可以了。
在不支持多个 EFI 分区的电脑上启动
有一些 PC 的 UEFI 无法识别一个盘里面的多个 EFI 分区(就连 Parallels Desktop 的虚拟机 BIOS 都有这个毛病),遇到这种情况实在是非常尴尬的。不过我们之前已经弄好了一个 Linux 分区,接下来我就教大家如何用 GRUB 手动引导进其他分区。
首先启动系统,进入 U 盘,你会看到类似这样的画面。
在画面中按下 C 键进入命令行,你会看到 GRUB> 这样的提示符。首先输入 ls 看一看可用的硬盘和分区。
图中的格式是这样的 (hd硬盘号,分区号)。我们的 U 盘虽然只分了 四个区,但是由于 macOS 在最前面添加的保留分区的存在,加起来一共是有 5 个分区,分别从 1 到 5 表示。看看上面哪个编号的硬盘含有五个区的话,那就应该是我们 U 盘的编号了,这里是 0,一般都应该是 0。
假如我们要进入 Windows 的安装程序,这个区的编号是 4,在命令行输入 set root=(hd0,4) 回车。
之后要给出 Windows 的 EFI 引导程序的位置,输入 chainloader /EFI/Boot/bootx64.efi +1(Win10 的引导一般都在这个地方),应该会看到如下的提示,表示装载成功了。
之后再输入 boot,不出意外的话,Windows 安装程序就能正常启动。
如果你想要启动 PE 的话,那么除了分区编号改成 5 之外,其他情况都是一样的。
Q & A
安装盘有了新版本怎么办?只要抹掉该分区,重新按照之前的步骤刷入即可。Windows 也是同理,不过要在 Windows 中这个操作叫格式化。
有安装盘的那些分区可以自己存文件么?当然可以,可用空间里面随便存,不会浪费。
推出 U 盘的时候总是无法推出怎么办?因为四个区的关系,在较慢的 U 盘上推出的时候会非常的卡,这是正常现象,多等一会就好了。
参考资料
(题图背景是我在东京的住处自己拍的)