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 引导界面了。