(最初发布在 stackoverflow 上,由于偏离主题而关闭。结束消息建议我改为以超级用户身份提问。)
我一直在阅读有关 Linux 启动过程的资料,并尝试通过查看我的机器的启动设备来了解情况:
mcarilli:tmp$ mount | grep boot
/dev/sdc5 on /boot type ext4 (rw,relatime)
/dev/sdc1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
root:tmp# parted -l
...
Model: ATA Samsung SSD 860 (scsi)
Disk /dev/sdc: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos (msdos = MBR, according to google)
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 538MB 537MB primary fat32 boot
2 539MB 1000GB 1000GB extended
5 539MB 1305MB 767MB logical ext4
6 1307MB 1000GB 999GB logical
因此我预计 /dev/sdc1 是我的 EFI 系统分区。根据 wikipedia,EFI 系统分区的“主引导记录 (MBR) 分区表方案中的 ID 为 0xEF。”)作为练习,我尝试验证一下。
MBR扇区布局说“分区条目 No1”(可能)从 0x01BE 开始,分区类型(ID)应该是在偏移量 0x04 处找到在此条目中。因此,在托管分区 (/dev/sdc) 的 MBR 磁盘上,我希望在 0x01BE + 0x04 = 1C2 处看到 0xEF。但我没有:
root:tmp# xxd /dev/sdc | head -n 50
...
000001b0: cd10 ac3c 0075 f4c3 b1df bbbc 0000 8004 ...<.u..........
000001c0: 0104 0bfe c2ff 0008 0000 0000 1000 00fe ................
^ Expected to see "ef" here
我错过了什么?
注意:我不认为我的机器实际上是用 UEFI 固件启动的,我认为它使用 BIOS(无论是原生的还是通过 CSM 回退),因为登录后没有 /sys/firmware/efi 文件夹。不确定这是否与为什么 /dev/sdc1 似乎没有被标记为 0XEF 有关。
答案1
由于磁盘使用 MBR,您的机器无法使用 UEFI 启动。
BIOS 的启动文件位于/dev/sdc5
。
出于兼容性原因,您可能有一个可启动的假 ESP(EFI 系统分区)/dev/sdc1
。它从 1M 开始,有 500MB,因此您可以存储 Windows 10 grub 条目,而无需 UEFI 和 Windows 抱怨您没有 GPT。
以下是供进一步学习的材料,按技术性到新手友好的顺序排列: