我弄乱了 EFI 分区,现在当我启动计算机时,它会打开 BIOS 界面,没有任何启动选项,就像我的磁盘已被擦除一样。然而,使用实时 USB(可以正确识别和启动)并使用 grub 命令行,我已经能够启动我的主要操作系统(Ubuntu)。但是我不知道如何解决这个问题。我尝试运行 grub-install /dev/sda 但它没有改变任何东西。
EFI 分区看起来完全没问题:它有正确的标志(esp、boot)并且里面有所有正确的文件。
tree /boot/efi/
└── EFI
├── Boot
│ └── bootx64.efi
├── Microsoft
│ ├── Boot
│ .....
└── ubuntu
├── fbx64.efi
├── fw
├── fwupx64.efi
├── grub.cfg
├── grubx64.efi
├── mmx64.efi
└── shimx64.efi
我应该检查什么?我缺少什么?
这是我的分区表:
parted /dev/sda print
Model: ATA Crucial_CT525MX3 (scsi)
Disk /dev/sda: 525GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1612MB 1611MB fat32 EFI System Partition boot, esp
2 1612MB 87.9GB 86.3GB ext4 Ubuntu
3 87.9GB 281GB 193GB ext4 Home
5 290GB 290GB 16.8MB Microsoft reserved partition msftres
6 290GB 405GB 115GB ntfs Basic data partition msftdata
8 405GB 500GB 94.4GB ntfs Data msftdata
9 500GB 525GB 25.3GB ext4 Backup OS
答案1
我必须/EFI/my-custom-label/grubx64.efi
将/EFI/boot/bootx64.efi
我的华硕 UEFI BIOS 重命名为才能开始识别它。
- 来源 1:我用 Arch Linux ISO 刷新了 SD 卡,华硕 UEFI 识别了它。我检查了 EFI 分区,主 Arch 引导加载程序是
/EFI/boot/bootx64.efi
. - 来源2:https://forum.manjaro.org/t/bios-does-not-recognize-efi-system-as-boot-partition/24025/19
此问题出现在 Asus Maximus VII Impact(Z97 芯片组)上。我的朋友在基于 Z87 的华硕主板上也遇到了类似的问题。
答案2
还有一个问题可能会导致这种情况,我最近遇到了这个问题。
要检测此问题,请从 Linux 实时启动并运行 gdisk /dev/sd[whatever-your-disk-is] ,通常是 /dev/sda 或 /dev/sdb 或 /dev/sdc 。
发出 p 命令以确保您看到正确的分区列表(如果没有,这可能不是您的磁盘)。
然后输入 v 命令。它可能会这样回应:
Warning: The 0xEE protective partition in the MBR is marked as active. This is
technically a violation of the GPT specification, and can cause some EFIs to
ignore the disk, but it is required to boot from a GPT disk on some BIOS-based
computers. You can clear this flag by creating a fresh protective MBR using
the 'n' option on the experts' menu.
如果这是响应,请使用命令:e、n、w。然后重新启动,您的 EFI 就可能恢复了!
答案3
我的猜测是您的 EFI 系统变量没有设置为指向正确的引导加载程序。您要检查的程序是efibootmgr
.这将显示存储在 NVRAM 中的所有引导条目。
理论上,grub-install
应该处理这个问题,但您可能没有传递正确的选项。这个示例命令应该有效:
grub-install --target=x86_64-efi --efi-directory=ESP_MOUNT_PATH --bootloader-id=grub
更改ESP_MOUNT_PATH
为 EFI 目录的路径。
如果这不起作用,您可以尝试efibootmgr
直接使用:
efibootmgr --create --disk /dev/sda --part 1 --loader /EFI/ubuntu/grubx64.efi --label "GRUB"
我认为在某些系统上您可能必须使用/EFI/ubuntu/shimx64.efi
.所以尝试这样的方法,看看效果如何。
答案4
我还让 grub 在使用 EFI 启动时不显示所有分区,添加参数--modules="part_gpt part_msdos"
以grub-install
允许它显示带有ls
和 的所有分区ls -l
。