我已经在我的机器上安装了 Fedora,/
分区、swap
分区和ESP
EFI 启动分区。
现在,我安装的是 Elementary OS 而不是 Fedora。
- 我已经格式化了
/
分区(/dev/sda3) - 格式化交换分区(/dev/sda4)
- 但没有格式化EFI启动分区(/dev/sda1)
现在,当我启动时,我会看到 Fedora 安装的旧 grub 菜单。我只能通过以下方式启动到 Elementary OS:
- 进入启动菜单。
- 选择从EFI文件启动
- 导航
/dev/sda1/
, 以获取elementary
包含grubx64.efi
文件的目录。这是/boot/efi/EFI/elementary/grubx64.efi
.
我该如何解决这个问题?我想/dev/sda1/
用fat16
什么东西格式化启动分区,然后在上面重新安装grub。
我的/dev/sda1
现在包含这个:
root@rafael:/home/rafael# ls /boot/efi/
EFI mach_kernel System
root@rafael:/home/rafael# ls /boot/efi/EFI/
BOOT/ elementary/ fedora/
root@rafael:/home/rafael# ls /boot/efi/EFI/fedora/
BOOT.CSV fonts gcdx64.efi grub.cfg grubx64.efi MokManager.efi shim.efi shim-fedora.efi
root@rafael:/home/rafael# ls /boot/efi/EFI/elementary/
grubx64.efi
这是我的efibootmgr
输出:
BootCurrent: 003D
Timeout: 0 seconds
BootOrder: 2001,2002,2003
Boot0000* Notebook Hard Drive
Boot0010* Internal CD/DVD ROM Drive
Boot0011* Internal CD/DVD ROM Drive (UEFI)
Boot0012* Fedora
Boot0013* Fedora
Boot0014* Fedora
Boot0015* Fedora
Boot0016* Fedora
Boot0017* Fedora
Boot0018* Fedora
Boot0019* Fedora
Boot001A* Fedora
Boot001B* Fedora
Boot001C* Fedora
Boot001D* Fedora
Boot001E* Fedora
Boot001F* elementary
Boot2001* USB Drive (UEFI)
Boot2002* Internal CD/DVD ROM Drive (UEFI)
任何帮助,将不胜感激。
答案1
我不知道你为什么要使用 grub。 UEFI 充当引导加载程序,它允许从引导菜单中选择不同的操作系统或单个内核。尽管有一些例外,但通常不需要链接第二个引导加载程序(在本例中为 grub)。
你提到,你安装了elementary OS反而Fedora 的,这意味着你只需要加载一操作系统。在这里我介绍一种方法 没有使用 grub。内核需要使用EFI_STUB进行编译,如果是这样的话你可以检查一下
grep EFI_STUB /boot/config-<version>
将内核和initramfs复制到ESP(EFI系统分区)
cp /boot/vmlinuz-<version> /boot/efi/EFI/elementary/vmlinuz-<version>.efi
cp /boot/initrd.img-<version> /boot/efi/EFI/elementary/initrd.img-<version>
将内核注册为 UEFI 中的引导选项
echo "root=UUID=<disk_uuid> ro quiet rootfstype=ext4 add_efi_memmap initrd=\\EFI\\elementary\\initrd.img-<version>" |
iconv -f ascii -t ucs2 |
efibootmgr \
--create --gpt \
--disk /dev/<disk> --part <partition_number> \
--label "Elementary OS" \
--loader "\\EFI\\elementary\\vmlinuz-<version>.efi" \
--write-signature --append-binary-args -
参数--disk
采用磁盘的设备名称,例如
--disk /dev/sda
,--part
参数采用 ESP 的分区号,例如 4。您可以使用以下命令找到 ESP 分区号:
gdisk -l /dev/sda | awk '$6=="EF00" {print $1}'
确保在每次内核更新后重复这些步骤
您可以手动执行此操作(只需重复上述步骤),也可以编写一个小脚本来完成这项工作。为了完全自动化,该脚本可以挂接到内核安装后过程、initramfs 更新后过程和内核 postrm 过程(以删除 UEFI 引导条目)。实际上,我不知道为什么发行版中没有默认执行此操作,这只是几行代码。
答案2
我做到了 !
首先,我通过以下方式删除了所有不必要的启动项:
efibootmgr -b <entry_hex_number> -B
然后,使用文件系统重新格式化 ESP 分区FAT32
。
mkfs.vfat -F32 /dev/sda1
然后安装 grub 为/dev/sda
NOT/dev/sda1
grub-install /dev/sda