鉴于没钱买新电脑,所以在一个电脑上装了3个系统,Ubuntu,ArchLinux和Windows。然而Windows系统重启经常会导致找不到Arch的启动项,即在UEFI里找不到Arch的grub。于是重建了好多次Arch的grub。
Arch的grub重建方式
准备启动盘
准备一个ArchLinux的启动U盘,就和安装系统时的一样。然后从这个U盘启动Arch Install
切换分区
使用下面的命令列出所有硬盘分区。
fdisk -l
然后会有一个类似于下图的输出。可能输出有很多而且名字也不同,但找到这个部分就行。我们需要关注图中下半部分的其中几个分区。
EFISystem分区存储的是各个系统的启动项。其中第一个EFI是我放置Ubuntu和Windows启动项的,512M的EFI才是ArchLinux(可能也是这个原因导致Ubuntu启动项一直是好的)。
Linux filesysytem就是Linux的根分区。我这里有两个是因为我装了Ubuntu和ArchLinux两个Linux系统。
Windows basic data顾名思义你就应该懂了。我有三个分别对于C盘D盘E盘。
Windows recovery environment是Windows恢复分区,别动就对了。虽然我动过不止一次(。现在我已经做好Windows系统死掉的准备了。

然后敲入下面的命令,切换根分区。
mount /dev/nvme0n1p8 /mnt # 挂载根分区,第二个参数/mnt可以自己命名。
mount /dev/nvme0n1p1 /mnt/boot # 将Windows的EFI分区挂载到根分区的boot目录下,保证根分区名称对应。
arch-chroot /mnt # 切换到根分区。意味着之后'/mnt'就是你的'/'路径,访问'/'就等于访问'/dev/nvme0n1p8'。输入exit可以退出。
部署grub
先安装linux内核,其实是应该执行某个命令的,但是记不住,于是用这个方法顺带执行那个命令了。
pacman -S linux # pacman是arch的包管理器,类似于Ubuntu的apt,-S代表是安装
部署grub,基本照抄别动。其中--bootloader-id后边紧跟着的是启动项名称,也就是在UEFI选择界面时的名称,如果像我一样有好多系统,建议命名清楚一点。
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub
生成配置
grub-mkconfig -o /boot/grub/grub.cfg
然后输入exit退出根分区,输入reboot重启系统。