问题
当打开电脑时候,直接跳过 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 “程序”去读取和显示。每当您增删系统或更新内核后,都需要运行这个命令来“刷新菜单”。