Linux 用户不是在修 GRUB,就是在修 GRUB 的路上。

博主只知道更新 Windows 容易把 Linux 覆盖掉,没想到最近更新 BIOS,把 EFI 还是什么改了,引导不了 Manjaro 了。

本文假定:

  • 使用 EFI 进行引导,EFI 分区在 /dev/nvme0n1p1
  • Manjaro 分区在 /dev/nvme0n1p5

# 1. 从 Manjaro Live CD 启动到硬盘里的 Manjaro

进入 Manjaro Live CD 后,需要挂载硬盘里的 Manjaro,就可以 chroot 到硬盘里的 Manjaro。

查看分区情况,确认分区号:

[manjaro@manjaro ~]$ sudo fdisk -l
Disk /dev/nvme0n1: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: WDC PC SN730 SDBPNTY-512G-1101          
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 8AE01A08-4A72-4BD0-97B0-ACD7705FCD94

Device             Start        End   Sectors   Size Type
/dev/nvme0n1p1      2048     534527    532480   260M EFI System
/dev/nvme0n1p2    534528     567295     32768    16M Microsoft reserved
/dev/nvme0n1p3    567296  746506239 745938944 355.7G Microsoft basic data
/dev/nvme0n1p4 998166528 1000214527   2048000  1000M Windows recovery environment
/dev/nvme0n1p5 788449280  893306879 104857600    50G Linux filesystem
/dev/nvme0n1p6 893306880  998166527 104859648    50G Linux filesystem
/dev/nvme0n1p7 746506240  788449279  41943040    20G Linux swap

挂载 Manjaro 分区到 /mnt、EFI 分区到 /mnt/boot/efi

[manjaro@manjaro ~]$ sudo mount /dev/nvme0n1p5  /mnt
# 可以 ls /mnt 确认挂载对没有

# 如果没有 /mnt/boot/efi 可以创建该文件夹
[manjaro@manjaro ~]$ sudo mount /dev/nvme0n1p1 /mnt/boot/efi
# 可以 ls /mnt/boot/efi 确认挂载对没有

Arch 提供了 arch-chroot,Manjaro 改为了 manjaro-chroot

manjaro-chroot /mnt/

进入到主系统以后,可以看看根目录、boot 目录,或者 sudo -u <你的用户名> zsh 确认一下。

另外,我们没有挂载 home 分区,如果需要,可以手动挂载。

# 2. 将 GRUB 安装到 EFI 分区

注意,下面的参数 /dev/nvme0n1 是整个硬盘。

$ grub-install --recheck /dev/nvme0n1 --efi-directory=/boot/efi
Installing for x86_64-efi platform.
Installation finished. No error reported.

安装完成后,可以确认一下 /boot/efi 下确实有了 grub 文件夹。

# 3. 更新 GRUB 配置

该命令行会默认将生成的 GRUB 配置输出到屏幕上(如果不想看可以跳过这一步)。可以检查一下是否记录了 Windows 分区。

grub-mkconfig

当然我们是要写到文件里的。需要写到 EFI 分区下的 grub 文件夹。

grub-mkconfig -o /boot/efi/grub/grub.cfg

写完以后也可以 cat /boot/efi/grub/grub.cfg 检查一下。

至此就搞定了(大概)。重启 Live CD,拔掉 U 盘,应该就能看到 grub 引导界面了。