问题

当打开电脑时候,直接跳过 grub,进入 win 系统。

原因

先安装 linux 系统,然后安装 win 系统,win 系统的引导项会将 linux 的 grub 破坏。

解决方法

无法进入 linux

使用一个安装了 archlinux 的 U 盘, 用这个 U 盘进行启动。

使用 iwctl 连接网络。

device list # 获取name,其实就是网卡名
station name get-networks
station name connect 无线网络名
输入密码

按下 ctrl+D 退出,ping 一下外网,测试一下网络。

然后挂载分区(这里可以先查看磁盘名 lsblk -l,挂载就是 /dev/磁盘名):

mount /dev/磁盘名2 /mnt # 根分区,一般也不是特别大,arch中最大的分区是/home
mount /dev/磁盘名1 /mnt/boot # 这个是efi分区,就是分区中最小的那个

接着切换系统环境:

arch-chroot /mnt

安装 os 探查:

pacman -S os-prober

这里需要确保 /etc/default/grub 文件中 GRUB_DISABLE_OS_PROBER=false 这一行没有被注释掉(前面没有 #)。

然后执行 GRUB 安装命令:

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
# --target这个是目标系统
# --efi-directory eif分区的挂载点
# --bootloader-id 这个参数是给即将创建的启动项起一个名字,就用GRUB。

生成 GRUB 配置文件:

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

最后退出并重启:

exit         # 退出 chroot 环境
umount -R /mnt # 卸载所有分区
reboot       # 重启电脑

如果出现问题就前面加个 sudo

可以进入 linux

那就不需要 mount 进行挂载了。

sudo pacman -S os-prober
sudo grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
sudo grub-mkconfig -o /boot/grub/grub.cfg

重启电脑就好了。

指令的区别

grub-install: 安装引导程序本身。它只负责把 GRUB 这个“程序”装到系统里,让电脑知道有这么一个东西可以用来启动。这个操作通常只需要做一次(或者在系统引导损坏时做)。

grub-mkconfig: 生成引导程序的菜单。它负责扫描您有哪些操作系统(Arch, Windows),然后生成一个菜单配置文件 grub.cfg 让 GRUB “程序”去读取和显示。每当您增删系统或更新内核后,都需要运行这个命令来“刷新菜单”。