迁移到GPT+UEFI

我这台电脑的主板(H77)默认是打开 UEFI 的。但是两年前,装机的时候,因为当时我还是一个彻头彻尾的Linux小白,只会跟着 Ubuntu Installer 安装,而当时的 Ubuntu Installer 又恰好在UEFI模式下工作不正常,所以我就关了UEFI。后来我折腾 ArchLinuxGentoo Linux 的时候,遭遇了各种由 bootloader 导致的问题,比如说 GRUB 跟我闹别扭死活不引导的奇葩问题。而 UEFI 模式可以不需要 GRUB 之流的引导程序,再加上我好奇~~不折腾会死~~的心理,我决定迁移到 GPT + UEFI

阿卡林现在使用的是 Gentoo Linux x86_64systemd (拒绝圣战),也就是寒假伊始我作死折腾的那个。但是,由于 Gentoo Wiki 实在是不够完整,所以我参考了很多 Arch Wiki 的内容。

转换分区

这一步我是在系统里直接操作的。根据 Arch Wiki 上的内容,我们可以使用 gdisk 工具来转换MBR分区表到GPT分区表。

emerge gptfdisk
gdisk /dev/sda # /dev/sda是你的硬盘设备路径

然后直接输入w回车,gdisk 会自动把你的MBR转换为GPT。

做这一步的时候可以顺便记住你的活动分区号,一般是 /boot 的分区号,我们假设它为 /dev/sda2

配置内核

其实如果转换好分区没有重启的话,是可以在系统里直接操作的,可是阿卡林是那种比较谨慎小心~~蛋疼无比~~的人,所以我自己是从 Gentoo LiveCD 启动进行配置的。当然,LiveCD是不支持UEFI模式的,你可以通过BIOS引导进CD,或者使用 SystemRescueCD,步骤是一样的。

进入光盘系统后,首先按照 Gentoo Handbook 上的内容,配置好网络,并把硬盘上的整个系统挂载到 /mnt/gentoo 下。然后,使用 chroot 进入 /mnt/gentoo

接下来,我们需要切换到 /usr/src/linux 。根据Wiki上的内容,现在需要打开以下内核配置

  • CONFIGEFIPARTITION
  • CONFIGEFISTUB
  • CONFIGEFIVARS

可以用 make menuconfig 进行配置,也可以手动编辑 .config

接下来我推荐把内核命令(Kernel Command Line)也编译进内核,因为EFI默认是不传递内核参数的。只需配置

CONFIG_CMDLINE=root=/dev/sdaX init=/usr/lib/systemd/systemd

即可。我没有使用 initramfs ,所以没有加上。

然后,执行 make 编译即可。

安装内核

首先,退出 chroot 环境,并卸载 /mnt/gentoo/boot

mkfs.msdos -F 32 /dev/sda2
mount /dev/sda2 /mnt/gentoo/boot
chroot /mnt/gentoo /bin/bash
cd /usr/src/linux
make modules_install && make install
mkdir -p /boot/EFI/Boot
mv /boot/vmlinuz-* /boot/EFI/Boot/bootx64.efi

以上命令是把启动分区 /dev/sda2 格式化为FAT32并重新进入 chroot 环境,将内核安装到 /boot/EFI/Boot/bootx64.efi

接下来,就可以退出光盘,重启到BIOS里打开UEFI,然后硬盘启动。

后续

UEFI自带启动管理器,所以即使有多系统(比如说一个急救环境,如 sysrccd)也不需要什么 grub 之流。可以直接在Linux下用 efibootmgr 管理启动项。具体可见 Gentoo Wiki

千万不要开Secure Boot!!!!

总结

原以为要折腾很久,但实际上以上步骤我一共只花了20分钟的时间就完成了,还不到我第一次配置 bootloader
的时间。

UEFI大法好好好好好!!!!!


You'll only receive email when Typeblog publishes a new post

More from Typeblog