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

Kin*_*iam 3 efi gpt ubuntu uefi

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

我的系统中有 2 个磁盘。1 个主 GTP 磁盘(金士顿),一个带有 MBR(WD)的仅用于数据。忽略 MBR 之一。您还将看到一个装有 Super Grub 磁盘的创见 U 盘。

我目前的主盘布局如下:

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  
Run Code Online (Sandbox Code Playgroud)

所以我显然在 /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
Run Code Online (Sandbox Code Playgroud)

现在是启动问题……当我启动我的 bios 时,我得到以下启动选项:(抱歉不得不使用图片……) 启动选项

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

无论如何,当尝试从磁盘启动时,我出现了黑屏。这让我假设它试图从 MBR 启动,其中没有任何用处。

所以当我启动超级 grub 磁盘时,我得到以下选项: Grub 选项 所以看起来 ESP 就在 HD1、GPT1 上,正如预期的那样,而且启动非常好。

我已经刷了固件的最后一个版本,希望能解决这个问题。我最后的手段是备份数据并完全重新安装,但我想先尝试以正确的方式解决这个问题。

Rod*_*ith 6

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

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

综上所述,我怀疑当您调整 ESP 的大小时,您使固件无法访问 Ubuntu 引导加载程序,然后固件将其从其内置引导管理器中删除。将分区调整回其原始大小可能会或可能不会解决访问问题,但是即使现在可以访问文件系统,基于 NVRAM 的引导条目消失了,您也无法再引导引导加载程序——至少,不会无需跳过一些额外的环节,例如使用 Super GRUB Disk。

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

完成后,您需要为引导条目创建一个新的 NVRAM 条目。这样做的侵入性最小的方法是efibootmgr从 Linux、bcfgEFI shell、EasyUEFIbcdeditWindows 或一些类似的工具使用。由于您现在可以启动到 Ubuntu,因此以下命令应该可以解决问题:

efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\ubuntu\\shimx64.efi -L ubuntu
Run Code Online (Sandbox Code Playgroud)

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

警告:如果您的 Super GRUB 磁盘在 BIOS/CSM/legacy 模式下启动,efibootmgr将无法工作。如果这是真的,您需要使用以 EFI/UEFI 模式启动的 Linux 紧急磁盘执行上述操作。或者,您可以使用U 盘或 CD-R 上的rEFInd 启动管理器以 EFI 模式启动 Ubuntu,然后使用efibootmgr重新激活 GRUB。