多方式引导启动系统

分区表、引导方式和不同方式引导系统。

相关知识

分区表

分区表用于存储分区信息,主要有 MBR 和 GUID 两种。

MBR

MBR 分区表会在磁盘的第一个扇区写入引导代码,这些代码用来引导系统的启动,该扇区被称为主引导扇区。主引导扇区共 512 字节,内容如下。

项目 占用空间
主引导记录MBR 446字节
磁盘分区表项DPT 16×4=64字节
结束标志AA55(小端规则为55AA),被称为幻数 2字节

由于 DPT 只有 64 字节,MBR 分区表最多只能有四个分区,即三个主分区加一个扩展分区,或四个主分区。MBR 的代码决定其引导类型,包括 grub、Windows NT 5.0 等,可视作是规定启动引导器的代码。

每个分区的分区头部有本分区的引导信息,对于主分区而言称为PBR,对于扩展分区而言称为EBR。在扩展分区内可以进一步划分出无数个逻辑分区,主要是通过在每个逻辑分区的起始扇区建立一个虚拟MBR。注意,扩展分区/逻辑分区不能被设为激活分区。

GUID/GPT

为了兼容性,GUID 分区表即 GPT 磁盘的第一个扇区仍然为 MBR,被称为保护 MBR,然后是 GPT 头。与 MBR 不同的是,GPT 磁盘的保护 MBR 只有一个标识为 0xEE 的分区,以标注这块硬盘使用 GPT 分区表。如果在这段代码中储存 GPT 分区表的一部分分区,则可以使不支持从 GPT 启动的操作系统从这个 MBR 启动,启动后只能操作 MBR 分区表中的分区。

GPT 需要有一个专门的 EFI 分区存放引导文件,这个 EFI 分区一般是 FAT32 或 FAT16 格式。EFI 分区可以有多个,也可以只有一个,系统引导文件可以放到同一个地方,也可以分散放置。引导启动时,不同的系统文件会被识别为不同的引导项。

引导文件写有启动磁盘信息,主要是识别系统种类以及磁盘的唯一标识 GUID。每个分区也有分区表,其中前 16 字节是分区类型 GUID,接下来的 16 字节是分区唯一标识 GUID。GPT 分区表主要通过 GUID 识别不同分区。

引导方式

一般而言 BIOS 使用 MBR 分区表,而 UEFI 使用 GPT 分区表。然而由于 GPT 分区表也有 MBR,因此理论上 BIOS+GPT 是可行的。同理 UEFI+MBR 也是可行的。

BIOS

开机时,BIOS 开电自检,然后读取 MBR,根据 MBR 的引导代码启动系统。一般而言,BIOS 会寻找可引导的活动分区,然后装入活动分区的 PBR 到内存,并把启动权移交系统。

UEFI

开机时,电脑读取 UEFI,UEFI 寻找 EFI 分区并根据 EFI 分区的引导文件启动系统。

查看本机引导方式

在 Windows 下 Win+R,输入msinfo32并回车,在打开的窗口中查看系统摘要的内容,若显示为传统即为 BIOS 模式,显示为 UEFI 即为 UEFI 模式。

ESP/MSR 分区

这两个分区均用于 GPT 分区表。

作用

ESP分区即EFI分区。UEFI引导的电脑启动时,将从EFI分区读取启动配置。EFI分区一般为FAT格式,大小200-300M,可位于硬盘的任意位置,且一块硬盘可以存在多个EFI分区,只需把引导文件放置在EFI分区的EFI/BOOT/BOOTX64.efi即可。

MSR 分区为 Windows 系统创建的分区,用于保存某些数据,用途不大,可删除或并入 EFI 分区,在创建 EFI 分区时也不必创建 MSR 分区。

目录结构

EFI分区的EFI/BOOT下,放置CLOVER文件夹引导Clover,放置Microsoft文件夹引导Windows。两者可同时放置。

对其它系统添加引导时,BOOT需用Clover的BOOT文件夹,把另一个文件夹放置于/EFI下,与CLOVER同级即可。Clover会自动识别出系统类型。

重建

正常使用情况下,可对 EFI 分区中的 EFI 文件夹进行备份。

若EFI分区损坏,可在DiskGenius下将EFI分区删除,右键所得空闲空间,点击建立ESP/MBR分区,对话框里只选择建立ESP分区,固态硬盘需勾选对齐分区。若弹出是否删除原有引导记录的提示,则选择删除,然后将备份好的EFI文件夹复制进去。

打开EasyUEFI添加启动项,类型为Linux,路径为/EFI/BOOT/BOOTX64.efi。重启电脑并进入BIOS即可看到新建立的引导启动项,从此项启动即可。

移动硬盘多系统部署

空间分配

用 DiskGenius 对全盘进行格式化,并转换为 GUID 分区表。新建一个 200-300MB 的 EFI 分区,后分别建立 Windows 分区(NTFS 格式)、MacOS 分区(APFS 格式)、Ubuntu 分区(NTFS 分区),其余留空。

Windows

安装

通过 Ghost

GPT 与 MBR 分区表均可使用 ghost,但 Ghost 备份的系统只适用当前备份系统的机型,不同的主板不通用,且装载 GHO 的多个主机的 SID 一致,因此不适用于系统加域的网络环境。

下载好 Windows 10 的 gho 版,在 Windows 或 WinPE 下用 Ghost 将 gho 镜像恢复到所要安装的分区。安装完成后,由于 EFI 分区内没有引导,无法启动 Windows,故需从任一 Windows 系统下复制一份 EFI 到分区中,然后在 PE 环境打开 BOOTICE 进行引导修改。

选择BCD编辑-其它BCD文件,路径为EFI\Microsoft\BOOT\BCD,点击智能编辑模式,启动磁盘/分区改为装好Windows的移动硬盘/分区,两个保存按钮均点击后退出即可。

通过 WinNTSetup

下载 Windows 10 的 ISO 版本,在 Windows 或 WinPE 下打开WinNTSetup 安装器。镜像选择 ISO 里的\Sources\install.wim,引导驱动器选择 EFI 分区,安装驱动器选择安装 Windows 10 的分区。保证引导驱动器右侧的三个选项均无红灯后点击安装,完成后重启电脑即可。

常见问题

弹出「计算机意外地重新启动或遇到错误」

按下 Shift+F10 打开命令提示符,键入 regedit 并回车,启动注册表编辑器。转到 HKEY_LOCAL_MACHINE\SYSTEM\Setup\Status\ChildCompletion,双击右侧窗格中的 setup.exe,将数值数据从 1 修改为 3,单击确定以应用更改。退出注册表编辑器并重新启动计算机即可。

重启后出现 defaultuser0 用户

在 PE 下打开 NTPWEdit,加载移动硬盘分区的 SAM,路径为 Windows\System32\config,把所有用户密码都删掉,保存后重新进入系统即可。

Mac

参见黑苹果安装教程,安装磁盘改为移动硬盘即可。注意不要安装不必要的驱动,config.plist 中不要放显卡和声卡注入项。

将Clover文件夹与Microsoft文件夹放于同级,并将BOOT/BOOTX64.efi替换成Clover的BOOTX64.efi即可引导。

Ubuntu

参见Linux安装教程,安装磁盘改为移动硬盘。同理,让EFI分区的EFI/BOOT下有ubuntu文件夹即可引导。

Chrome OS

参见 Chrome OS 安装教程。注意,所有操作均从未分配空间中进行,因此最后移动硬盘将有两个 EFI 分区,一个用于引导 Windows、Mac 与 Ubuntu,另一个用于引导 Chrome OS。

引导菜单配置

经实验,移动硬盘的 Clover 启动项较易丢失,而 Ubuntu 启动项能够长期存在,因此在 Ubuntu 引导菜单添加 Clover 启动项,可确保黑苹果的成功引导。

进入 Ubuntu 系统,在终端输入以下命令查询磁盘,记下 EFI 分区的UUID

1
sudo blkid

编辑系统盘的/etc/grub.d/40_custom,在文件末尾添加以下内容并保存。

1
2
3
4
5
6
7
menuentry 'Mac OS X' --class os {
insmod part_gpt
insmod fat
set root='hd0,gpt1' // 此处修改为EFI分区位置
search --no-floppy --fs-uuid --set=root C14D-581B // 此处修改为EFI分区的UUID后八位
chainloader /efi/Boot/bootx64.efi
}

在终端输入以下命令更新 grub 引导器即可。

1
sudo update-grub

手动启动引导项

若引导项丢失,可通过 EFI Shell 启动对应的系统引导文件。进入 EFI Shell 后按顺序输入以下命令即可。

1
2
3
4
5
6
map -r -b
# 进入所需要的驱动器,此处为fs7
fs7:
ls
cd efi\boot\
bootx64.efi

引导器

grub4dos

grub4dos 可引导 Windows 的多种系统。

安装

下载 grub4dos 包,并将 grldr、grldr.mbr 和 menu.lst 复制到 C 盘根目录,其中 grldr 和 grldr.mbr 为引导文件,menu.lst 为菜单配置文件。

进入 WinPE 环境,打开 Bootice 并设置当前系统所在硬盘的 MBR 为 grub4dos 0.46a,重启即可进入 grub4dos 界面。

也可直接在 C 盘修改 boot.ini,添加以下引导项即可。

1
C:\grldr.mbr="grub4dos"

修改

修改 menu.lst 即可增加或删除引导项。

WinNT 内核

1
2
3
4
5
6
7
# (hd0,0)为要引导的系统分区
title WinNT
fallback +1
rootnoverity (hd0,0)
chainloader /ntldr
boot
savedefault --wait=2

DOS/Win9.x 内核

1
2
3
4
5
6
7
8
9
10
11
12
# (hd0,1)为需要启动的分区
# 除要启动的分区外,其余分区需要隐藏
title Win9x/DOS
fallback +1
unhide (hd0,1)
hide (hd0,2)
...
hide (hd0,n)
rootnoverity (hd0,1)
chainloader (hd0,1)/io.sys
boot
savedefault --wait=2

镜像

1
2
3
4
5
6
# ISO后缀可以改为IMG
title ISO
map (hd0,0)/name.iso (fd0)
map --hook
chainloader (fd0)+1
rootnoverity (fd0)

BootloaderChooser

适用于 UEFI 引导,可在多引导的机器上选择需要引导的 efi。

下载以下链接中的BootX64.efi,复制到EFI分区中的EFI/BOOT以替换即可。该引导器可以搜索所有的efi,为此可以引导不同版本的Clover或OpenCore,只需对CLOVERX64.efi或OpenCore.efi重命名即可。

1
https://github.com/jief666/BootloaderChooser/tree/main/efi_files

BIOS+GPT

可通过模拟 UEFI 的方式,实现 BIOS 下的 GPT 硬盘引导。

Clover

通常使用 Clover 在 BIOS 下模拟 UEFI。

在 Mac 下打开 Clover 的 pkg 安装包,安装位置选择要安装的硬盘或 U 盘。点击自定,设置安装到 boot0ss(或 Boot0af)和 Blockio、安装到 ESP 分区,并选择 CloverEFI 下的 SATA(boot6),进行安装。从 U 盘启动,理论上启动时将出现6_并成功进入。若卡住,则选择 CloverEFI 下的 BiosBlockIO 进行安装,再次从 U 盘启动,理论上出现7_并成功进入。

OpenCore

注意该方法不能用在 MBR,也不能在制作完成后更换为 Clover 引导文件。

下载 OpenCore 后打开终端,执行以下命令,选择对应磁盘即可。

1
2
3
4
5
# 64位的命令
sudo [OpenCore路径]/Utilities/legacyBoot/BootInstall_X64.tool

# 32位的命令
sudo [OpenCore路径]/Utilities/legacyBoot/BootInstall_IA32.tool

模拟器

通过以下链接下载模拟 UEFI。

1
https://pan.baidu.com/s/1bnCNCTp#list/path=%2F

进入 WinPE 环境。将磁盘转换为 GPT 分区,开头划分出一个 200-300MB 的 EFI 分区,可以不建 MSR 分区。将 EFI 分区格式化为 FAT32,复制压缩包内EFI 分区根目录的文件到新建的 EFI 分区的根目录下。

运行bootice文件夹里的BOOTICE程序,目标磁盘选择 GPT 磁盘,点击主引导记录,选择恢复 MBR,恢复文件选择文件夹内的boot0ss。恢复完成后回到主界面,点击分区引导记录,目标分区选择 EFI 分区,点击恢复 PBR,恢复文件选择文件夹内的boot1f32alt。完成后重启即可进入模拟 UEFI 环境。

若需向 GPT 磁盘中在安装 Windows,则可以先行分出另一个 EFI 分区,并对此分区添加盘符,利用 WinNTSetup 安装系统时将此 EFI 分区设为引导驱动器,安装完成后再次进行上述 MBR 和 PBR 的恢复操作。确认系统能够正常进入后,可保留当前 EFI 结构或者将 EFI 分区中的 Microsoft 文件夹复制到模拟 UEFI 所安装的 EFI 分区。注意,系统安装完成后不能进行更新操作,否则由于 Windows 更新会重写 EFI 分区,更新完成后会无法进入系统。

完成后可以精简和更新 EFI 分区的内容。如果使用的是 64 位的 UEFI,则可删掉 driverIA32.efi,同时可以将 CLOVERX64.efi 替换为最新版本。

注意,如果需要用 Clover 引导 MBR 磁盘下的 Windows,则需要在 drivers64UEFI 文件夹里放置 NTFS.efi,并编辑 config.plist,在 Scan 标签页下勾选Legacy

关闭 BIOS 安全启动

从以下地址下载镜像文件,并用 Etcher 写入 U 盘。在具有安全启动功能的 PC 上的首次启动将显示访问冲突消息框。按确定,然后选择从文件注册证书,选择 ENROLL_THIS_KEY_IN_MOKMANAGER.cer 并确认证书注册即可。

1
https://github.com/ValdikSS/Super-UEFIinSecureBoot-Disk/releases

参考教程

装系统不求人——硬盘的秘密深入

Dual Booting DOS and Windows 95 : Follow-up

怎么让老电脑实现UEFI启动NVME SSD固态硬盘进系统方法

无需U盘,任何机器可以用上32/64bit两种架构的UEFI

How to Boot Linux ISO Images Directly From Your Hard Drive