Archlinux安装UEFI Grub

最近换了电脑,以前的老电脑使用的是旧BIOS架构启动,新电脑都变成了新的BIOS架构即UEFI启动(UEFI是新BIOS架构,自从UEFI出来之后,老的BIOS架构便被称为legacy),在安装grub时比之前稍微麻烦了一点。

准备

参考教程:https://wiki.archlinux.org/index.php/GRUB
虽然Arch的wiki有简体中文的翻译,但是一定要看英文的!!!中文的翻译不能与时俱进,而且很多地方都翻译的不好,甚至翻译错了……本页面就是一个很典型的按照中文装系统会装错的例子……

先简单知道几个必要的名词:

  • UEFI: Unified Extensible Firmware Interface,统一可扩展固件界面,提供了启动操作系统的标准环境。
  • ESP: EFI System Partition,EFI分区。
  • GPT: GUID Partition Table,GUID分区表,是UEFI标准的一部分,使用GUID/UUID来标识分区等。

在磁盘上安装grub,就是将此磁盘作为启动盘。想使用EFI启动,一定要在这一块磁盘上有EFI的系统分区(EFI System Partition, 即ESP)。因此,找到这个分区就是其中的关键。

安装步骤

  • 安装grubefibootmgr
pacman -S grub efibootmgr
  • 寻找ESP
    非常重要,一定要找到自己想要安装grub的磁盘的EFI分区,即ESP。对于双系统来说,基本上这个分区是已经存在的。对于我来说,Windows10装在了sda盘上,因此可以使用:
parted /dev/sda print

查看sda盘的分区信息,可以看到输出有Partition Table: gpt字段,而且/dev/sda1flag字段下有boot标记,可以确定这就是EFI分区。另外,根据wiki描述,这个分区一般都是fat32/vfat格式,vfat就是Windows下常说的fat64

  • 安装grub
    安装grub的时候一定要将grub安装在刚刚找到的EFI分区上。
    先挂载EFI分区:
mkdir /boot/myefi
mount /dev/sda1 /boot/myefi

安装(64位CPU架构):

grub-install --target=x86_64-efi --efi-directory=/boot/myefi --bootloader-id=pikachu

--bootloader-id参数可以随便设置,比如pikachu,装完之后就可以在/boot/myefi/EFI/下找到pikachu文件夹,里面有生成的启动文件。

  • 生成grub配置:
    安装好之后,grub还需要被配置一下才能生效,要不然还是不能使用。对于双系统,还需要让grub找到机器上存在的Windows,以便在开机时选择想要进入的系统。
    为了检测其他系统,需要安装os-prober
pacman -S os-prober

自动配置grub

grub-mkconfig -o /boot/grub/grub.cfg
  • (可选)其他grub配置:
    如果还想让grub更漂亮,添加背景图片,或者修改一下启动顺序之类的,可以修改grub的配置文件,这个属于额外的操作,也比较简单。

遇到的问题

在安装grub的时候,系统报错:EFI variables are not supported on this system,重启电脑,果然安装失败,无法进入系统。只能再次通过Arch安装盘进入系统,进行问题修复。

解决方式

根据Arch论坛的一篇求助帖,发现需要在开机的设置选项里,将legacy的所有启用都关掉,只使用UEFI启动,才能成功。

对于我来讲,我发现虽然我已经在开机启动项里将启动方式设置为了UEFI,但是Boot->Legacy Option Roms仍然为Enabled,设置为Disabled

试了一下,确实好了。

原因

正如开篇所说,BIOS分为legacyUEFI两种。现在存在UEFI + legacy的模式,这是为了让某些不支持UEFI的电脑也能正常使用传统的BIOS引导模式启动,而我们此时是在安装EFI的启动方式,因此一旦设备是通过legacy模式启动的,就会报错“EFI变量不被系统支持”。

猜你喜欢

转载自blog.csdn.net/puppylpg/article/details/77618180
今日推荐