前两天处理了一台银河麒麟V10台式机,用户反馈安装Windows之后重启,系统直接进了Windows,银河麒麟的启动菜单消失得无影无踪。这个问题在双系统场景里几乎天天有人遇到。双系统引导的核心其实很简单:谁后装,谁接管引导权。Windows安装程序不会主动去识别已有的GRUB引导,它只会把自己写成启动顺序里的第一位,于是先装好的银河麒麟就像被“藏起来”了。别慌,引导文件大概率还在,只是启动顺序被改掉了。这篇文章把我这次的处理过程、修复命令和后续双系统使用中的高频坑一并整理出来,供装完系统后同样一脸懵的朋友参考。
1. 动手之前先确认三件事:固件模式、安全启动和磁盘空间
1.1 固件模式:UEFI还是Legacy,决定后面所有命令
很多人在双系统引导出问题之后反复尝试修复,却一直没有效果,十有八九是栽在固件模式不匹配上。银河麒麟和Windows必须用同一种固件模式引导,UEFI对UEFI,Legacy对Legacy,混着来两个系统之间一定互相不认。
判断当前银河麒麟的固件模式,在终端执行一条命令:
ls /sys/firmware/efi如果命令执行后能看到一大堆目录(比如EFI、esrt、efivars这些),说明当前系统是通过UEFI模式启动的。如果提示No such file or directory,那就是传统Legacy BIOS模式。
这个判断直接影响后续所有操作:UEFI模式下修复引导用的是grub2-install加efibootmgr,需要操作EFI系统分区;Legacy模式下则是把GRUB写回主引导记录(MBR)。如果你拿UEFI的办法去处理Legacy的机器,或者反过来,折腾一晚上也很正常。
处理之前还要看一眼磁盘分区表格式。UEFI引导对应GPT分区表,Legacy引导对应MBR分区表。执行:
sudo fdisk -l看到Disklabel type: gpt就是GPT,看到dos就是MBR。如果银河麒麟装在GPT磁盘上,那么Windows也必须装在这块GPT磁盘上,并且在UEFI模式下安装,否则Windows安装器可能会提示无法安装或后续引导失败。
1.2 安全启动:关还是开,两种方案各自的坑
安全启动(Secure Boot)是UEFI规范里的一项固件校验机制,目的是防止未签名的引导程序在启动链上被加载。Windows 10和Windows 11对安全启动的态度不一样:Win10建议开启但不是强制,Win11强制要求开启。
银河麒麟V10本身是支持安全启动的,系统里带有shim引导程序,理论上开启Secure Boot也能正常启动。但双系统场景下,开启安全启动经常会带来一个很恶心的现象:GRUB菜单能正常出现,选择Windows后却直接黑屏或者报Security Policy Violation,因为GRUB在向Windows Boot Manager过渡时的签名链在部分主板固件上并不稳定。
我的建议是:如果只是为了用Windows,而不是需要跑依赖安全启动的特定软件,直接进BIOS把Secure Boot关掉。关闭之后,GRUB和Windows的互相引导会顺畅很多,这是我在不同品牌主板上反复验证过的结论。
如果你必须要开安全启动,那就要在装完双系统后,分别单系统验证:先确认银河麒麟在安全启动开启状态下能正常进桌面,再确认Windows能正常启动,最后再测试从GRUB菜单切换过去。三条链路都通,才算真的没问题。任何一条失败,都不要在安全启动开启的状态下强行用,否则一到切换系统就是黑屏重启,排查起来非常费劲。
1.3 磁盘空间评估:Windows至少需要多少空间,以及数据备份
双系统安装的第一步动作不是格式化、不是写U盘,而是先看磁盘空间够不够。Windows系统盘给多少空间合适,取决于用途:只办公、浏览网页,60GB到80GB勉强够用;要装开发工具、虚拟机镜像或者大型软件,100GB起步比较稳妥。
用lsblk或者图形化的“磁盘”工具查看当前分区状况。执行:
lsblk重点关注银河麒麟根分区所在的磁盘,确认它还有多少可用空间。如果磁盘上已经没有空闲空间,就需要从现有分区里压缩出一部分,这个操作在第2章会详细说。
这里必须先强调一句:任何分区调整、格式化操作都有风险,重要数据一定先备份。我见过不止一次,用户在Windows安装器里选错分区,把原来的Linux分区格式化掉,数据全部消失之后才来找我。备份可以放到移动硬盘,也可以放到另一块磁盘,但绝对不要放在同一个待操作分区上。
顺带补充一点:如果你准备在一块全新的硬盘上装双系统,那么安装顺序上,先装Windows再装银河麒麟会省心很多——后装的银河麒麟安装器能够自动检测Windows并生成GRUB菜单。但这篇文章针对的是标题里的场景:已有银河麒麟,要加装Windows,所以下面按这个顺序来。
2. 侧装Windows:两个关键环节决定了引导会不会乱
2.1 腾空间:图形化分区和GParted Live两种方案
银河麒麟系统自带的“磁盘”工具就能完成压缩分区的操作。打开“磁盘”工具,找到根分区所在的那一块磁盘,选中根分区,点击齿轮图标里的“调整大小”,拖动滑块或者直接输入期望的新大小,把多出来的空间留成“空闲空间”即可。
这里有个细节要注意:压缩出来的空间不要急着在Linux侧创建新分区。Windows安装器喜欢自己管理分区结构,你提前建好分区反而可能在后续安装时报错。把空间留成未分配状态就好。
如果根分区是LVM逻辑卷,或者系统盘结构比较复杂,图形化工具可能不给力,这时候推荐用GParted Live U盘。制作方法很简单,到GParted官网下载ISO镜像,用Ventoy或者dd写入U盘,重启进入这个迷你Linux环境,右键点击分区调整大小,操作逻辑和Windows下的分区工具类似。
压缩分区之前,建议先在系统里执行一次文件系统检查,否则压缩过程可能卡在“checking filesystem”上。逐分区执行:
sudo e2fsck -f /dev/nvme0n1p3注意把设备路径替换成你自己的根分区。文件系统干净了,压缩速度会快很多,也不容易中途报错。
2.2 制作Windows安装U盘:Ventoy是更省心的选择
在银河麒麟下制作Windows安装U盘,最省心的方案是Ventoy。Ventoy的原理是把U盘变成一个可引导的启动管理器,你只需要把Windows的ISO镜像文件直接拷贝进U盘,启动时选择对应镜像即可,不用反复格式化U盘。同一张U盘还可以同时放PE工具、Linux Live镜像,做系统维护非常方便。
Ventoy的安装非常简单:到GitHub下载Linux版本的安装包,解压后进入目录,执行:
sudo sh Ventoy2Disk.sh -i /dev/sdX/dev/sdX替换成你的U盘设备名,执行前用lsblk确认清楚,别把磁盘写错了。Ventoy写入过程中会格式化U盘,所以先用一块没数据的U盘。
有些教程会推荐WoeUSB,我也试过,但它在NTFS支持、USB3.0大容量U盘上的兼容性时好时坏,容易做到一半报错。Ventoy的稳定性和兼容性明显更好,目前我给别人做启动盘只推荐Ventoy。
这里还要专门说一个常见误区:不要用dd直接把Windows ISO写入U盘。Windows的安装镜像不是Hybrid ISO,dd写出来的U盘在UEFI模式下经常无法引导,因为固件识别不了这种结构。Ventoy已经处理好了引导兼容,直接用就行。
2.3 Windows安装器里的分区选择:别碰已有分区
从Ventoy启动Windows安装程序后,走到“你想将Windows安装在哪里”这一步时要格外紧张。这时候屏幕上会列出磁盘上的多个分区,包括银河麒麟的根分区、EFI系统分区、交换分区,以及刚才留出来的未分配空间。
正确的操作是:选中那块未分配空间,点击“新建”,然后直接点击“下一步”。让Windows自己在这块空间里创建MSR分区、系统分区和恢复分区。千万不要去选择任何已有的Linux分区,更不要点击“格式化”。
如果你看到Windows报“无法安装到这个磁盘”的提示,通常有两种情况:
- 磁盘是GPT,但固件以Legacy模式引导了安装U盘。解决方法是重启进BIOS,改成UEFI模式启动U盘。
- 磁盘是MBR,但固件是UEFI模式。这种建议把磁盘转换成GPT,转换前同样需要备份数据。
Windows安装过程会重启几次,第一次重启时记得拔掉U盘。如果不拔,有些主板会优先从U盘启动,导致你再次进入Windows安装界面而不是继续安装流程,容易一头雾水。
2.4 第一次重启:为什么开机会直接进Windows
Windows安装完成后的第一次重启,你会发现机器不再出现银河麒麟的GRUB菜单,而是直接进入Windows。这是正常的,原因需要讲清楚。
UEFI固件里有一个启动项列表(BootOrder),里面记录了所有可引导的启动项。银河麒麟安装时会在EFI系统分区里写入GRUB启动文件,并在NVRAM中登记一个名为“Kylin”的启动项。Windows安装程序不会去删除这些内容,但它会创建一个Windows Boot Manager启动项,并且把自己放到启动顺序的最前面。所以开机后固件先去加载Windows Boot Manager,GRUB菜单自然就看不到了。
如果你用的是Legacy BIOS模式,情况会稍微不同:Windows安装程序会直接改写MBR,把GRUB引导代码覆盖掉。这种模式下的修复会更麻烦一点,因为MBR不是靠启动顺序调整就能恢复的,必须重新执行grub2-install写回引导代码。
我先说结论:如果是UEFI模式,你目前只是“启动顺序被改了”,银河麒麟的系统文件分毫未动。不需要重装、不需要恢复备份,只需要把启动顺序调回来,或者重建GRUB引导链即可。这就是第3章要处理的事情。
3. 修复GRUB引导:找回消失的银河麒麟启动项
3.1 先做判断:GRUB文件还在不在
进入修复环节之前,先确认一个关键问题:EFI系统分区里,银河麒麟的GRUB引导文件是否还完好。大多数情况下文件还在,只是启动顺序问题;但少数情况下Windows安装器会覆盖或重建EFI分区内容,导致GRUB文件丢失。两种情况处理方式完全不同。
用银河麒麟的安装U盘启动,进入Live模式(试用模式)。打开终端,先查看磁盘分区概况:
lsblk找到银河麒麟根分区(通常是最大那个ext4分区)和EFI系统分区(一般是小于1GB的FAT32分区)。然后把它们挂载起来:
sudo mount /dev/nvme0n1p3 /mnt sudo mount /dev/nvme0n1p1 /mnt/boot/efi设备路径根据你自己的输出调整。挂载完成后,检查EFI目录:
ls /mnt/boot/efi/EFI如果看到kylin或centos目录,里面还有grubx64.efi或grubaa64.efi之类的文件,说明GRUB文件完好,问题纯粹是NVRAM里的启动顺序错了。如果目录是空的、或者不存在EFI/kylin目录,说明引导文件被Windows清掉过,需要重新安装GRUB。
3.2 Live环境chroot修复GRUB的完整命令
确认完情况,接下来是完整修复流程。在Live终端里,先把系统必要的虚拟文件系统挂载进/mnt,然后chroot进去操作:
for i in /dev /dev/pts /proc /sys /run; do sudo mount --bind $i /mnt$i; done sudo chroot /mnt这一步相当于把当前终端的环境切换到了硬盘上的银河麒麟系统里,接下来执行的命令都是对硬盘系统生效的。
进入chroot后,执行:
grub2-install /dev/nvme0n1 grub2-mkconfig -o /boot/grub2/grub.cfggrub2-install后面跟的是整块磁盘的设备名,不是分区名。-o参数则是把新生成的GRUB配置文件写到硬盘上。如果系统提示找不到grub2-mkconfig或grub2-install,说明当前版本命令是grub-mkconfig、grub-install,去掉那个“2”再执行即可。
如果EFI分区里本来就没有kylin目录,执行grub2-install时需要加自定义参数,让引导文件写入正确的路径:
grub2-install --bootloader-id=kylin /dev/nvme0n1这样会生成EFI/kylin目录下的GRUB引导文件,同时在NVRAM里注册一个启动项。
生成配置文件时,如果输出里出现了Found Windows Boot Manager之类的提示,说明GRUB已经能够识别Windows启动项了。这说明一切正常。如果没有出现Windows字样,先别急,跳到3.4节查看os-prober排查思路。
修复完成后退出chroot并重启:
exit sudo reboot3.3 不想进Live环境?用efibootmgr直接改启动顺序
如果GRUB文件完好,只是启动顺序被Windows置顶了,其实还有一个更轻量的方案:直接用efibootmgr调整启动顺序,不用进Live环境折腾。
前提是你能进入当天的启动菜单。重启电脑时按对应主板品牌的启动菜单快捷键(一般是F12、F11或Esc),在弹出的固件启动菜单里选择“Kylin”或“UEFI Hard Drive”,这样就能重新进入银河麒麟系统。进入系统后,执行:
efibootmgr输出里能看到类似Boot0000: Windows Boot Manager、Boot0002: Kylin这样的启动项列表,以及当前的BootOrder顺序。注意记下Kylin对应的四位数字编号,然后执行:
sudo efibootmgr -o 0002,0000-o参数后面跟的顺序就是新的启动顺序,把Kylin的编号放在最前面即可。保存后重启,GRUB菜单就会如期出现。
如果你的EFI分区里GRUB文件还在,但启动项列表里没有Kylin这一项,可以用efibootmgr手动添加一条:
sudo efibootmgr -c -d /dev/nvme0n1 -p 1 -L "Kylin" -l \\EFI\\kylin\\grubx64.efi-d指定磁盘,-p指定EFI分区编号,-l是GRUB相对EFI分区的路径。ARM架构主机请把grubx64.efi换成grubaa64.efi。
3.4 os-prober的工作逻辑:为什么它能找到Windows
很多人在修复GRUB后重启,发现菜单里只有银河麒麟,没有Windows,然后又开始慌。首先要明确,GRUB配置文件需要借助os-prober工具才能扫描到其他操作系统。grub2-mkconfig在生成配置时,会自动执行os-prober,后者会遍历所有磁盘分区,寻找可以被GRUB引导的系统。
有几种情况会导致os-prober失效:
- 未安装os-prober。用包管理器安装一个:
sudo apt install os-prober,然后重新执行grub2-mkconfig。 /etc/default/grub里设置了GRUB_DISABLE_OS_PROBER=true。把它改为false,或者直接注释掉。- Windows开启了快速启动(Fast Startup),导致NTFS分区处于休眠锁定状态,os-prober无法正常读取。解决方法是先进入Windows,关闭快速启动,再回来重新生成GRUB配置。
最容易被忽略的是第三条。Windows 10默认开启快速启动,系统“关机”后并没有完全关闭内核会话,相关分区处于一种被锁定的状态。这种情况下os-prober扫描NTFS分区会失败,也就找不到Windows Boot Manager。
修正方法:在Windows的“控制面板”->“电源选项”->“选择电源按钮的功能”里,取消勾选“启用快速启动”,然后关机重启。回到银河麒麟后,重新执行:
sudo os-prober sudo grub2-mkconfig -o /boot/grub2/grub.cfg配置正常生成后,重启就能看到Windows Boot Manager (on /dev/nvme0n1p1)这样的菜单项了。
3.5 修复完成后的首次验证
做完以上任意一种修复后,重启机器,应该能看到GRUB菜单,默认选中第一个“Kylin”选项。菜单里通常包含:
- Kylin高级选项
- Kylin(系统默认项)
- Windows Boot Manager
先选Kylin进入银河麒麟,确认桌面正常、数据完好、网络正常,这是最优先要确认的事。如果系统能正常起来,说明根分区和GRUB核心模块都没问题。然后再重启一次,选择Windows Boot Manager,确认Windows也能正常进入。
这一步千万别偷懒只测一个系统。有用户遇到过:GRUB菜单恢复后进银河麒麟没问题,但选Windows直接黑屏重启。这种情况多半和Secure Boot设置或者Windows快速启动状态有关,具体排查思路在第5章会展开。如果两边都能进,恭喜你,双系统引导这部分就算真正解决了。
4. 引导菜单定制:把双系统切换的体验做顺手
4.1 设置默认启动项与等待时间
GRUB菜单恢复之后,默认等待时间通常比较短,只有5秒,而且默认启动项固定是第一个。如果平时大多数时候用银河麒麟,偶尔切Windows,这个默认配置其实够用;但如果默认启动了不常用那一个系统,等5秒内手速不够又被带偏,体验就很糟。
编辑/etc/default/grub,里面有两个核心参数:
GRUB_DEFAULT=0 GRUB_TIMEOUT=10GRUB_DEFAULT=0表示默认启动第一个菜单项。如果你想把Windows设为默认启动项,需要先查看菜单项的编号。执行:
sudo grep -E "menuentry '|submenu '" /boot/grub2/grub.cfg可以看到每个菜单项在配置里的出现顺序,从0开始计数。把对应的数字填到GRUB_DEFAULT里即可。
如果你希望默认启动上一次选择的系统,可以把默认值改为saved:
GRUB_DEFAULT=saved GRUB_SAVEDEFAULT=true这样每次开机GRUB会记住你上次选择了哪一项,下次自动启动那个系统。对于经常两个系统来回切换的人来说,这个设置比固定一个默认项更顺手。我的习惯是GRUB_TIMEOUT=5,配合GRUB_SAVEDEFAULT=true,进系统基本不等待。
4.2 x86与ARM版本grub.cfg路径差异
银河麒麟V10有x86_64和ARM64(aarch64)两个体系版本,它们在GRUB配置路径上的差异经常让不熟悉的人翻车。
x86_64架构下,GRUB配置文件路径是/boot/grub2/grub.cfg,重新生成配置的命令是:
sudo grub2-mkconfig -o /boot/grub2/grub.cfgARM64架构下,GRUB配置的默认路径通常是/boot/efi/EFI/kylin/grub.cfg,因为在ARM平台上固件读取的是EFI分区里的配置文件。重新生成的命令也要对应调整:
sudo grub-mkconfig -o /boot/efi/EFI/kylin/grub.cfg有些ARM版本也兼容grub2-mkconfig命令,这取决于系统里安装的是grub2软件包还是grub软件包。一个稳妥的判断方法:先执行grub2-mkconfig --version,如果提示找不到命令,就去掉“2”再试。
还有一个容易踩的坑:在ARM版本上,如果把配置写到/boot/grub2/grub.cfg,虽然命令不会报错,但重启后固件并不会读取这个文件,菜单还是老样子。所以如果改完配置没生效,先确认你写对了路径。
4.3 菜单标题清理:去掉恢复模式等冗余项
GRUB菜单里除了常规的系统启动项,还会出现“高级选项”子菜单,里面包含多个旧内核和恢复模式选项。对于普通用户来说,这些条目不仅碍眼,还容易在键盘操作时误选。
最简单的清理方式,是在/etc/default/grub里加一行:
GRUB_DISABLE_RECOVERY=true这样重新生成配置后,带recovery标记的菜单项不会出现在菜单里。旧内核项可以通过包管理工具清理,但清理前务必确认当前内核版本在正常运行:
uname -r然后删除旧内核包。删除完成后,再重新生成一次GRUB配置。
菜单里显示的系统名称也值得整理一下。GRUB菜单中显示的名称来自/etc/os-release里的PRETTY_NAME字段,如果你希望菜单显示更明确,可以手动修改/etc/default/grub里的GRUB_DISTRIBUTOR变量。不过个人建议保持系统默认名称,方便识别哪个是哪个,避免装多了系统后菜单里全是“Linux”那样的模糊字样。
4.4 定制完不要忘记重新生成配置
所有对/etc/default/grub或/etc/grub.d/下脚本的修改,都必须执行一次配置重新生成才会真正生效:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg很多人改了/etc/default/grub里的默认启动项,然后直接重启,发现菜单还是老样子,其实就是漏了这一步。重新生成后,最好顺手查看一下输出里有没有Found Windows Boot Manager,确认Windows启动项没丢。
还有一个小技巧:查看当前GRUB记住的选择项,可以执行:
sudo grub2-editenv list如果设置了GRUB_SAVEDEFAULT=true,这里会显示saved_entry的值。当默认启动行为不对时,用这个命令可以快速定位是不是saved_entry记录乱了,必要时用sudo grub2-editenv unset saved_entry清掉重新记录。
5. 双系统引导启动后的高频问题与排查思路
5.1 Windows时间快了或慢了8小时
双系统装完,最经典的时间问题是两个系统来回切换后,Windows显示的时间总是不对。原因在于两个系统对硬件时钟(RTC)的解读不同:Linux默认把硬件时钟当作UTC时间,显示时再按当前时区换算;Windows则是把硬件时钟直接当作本地时间。
所以在银河麒麟下,重启进Windows会发现时间快了8小时(如果你把Linux侧RTC当UTC)。反之,如果Windows设置了同步,回银河麒麟发现时间慢了8小时。
解决方式很简单,在银河麒麟下执行一条命令,让系统把硬件时钟当作本地时间:
timedatectl set-local-rtc 1执行后再用timedatectl查看,会显示RTC in local TZ: yes。此时Windows和银河麒麟的时间就都能保持一致了。
个人建议这个修改在双系统装好之后立即执行,否则Windows的“自动设置时间”经常会把硬件时钟改回去,导致你在两边不断看到错乱的时间。另外,如果你在虚拟机里跑这套双系统,宿主机的时钟设置也可能干扰,这类问题可以分开排查。
5.2 Windows更新重写引导后如何恢复
Windows大版本更新,特别是每年两次的Feature Update,有时会重新写UEFI启动顺序,甚至重建EFI分区中的部分文件。表现就是:今天用得好好的GRUB菜单消失了,开机直接进Windows。
这种情况的恢复思路和第3章完全一样:先判断GRUB文件还在不在。Windows更新通常只改BootOrder,不会清掉EFI/kylin目录下的GRUB文件,所以一般用efibootmgr调整顺序即可。如果Windows重建了整个EFI分区导致kylin目录消失,那就必须走Live环境chroot重装GRUB的流程了。
这里有个预防的小技巧:在BIOS设置里,把“Kylin”手动设置为第一启动项,而不是依赖固件自动管理的BootOrder。很多主板在Windows更新后不会再去改你在BIOS里设定的启动顺序,这样至少可以保住GRUB菜单的入口,后续修复也容易得多。
我给用户做双系统时,还会额外建议他们在修好引导后,用Live环境备份一份EFI分区里的kylin目录到移动硬盘。万一以后把EFI分区折腾坏了,直接把目录拷回去再添加启动项就行,不用跑完整的GRUB重装流程。
5.3 选择Windows后黑屏或重启
GRUB菜单里能看到Windows项,但选中后不是正常进入Windows,而是黑屏、闪光重启,这种问题要分几种情况逐一排查。
第一步,进BIOS关闭Secure Boot。这是我遇到最多的情况,GRUB链式加载Windows Boot Manager时,部分主板固件对签名链的处理不完善,导致Secure Boot拦截。关闭后再试,大概率就能正常进入Windows。
第二步,关闭Windows的快速启动。快速启动会让Windows“关机”时进入一种休眠式挂起状态,从GRUB切过去后,部分硬件驱动状态异常,导致黑屏。在Windows里以管理员身份运行命令提示符,执行:
powercfg /h off彻底关闭休眠和快速启动后,再重启测试切换。
第三步,排查显卡驱动。NVIDIA显卡在部分主板上会出现从GRUB切换到Windows后黑屏的问题,原因多半是Windows侧显卡驱动和固件输出的EDID信息不匹配。可以进Windows安全模式,卸载显卡驱动,重新安装最新版本。这个问题在Windows 11搭配老主板时更常见,如果前三步都没解决,重点就往驱动方向查。
5.4 更新GRUB配置后找不到Windows启动项
生成GRUB配置时,没有输出Found Windows Boot Manager,这种情况也很常见。按排查顺序走:
先确认os-prober是否安装。执行:
os-prober如果什么都不输出,说明要么没装,要么没扫到。没装就装一下,然后重新生成配置。
再确认/etc/default/grub里没有禁用os-prober。新装的一些Linux发行版默认设置了GRUB_DISABLE_OS_PROBER=true,这个必须改成false或注释掉。
接着处理Windows快速启动和BitLocker:这两个都是NTFS分区无法正常读取的常见原因。BitLocker加密了Windows系统盘的情况下,os-prober可能无法识别Windows启动项。临时解密分区的操作在Windows侧做,双系统环境下BitLocker建议保持关闭,否则每次更新GRUB都会卡在识别阶段。
最后还有一个低级但实际的坑:安装Windows时如果选择在MBR磁盘上安装,而GRUB以UEFI模式运行,那么os-prober能扫到Windows,但生成的引导项可能无法正常启动。这种固件模式不匹配的问题需要回到第1章重新梳理,把Windows也改成UEFI模式安装。
5.5 GRUB rescue恢复思路
如果你连GRUB菜单都看不到,开机直接进入grub rescue>提示符,说明GRUB的核心模块没找到,或者grub.cfg路径配置错误。
grub rescue>环境功能受限,但基本可以手动定位并引导系统。先执行:
ls会列出当前固件能识别的所有分区,比如(hd0,gpt1)、(hd0,gpt3)。逐个尝试找到你的/boot目录所在分区。如果/boot是独立分区,通常能找到grub2目录;如果不是独立分区,那就是根分区里的/boot/grub2目录。
定位后执行:
set prefix=(hd0,gpt3)/boot/grub2 insmod normal normal这一套操作能否成功取决于/boot/grub2下是否还有完整的模块文件。如果模块文件还在,可以临时进入GRUB菜单,但每次开机都要手动执行一次,不是长久之计。进入系统后,要尽快重新执行grub2-install和grub2-mkconfig,把引导链彻底恢复。
如果ls之后发现分区表完全乱了,或者指定prefix后仍然报错,大概率是EFI分区或/boot分区本身被损坏,稳妥的做法是直接用Live系统修复,别在rescue环境里耗时间。
从我经手的案例来看,grub rescue>在uefi模式下其实没那么常见,更多时候是开机直接进BIOS或者显示无引导设备。遇到这种直接进BIOS的情况,优先检查启动菜单里还有没有Kylin项;如果没有,就是你之前说的EFI分区问题,直接进Live环境重装GRUB最快。
我现在给用户做双系统,都形成了固定习惯:先装Windows再装银河麒麟是最省心的顺序,但如果已经是先有银河麒麟的机器,装完Windows后不要再做任何额外操作,直接按第3章的流程修复引导,然后把第4章的定制和5.1节的时间同步一次做完。引导问题说穿了不难,难的是中间那些容易忽略的细节——固件模式、安全启动、快速启动、路径差异,每一处都可能让一个看似正常的流程翻车。把这篇文里的排查链路理清一遍,以后遇到任何双系统引导问题,都不会再两眼一抹黑了。