如何让华硕主板识别EFI系统分区?

如何让华硕主板识别EFI系统分区?

不久前,我决定调整 EFI 分区的大小。别问为什么……从那以后,我就无法正常启动了。为了调整大小,我使用了 gparted,并将分区大小更改为 268MB。无法启动后,我将其改回原来的 512MB,但没有成功。我现在通过 Super Grub Disk 启动我的系统。

我的系统中有 2 个磁盘。1 个是主 GTP 磁盘(金士顿),另一个是 MBR 磁盘(WD),仅用于存储数据。忽略 MBR 磁盘。您还将看到一个装有 Super Grub Disk 的 Transcend USB 棒。

我当前的主磁盘布局如下:

sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Disk /dev/sda: 234441648 sectors, 111.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): EA79EA21-C913-462F-9A23-9CD5D1E74496
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 234441614
Partitions will be aligned on 2048-sector boundaries
Total free space is 2925 sectors (1.4 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1050623   512.0 MiB   EF00  EFI System Partition
   2         1050624         1550335   244.0 MiB   8300  
   3         1550336       234440703   111.1 GiB   8E00  

所以我显然在 /dev/sda 上有 ESP。这是 parted 的输出。为您提供一些有关分区详细信息的信息:

(parted) print
\Model: ATA KINGSTON SH103S3 (scsi)
Disk /dev/sda: 120GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name                  Flags
 1      1049kB  538MB  537MB  fat32        EFI System Partition  boot, hidden, esp
 2      538MB   794MB  256MB  ext2
 3      794MB   120GB  119GB                                     lvm

现在解决启动问题...当我启动我的 BIOS 时,我得到以下启动选项:(抱歉必须使用图片...) 启动选项

基于金士顿磁盘上没有“UEFI”标签这一事实,我认为华硕没有将此磁盘检测为 GPT/EFI。当然,因为它存在于我的 SuperGrubDisk 闪存驱动器(也是带有 ESP 的 GPT)中。

当我尝试从磁盘启动时,屏幕却变黑了。这让我认为它正在尝试从 MBR 启动,但 MBR 中没有任何有用的信息。

因此,当我启动超级 grub 磁盘时,我得到以下选项: Grub 选项 因此看起来 ESP 就像预期的那样出现在 HD1、GPT1 上,并且启动完全正常。

我已经刷入了最新版本的固件,希望能解决这个问题。我最后的办法是备份数据并重新安装,但我想先尝试用正确的方法解决这个问题。

答案1

首先,关于EFI模式启动的一些要点:

  • EFI 固件包括一个启动管理器,它维护 NVRAM 中的可启动文件和设备的列表,以及应首先启动的优先级列表。
  • 操作系统安装的 EFI 引导加载程序是存储在 ESP 上的文件。因此,您不会像在 BIOS 中那样“引导磁盘”或“引导分区”;而是引导文件
  • 上述情况的部分例外:有一个特殊的倒退文件名(EFI/BOOT/bootx64.efi适用于 x86-64 系统),当没有其他有效条目时可以启动。此文件名最初用于安装媒体(CD、USB 闪存驱动器等),但也可用于硬盘上的 ESP。
  • 许多(但不是全部) EFI 在检测到启动条目不再有效时会自动从其内置启动管理器中删除启动条目。
  • 以我的经验来看,调整 FAT 分区大小并不可靠,有时会导致文件系统无法被部分或全部操作系统读取。(就这一点而言,EFI 是一个操作系统。)
  • 即使调整大小成功,它也可能会改变分区的 GUID 值,该值用作 EFI 的启动管理器配置中引导加载程序路径的一部分。

综合以上所有情况,我怀疑当您调整 ESP 的大小时,固件无法访问 Ubuntu 引导加载程序,然后固件会将其从内置引导管理器中删除。将分区调整回其原始大小可能会或可能不会解决访问问题,但即使文件系统现在可以访问,由于基于 NVRAM 的引导条目已经消失,您也无法再引导引导加载程序 - 至少,除非经过一些额外的步骤,例如使用超级 GRUB 磁盘。

作为解决问题的第一步,我建议您dosfsck在 ESP 上运行(或其他操作系统上的某些等效工具)。这应该可以解决任何遗留的文件系统问题。

完成后,您需要为启动项创建一个新的 NVRAM 条目。执行此操作的最不具侵入性的方式是efibootmgr从 Linuxbcfg的 EFI shell 中使用简易UEFI或者bcdedit从 Windows 或类似工具启动。由于您现在可以启动 Ubuntu,因此以下命令应该可以解决问题:

efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\ubuntu\\shimx64.efi -L ubuntu

如果您在禁用安全启动的情况下启动,则可以更改shimx64.efigrubx64.efi;但是,shimx64.efi无论是否启用安全启动,都应该可以工作,因此最好使用它,除非它不起作用。还请注意双反斜杠 ( \\) 作为目录分隔符;EFI 使用 DOS/Windows 样式的反斜杠 ( \) 而不是 Unix/Linux 样式的斜杠 ( /) 作为目录分隔符,并且反斜杠在 Bash 中必须加倍或括在引号中,因为它们在 Bash 中用作转义字符。(我听说的最新版本efibootmgr可以将斜杠转换为反斜杠,但我不知道这个变化出现在哪个版本,所以使用双反斜杠是最安全的。)

需要注意的是:如果您的 Super GRUB Disk 是在 BIOS/CSM/传统模式下启动的,则efibootmgr无法正常工作。如果是这样,您需要使用在 EFI/UEFI 模式下启动的 Linux 紧急磁盘执行上述操作。或者,您可以使用我的rEFInd 启动管理器在 USB 闪存盘或 CD-R 上以 EFI 模式启动 Ubuntu,然后使用efibootmgr重新激活 GRUB。

相关内容