用GRUB引导Windows系统的详细教程
GRUB是什么?为什么需要它来启动Windows?
GRUB(GRand Unified Bootloader)是一个功能强大的启动管理器,常用于Linux系统。但很多用户不知道的是,它同样可以引导Windows系统。这种情况通常出现在以下场景:
- 双系统用户:先安装Windows后安装Linux,但Windows启动项消失
- 系统修复:Windows引导损坏,需要从Linux环境修复
- 多系统管理:需要统一管理多个操作系统的启动
下面我将从基础到进阶,详细讲解如何用GRUB启动Windows。
一、准备工作:确认你的系统环境
在开始之前,先打开终端(Linux系统下),输入以下命令:
lsblk -f
或者

sudo fdisk -l
这会显示你的磁盘分区情况。你需要找到:
- Windows系统安装的分区(通常是NTFS格式)
- 该分区的标识符(如/dev/sda1、/dev/nVMe0n1p3等)
同时检查是否已安装GRUB:
grub-install --version
如果显示版本信息,说明GRUB已安装。
二、自动检测Windows启动项(最简单的方法)
对于大多数用户,最简单的方法是让GRUB自动检测所有系统:
步骤1:更新GRUB配置
sudo update-grub
这个命令会自动扫描所有磁盘分区,查找可用的操作系统,包括Windows。如果Windows被正确识别,你会看到类似这样的输出:
找到 Windows 10 (loader) 在 /dev/sda1
步骤2:重启验证
重启电脑,在GRUB启动菜单中,你应该能看到Windows选项。如果还是没有,继续下面的手动配置。
三、手动添加Windows启动项
如果自动检测失败,就需要手动配置。
步骤1:找到Windows引导文件位置
Windows的引导文件通常位于一个独立的小分区(ESP分区或系统保留分区)。你可以通过以下方式找到:
sudo blkid | grep -i "efi"
或者查找FAT32格式的分区:
sudo parted -l | grep -i "fat32"
步骤2:挂载Windows的EFI分区
假设你的Windows EFI分区是/dev/sda1:
# 创建挂载点
sudo mkdir /mnt/windows-efi
# 挂载分区
sudo mount /dev/sda1 /mnt/windows-efi
# 查看内容
ls -la /mnt/windows-efi/EFI/Microsoft/Boot/
你应该能看到bootmgfw.efi等文件。
步骤3:编辑GRUB配置文件
sudo nano /etc/grub.d/40_custom
在文件末尾添加以下内容(根据实际情况修改):
menuentry "Windows 10" {
insmod part_gpt
insmod fat
insmod chain
set root='(hd0,gpt1)'
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
参数解释:
(hd0,gpt1):hd0表示第一块硬盘,gpt1表示GPT分区表的第1个分区- 如果是MBR分区表,用
(hd0,msdos1) - 如果不确定分区编号,可以在GRUB命令行用
ls命令查看
步骤4:生成新的GRUB配置
sudo grub-mkconfig -o /boot/grub/grub.cfg
或者
sudo update-grub
步骤5:重启测试
重启电脑,在GRUB菜单中应该能看到Windows选项。
四、常见问题解决方案
问题1:GRUB菜单不显示Windows选项
解决方案:
- 检查Windows分区是否正常
- 确保GRUB配置正确更新
- 尝试在GRUB启动时按
c进入命令行,手动输入:
chainloader (hd0,1)/efi/Microsoft/Boot/bootmgfw.efi
boot
如果这样能启动Windows,说明配置有问题。
问题2:启动Windows时出现错误
错误1:error: invalid signature
# 在GRUB配置中添加
insmod part_msdos
insmod ntfs
set root=(hd0,msdos1)
chainloader +1
错误2:error: file not found
检查文件路径是否正确,注意大小写。
问题3:双硬盘情况下的配置
如果你有两个硬盘,Windows在一个硬盘,Linux在另一个:
menuentry "Windows (第二硬盘)" {
insmod part_gpt
insmod fat
set root=(hd1,gpt1)
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
五、图形化工具辅助(适合新手)
如果命令行操作太复杂,可以使用图形化工具:
使用Boot-Repair(Ubuntu用户)
# 添加PPA源
sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt update
# 安装
sudo apt install boot-repair
# 运行
boot-repair
按照提示操作,这个工具会自动修复启动问题。
使用GRUB Customizer
sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt update
sudo apt install grub-customizer
安装后可以在图形界面中调整启动顺序、添加删除启动项。
六、高级技巧:自定义GRUB外观和超时设置
修改默认启动项
# 查看当前启动项顺序
grep menuentry /boot/grub/grub.cfg
# 设置默认启动项(比如设置为第3项,从0开始计数)
sudo nano /etc/default/grub
修改:
GRUB_DEFAULT=2 # 第三项
GRUB_TIMEOUT=10 # 等待时间(秒)
然后更新:
sudo update-grub
美化GRUB界面
安装主题:
sudo apt install grub2-themes
或者手动下载主题,放到/boot/grub/themes/目录。
七、重要注意事项
- 备份重要数据:操作前备份重要文件,特别是Windows分区数据
- 记录原配置:修改前备份原GRUB配置:
sudo cp /boot/grub/grub.cfg /boot/grub/grub.cfg.backup - UEFI vs Legacy:确认你的启动模式
- UEFI模式:使用
chainloader /EFI/...方式 - Legacy模式:使用
chainloader +1方式
- UEFI模式:使用
- Windows更新问题:Windows大版本更新可能会覆盖GRUB,建议准备Linux安装U盘备用
八、快速排查清单
当GRUB无法启动Windows时,按顺序检查:
- [ ] Windows分区是否正常挂载
- [ ] EFI分区是否存在且包含Windows引导文件
- [ ] GRUB配置是否正确更新
- [ ] 硬盘和分区编号是否正确
- [ ] 启动模式是否匹配(UEFI/Legacy)
九、终极解决方案:重装GRUB
如果所有方法都失败,可以重装GRUB:
# 对于UEFI系统
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
# 对于Legacy系统
sudo grub-install /dev/sda
# 然后重新生成配置
sudo update-grub
总结
用GRUB启动Windows并不复杂,关键是找到正确的Windows引导文件位置。对于大多数用户,sudo update-grub命令就能解决问题。如果自动检测失败,按照本文的手动配置步骤操作即可。
记住几个关键点:
- 先尝试自动检测
- 确认Windows分区和引导文件位置
- 正确配置GRUB的chainloader
- 更新GRUB配置后重启测试
如果遇到问题,欢迎在评论区留言,我会根据具体情况提供进一步帮助。对于双系统用户,建议定期备份GRUB配置,避免Windows更新后无法启动Linux。

还没有评论,来说两句吧...