我有一个笔式驱动器或磁盘,可以通过以下方式访问
/dev/sda
并且分区在
/dev/sda1
/dev/sda2
/dev/sda...
我想知道磁盘本身和每个分区:
- 它是经典可启动的(BIOS 启动模式/UEFI 之前)(我认为使用了 MBR)
- 它是 UEFI 可引导的吗(我认为那时没有使用 MBR)
- 以上都不是
- 以上两者
我知道有 fdisk 但它不支持 GPT 所以我不能将它用于 GPT 磁盘。并且 parted 只显示“启动”标志,但它不知道它是 BIOS 可启动还是 UEFI 可启动。
我知道这项任务不会那么难,因为每个现代 BIOS 都可以列出可启动设备,并且它还显示它是否是 UEFI。
如果磁盘的第一个 512 字节块(块 #0)的最后两个字节是 0x55 和 0xaa,则磁盘是可引导的 BIOS 样式。如果这是真的,那么 BIOS 固件将假定该块包含有效的主引导记录 (MBR) 并将尝试执行它。前 446 个字节左右应该包含 x86 处理器在 16 位 8086 兼容模式下的可执行代码。
除此之外的任何事情都取决于 MBR 代码的作用:大多数标准 Microsoft MBR 将查找已标记为活动的主分区,并将继续加载并执行该分区的第一个块。但是另一个像 GRUB 这样的引导加载程序可以完全忽略分区标志,并在需要时做一些完全不同的事情。
如果可移动媒体包含 UEFI 固件可识别的文件系统(该规范最初要求使用特定版本的 FAT32,但它也扩展为涵盖 FAT12 和 FAT16;此外,固件实现可以自由添加支持其他文件系统类型),文件系统有一个名为
EFI
(不区分大小写)的目录,该目录有一个名为 的子目录boot
,该子目录有一个引导加载程序文件(*.efi
),其名称特定于系统架构。或者换句话说,以 Windows 风格的绝对路径表示,从该特定文件系统的根目录开始:\EFI\boot\bootx64.efi
适用于 64 位 x86 系统\EFI\boot\bootia32.efi
适用于 32 位 x86 系统(一些迷你笔记本电脑和旧 x86 Mac)\EFI\boot\bootia64.efi
用于 Intel Itanium 系统(主要是运行某些版本的 Windows、HP-UX 或 OpenVMS 的服务器)\EFI\boot\bootarm.efi
适用于带有 UEFI 固件的 32 位 ARM 处理器\EFI\boot\bootaa64.efi
适用于带有 UEFI 固件的 64 位 ARM 处理器\EFI\boot\bootriscvNN.efi
适用于具有 UEFI 固件的 32、64 和 128 位 RISC-V 处理器(NN
分别可以是 32、64 或 128)如果磁盘具有 GPT 分区表,则包含 UEFI 引导加载程序的分区的分区类型 GUID 应为
C12A7328-F81F-11D2-BA4B-00A0C93EC93B
,将其标识为EFI 系统分区或简称 ESP。任何带有 UEFI 固件的系统都应该支持 GPT 分区。如果磁盘具有 MBR 分区表,则包含 UEFI 引导加载程序的分区应具有 MBR 分区类型代码
0xef
... 但这不是严格要求。不可移动磁盘可以在不同路径中包含其他 UEFI 引导加载程序,因为已安装操作系统的引导加载程序路径名将存储在用于保存其他 UEFI 固件设置的同一非易失性内存中。这些应该放在 ESP 分区中,在目录的供应商特定子目录中
\EFI
。在 Linux 中以 root 身份使用efibootmgr -v
以查看 UEFI 引导加载程序路径名和相关的引导设置。不可移动磁盘也可以在上面为可移动媒体指定的固定路径之一中包含 UEFI 引导加载程序文件:这称为备用引导加载程序路径,并且可以在非易失性内存设置丢失时使用。
bootmgfw.efi
默认情况下,Windows 会像这样放置它的副本;除非您特别要求,否则 Linux 发行版的安装程序通常不会这样做。由于 ESP 经常(但不总是)安装
/boot/efi/
在 Linux 中,您会发现例如 RHEL 的 Secure Boot shim bootloader/boot/efi/EFI/redhat/shimx64.efi
和实际的 GRUB 在/boot/efi/EFI/redhat/grubx64.efi
. 第一个efi
只是挂载点目录的名称,第二个EFI
是 UEFI 规范要求的子目录的名称。根据 GPT 规范,GPT 分区表从磁盘块 #1 开始,块 #0 为保护 MBR保留:一个虚拟 MBR 分区表,它应该只有一个分区条目,描述占用整个磁盘(或大约 2 TiB 的 MBR 绝对最大值,以较小者为准),分区类型设置为
0xee
.这告诉不支持 GPT 的系统“是的,该磁盘已被格式化和分区并且正在使用中,不,它不是您会知道的分区类型。请不要为用户提供简单的方法来一键格式化我。”
当然,这使得构建具有混合 GPT/MBR 分区的磁盘成为可能:对于不理解 GPT 的系统来说是一个有效的 MBR(可能包括引导代码),对于那些理解 GPT 的系统来说是一个有效的 GPT 分区表,带有一个 ESP 分区包含用于不同系统架构的任意数量的 UEFI 引导加载程序。
在BootRepair中,运行boot-info 脚本而不进行任何自动修复,您应该获得有关驱动器(以及其他驱动器)的引导结构的信息。
如果引导结构与 Ubuntu 的差异太大,则引导信息脚本可能会失败。然后,您应该检查是否存在带有 FAT 文件系统的 EFI 系统分区 (ESP),如果存在带有“bios_grub”标志的非常小的分区,则应使用 GPT。有关更多详细信息,请参阅此链接。不同操作系统的可引导驱动器和克隆的混合 iso 文件之间的情况可能会有很大不同。
出于这个原因,最好在计算机上测试它,您知道它可以在 UEFI 模式和 BIOS 模式下启动(别名 CSM 别名 legacy boot)。