据我所知,如果我有 gpt 分区方案,grub 程序将完全位于 efi 分区中,而不是像在旧 mbr 中一样只是一个链接。那么现在如果我删除 linux 分区,grub 是否仍然可用?免责声明:我无意卸载 Linux,我只是好奇
答案1
首先,这涉及两个不同的问题:
- BIOS 与 EFI-- 这是计算机上的固件类型;或者在某些情况下,由于 EFI 包含 BIOS 模拟层,因此基于 EFI 的计算机可以在 BIOS/CSM/旧版模式下启动。计算机上安装的 GRUB 2 版本取决于固件类型。在 BIOS 下,安装的
grub-pc
是 16 位 GRUB 2(来自软件包,IIRC);在 EFI 下,安装的是编译为与 EFI 本身相同位深度(32 位或 64 位)的 GRUB 2(来自grub-efi-ia32
或grub-efi-amd64
软件包)。 - MBR 与 GPT-- 分区表类型会影响 BIOS 模式 GRUB 各部分的安装位置细节 -- 在 MBR 磁盘上,引导加载程序的第二阶段位于 MBR 本身之后的未分配扇区中;而在 GPT 磁盘上,这些第二阶段文件位于称为 BIOS 引导分区的特殊分区中(在 中被标识为类型 EF02
gdisk
或在 或 GParted 中设置了“bios_grub 标志”parted
)。对于 EFI 模式引导,分区表类型不太重要;只是 EFI 系统分区 (ESP) 在 MBR 下使用 具有类型代码 EFfdisk
,而在 GPT 下,它在 中被标识为类型代码 EF00gdisk
或在parted
或 GParted 中被“引导标志”标识。(请注意,“引导标志”在 MBR 磁盘上具有完全不同的含义;在使用parted
或 GParted 的 MBR 磁盘上无法正确识别 ESP。)
在全部在某些情况下,GRUB 2 的代码分散在各处。它所在的位置可能存在包括:
- MBR 简介-- 在此上下文中,“MBR”表示磁盘的第一个扇区。大多数 BIOS 模式安装都使用此位置,适用于 MBR 和 GPT 磁盘。第一阶段的 GRUB 代码放在此处,但空间有限(仅 440 字节),因此不可能将 GRUB 的所有内容都放在 MBR 中。
- Linux 文件系统分区上的引导扇区-- 可以安装 BIOS 模式 GRUB,这样其第一阶段代码就位于分区中,而不是 MBR 中。这种配置在 Ubuntu 中并不常见。
- MBR 后部门—— 如前所述,在 MBR 磁盘上,GRUB 将其自身的一部分存储在 MBR 之后。
- BIOS 启动分区-- 如前所述,存在一个单独的分区来取代 GPT 磁盘上的后 MBR 扇区。(这样做是因为 GPT 下的后 MBR 扇区是 GPT 本身的一部分,因此 GRUB 无法使用它们。)
- ESP-- 在 EFI 下,主 GRUB 2 二进制文件位于 ESP 上的一个文件中。此文件包含相当于 BIOS 模式 GRUB 2 的 MBR 和 MBR/BIOS 后启动分区代码的内容。ESP 是不是GRUB 使用其进行 BIOS 模式启动。
- Linux
/boot
目录-- 在所有情况下,GRUB 2 的某些部分都驻留在它可以从普通文件系统加载的文件中。这些文件通常位于 Linux/boot
目录中,一般位于/boot/grub
或中/boot/grub2
。
最后一点,实际上是“陷阱”;如果你从双启动安装中删除 Ubuntu,GRUB 2 将部分删除,因此它几乎肯定会启动但无法正常工作,因为您将删除这些配置和支持文件。grub>
当您尝试启动时,您最终会收到提示。在 BIOS 下,此时您唯一的选择是重新安装其他操作系统的引导加载程序。在 EFI 下,您通常可以通过使用任意数量的工具(efibootmgr
在 Linux 中,bcdedit
或简易UEFI在 Windows 中、bless
在 OS X 中、bcfg
在 EFI shell 中,或在许多 EFI 中在系统特定的固件工具中)。重新安装另一个操作系统的引导加载程序也应该可行,但通常是小题大做。
请注意,大多数引导加载程序都没有这个特定问题。在 EFI 下,ELILO、GRUB Legacy、SYSLINUX、gummiboot/systemd-boot 和 rEFInd 都依赖于存储在与引导加载程序相同的分区(通常是 ESP)上的配置文件,因此如果您删除 Ubuntu,最糟糕的情况是您最终无法启动 Ubuntu,但您仍然可以启动您安装的任何其他程序。在 BIOS 下,LILO 应该仍然可以继续工作;但如果我没记错的话,GRUB Legacy 和 SYSLINUX 都存在与 GRUB 2 相同的问题。
可以配置 GRUB 2 以将其配置和支持文件放在 ESP 上,而不是放在 Linux 文件系统上。但是,出于某些我不知道的原因,Ubuntu 的开发人员选择将这些文件放在 Linux 文件系统上,因此 Ubuntu 存在这个问题。