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 磁盘时,我得到以下选项:
所以看起来 ESP 就在 HD1、GPT1 上,正如预期的那样,而且启动非常好。
我已经刷了固件的最后一个版本,希望能解决这个问题。我最后的手段是备份数据并完全重新安装,但我想先尝试以正确的方式解决这个问题。
首先,关于 EFI 模式启动的一些要点:
EFI/BOOT/bootx64.efi对于 x86-64 系统)。此文件名最初用于安装介质(CD、USB 闪存驱动器等),但也可用于硬盘上的 ESP。综上所述,我怀疑当您调整 ESP 的大小时,您使固件无法访问 Ubuntu 引导加载程序,然后固件将其从其内置引导管理器中删除。将分区调整回其原始大小可能会或可能不会解决访问问题,但是即使现在可以访问文件系统,基于 NVRAM 的引导条目消失了,您也无法再引导引导加载程序——至少,不会无需跳过一些额外的环节,例如使用 Super GRUB Disk。
作为解决问题的第一步,我建议您dosfsck在 ESP 上运行(或来自其他操作系统的某些等效工具)。这应该可以解决任何挥之不去的文件系统问题。
完成后,您需要为引导条目创建一个新的 NVRAM 条目。这样做的侵入性最小的方法是efibootmgr从 Linux、bcfgEFI shell、EasyUEFI或bcdeditWindows 或一些类似的工具使用。由于您现在可以启动到 Ubuntu,因此以下命令应该可以解决问题:
efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\ubuntu\\shimx64.efi -L ubuntu
Run Code Online (Sandbox Code Playgroud)
如果您在禁用安全启动的情况下启动,您可以更改shimx64.efi为grubx64.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。