安装 Ubuntu 时,我无意中将 EFI 安装设置为 Windows EFI 分区。现在我需要删除 Windows 及其 EFI 分区以进行全新安装。我已经准备好另一个分区作为 Ubuntu EFI 启动分区。
我如何迁移/boot/efi
到该分区?
答案1
一个EFI 系统分区 (ESP)只是一个 FAT32 分区,其 GUID 类型代码为 C12A7328-F81F-11D2-BA4B-00A0C93EC93B(或 MBR 磁盘上的 0xEF)。大多数分区工具都有其他显示 GUID 类型代码的方法,因为 GUID 非常麻烦。在parted
、GParted 和大多数其他基于 libparted 的工具中,它显示为在分区上设置的“启动标志”。(但请注意,在 libparted 中,GPT 磁盘上的“启动标志”是无关到 MBR 磁盘上的“启动标志”。据我所知,libparted 没有提供正确标记 MBR ESP 的方法。)在 GPT fdisk(gdisk
、sgdisk
和cgdisk
)中,ESP 的类型代码为 EF00。非 Linux 工具有自己的方法来识别 ESP。
因此,要创建新的 ESP,您需要:
- 启动任何允许您对磁盘进行分区的 Linux 工具。这可能是您现有的 Linux 安装或紧急磁盘/实时 CD——但如果您使用常规安装,请注意,您的操作可能会受到限制,因为许多分区工具会限制您对已安装分区的磁盘的操作。
- 启动您选择的分区工具。
- 如果需要,创建一个新分区。我建议将其大小至少设为 550MiB。请注意,您可能需要缩小现有分区以腾出空间。
- 在分区上放置 FAT32 文件系统。某些工具(例如 GParted)可以将此步骤与上一步合并。
- 将该分区标记为 ESP。
- 取消标记或者删除旧的 ESP。
- 如果有必要,请保存您的更改。
要更改分区表,无需担心您的启动模式——您可以根据需要使用 EFI 模式或 BIOS 模式。(也就是说,有些计算机可以更轻松地在某种模式下从 USB 或 CD-R 启动。)
我同意 oldfred 的观点,即在您的场景中,创建新的 ESP 不太可能是必要的。如果您想从 ESP 中完全删除 Windows 引导加载程序,请随意删除 - /boot/efi/EFI/Microsoft
Ubuntu 安装后的目录树。请注意,这将不是从固件的启动管理器菜单中删除 Windows 启动加载程序。为此,您需要使用efibootmgr
,如下所示:
$ sudo efibootmgr
Timeout: 10 seconds
BootOrder: 0000,0004,0001,0002
Boot0000* rEFInd boot manager
Boot0001* PATA: HP DVD Writer 1040r
Boot0002* SATA: ST32000542AS 2
Boot0003* SATA: TOSHIBA DT01ACA300 3
Boot0004* Windows boot manager
Boot0008* INTERNAL EFI SHELL: ST32000542AS
$ sudo efibootmgr -B -b 4
此示例删除了启动选项 #4,该选项被标识为“Windows 启动管理器”。(我不记得 Windows 默认使用的名称;我从我的一个安装了 Windows 的系统上编辑了这个示例。)不是已安裝。
答案2
在安装之前尝试使用 Ubuntu 的磁盘管理器。在安装“try ubuntu”之前,让 bios 处于 CSM 启动模式,磁盘,单击需要格式化的分区,留空或格式化为 ext2。重新启动,bios 返回 UEFI 启动模式,安装应该可以正常工作。
答案3
使用安装了您的 Linux 版本(包括 Gparted)的可启动 USB 闪存驱动器。
通过访问 BIOS 中的启动顺序从闪存驱动器启动。
在我的华硕笔记本电脑 Aptio BIOS 上,必须先禁用 FastBoot 和 SecureBoot,BIOS 才会启用闪存驱动器启动选项。
一旦可以从 USB 启动,请使用“尝试 Ubuntu”选项运行您的发行版。现在您已从闪存驱动器运行,使用 Gparted 管理分区相当简单。
登录 HDD Distro 时使用 Gparted 是有风险的。
答案4
当您将 Ubuntu 安装到磁盘中有多个 ESP 的设备上时,可能会发生这种情况。这似乎是 Ubuntu 的一个相当老的 bug,当您设置了多个 ESP 时,安装程序只会使用它找到的第一个 ESP。以下是一些详细信息
变更原因:
当您设置多个 EFI 系统分区时,很可能是因为您想要在不同的物理磁盘上安装多个操作系统,从而实现多重引导。在这种情况下,您的 Ubuntu 磁盘几乎就是一个外部存储设备,因此一旦您将 Ubuntu 设置为 UEFI 引导列表中的第一个条目,插入外部磁盘时,计算机就会自动引导至 Ubuntu,移除外部磁盘时,计算机就会引导至另一个操作系统。这就是默认安装行为造成麻烦的地方。移除外部设备时,Ubuntu 引导文件仍然位于内部磁盘的 ESP 中,因此引导加载程序会在计算机启动时首先加载它们,但随后它无法找到实际的 Ubuntu 操作系统,您最终会卡在 grub 命令行中。
解决方案:
对我来说这相当容易,我必须进入我的 Ubuntu 系统并将所有内容从旧 ESP 复制到我希望 Ubuntu 从其启动的 ESP,然后使用 对其进行配置efibootmgr
。
显示磁盘信息:
$ lsblk -e 7 -o name,fstype,mountpoint,uuid,partuuid
NAME FSTYPE MOUNTPOINT UUID PARTUUID
sda
├─sda1 vfat /boot/efi 0C47-F306 60c76b70-01
├─sda2 60c76b70-02
└─sda5 ext4 / 8357ad81-13cf-48a9-b74e-a528df7e79d6 60c76b70-05
nvme0n1
├─nvme0n1p1 vfat /media/my_user/SYSTEM_DRV C6B4-C00B aaeb7117-8371-4ab0-9d3f-c3913a79d819
└─...
检查当前启动项:
$ efibootmgr -v
BootCurrent: 0002
Timeout: 0 seconds
BootOrder: 0002,0000
Boot0000* Windows Boot Manager HD(1,GPT,aaeb7117-8371-4ab0-9d3f-c3913a79d819,0x800,0x82000....
Boot0002* ubuntu HD(1,MBR,0x60c76b70,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
(请注意,我当前的 ESP 有一个 MBR 分区类型,因为我在旧电脑上对其进行了分区,我没有遇到问题,但您可能需要确保使用 GPT,现代 UEFI 可能无法识别 MBR 磁盘)
假设我想将活动 ESP 从 更改sda1
为nvme0n1
。复制所有文件后,此分区应该有一个EFI/ubuntu
目录(绝对路径为MOUNTPOINT/EFI/ubuntu
),Ubuntu 启动文件位于其中。现在为新的 ESP 创建一个启动项:
$ sudo efibootmgr -c -d /dev/nvme0n1p1 -l \\EFI\\ubuntu\\shimx64.efi
再次运行efibootmgr -v
,检查PARTUUID
新 ESP 的 是否出现在新条目中。然后编辑/etc/fstab
,用新 ESP 的 UUID 替换旧 ESP 的 UUID,以便在/boot/efi
下次启动时自动挂载新 ESP。
对我来说就这些了。您可能还想使用 调整启动顺序efibootmgr -o
,或使用 删除旧的 Ubuntu 条目efibootmgr -b 0002 -B
。如果您觉得重新启动不安全,您仍然可以找到更详细的答案,例如这个. 准备一个实时 USB 以备恢复也是不错的选择,以防真的出了问题