GPT/EFI下Centos 7/windows 10用GRUB双启动配置
情况说明
原本安装了 Ubuntu 和 Windows 10 双系统,通过 UEFI 启动,并使用 GRUB 来引导。
然后,我要把Ubuntu换成CentOS 7,覆盖Ubuntu的分区安装了 CentOS 7。
结果装完一启动,发现 Windows 10 不见了……
后来想了想,应该是在分区的时候把原本的 EFI 系统分区删了,导致新的 EFI分区里没有 Windows 记录的原因。
于是就开始了漫长的修复过程。
制作 Windows 启动盘
首先我们要知道是 EFI 下的 Microsoft 记录缺失导致的启动失败,这个过程可以从 CentOS 7 里面去找 /boot/efi/ 路径,查看是否存在 Microsoft 文件夹。如果的确缺失的话,就需要重做安装盘 / PE 盘来提供一个 Windows 环境。
具体怎么做安装盘就不说了,只是简单的把Windows 10的镜像iso文件用Rufus/etcher或者其他工具写入U盘就可以。
修复 Win 10 EFI 分区
开机启动盘选择U盘,使用 Win10 安装盘启动。
进入界面后按 Shift + F10 进入命令提示符,输入 diskpart 运行磁盘程序。
注意:
如果Shift + F10不起作用,可以到BIOS中设置功能键作为功能键使用,而不是作为启动过程中的快捷键使用。
将原 Windows 10 的系统盘挂为 C:/,将目标 EFI 分区挂为 Q:/。
diskpart 常用命令:
- list disk 查看磁盘列表
- select disk [num] 选择磁盘
- list partition 查看选定的磁盘分区
- select partition [num] 选择分区
- assign letter = [letter] 挂载选定的分区到目标字母下
- remove letter = [letter] 从目标字母下卸载分区
分配好盘符后,输入 exit 退出 diskpart 程序,分别切换进入C:\和Q:确认分区选择的是正确的。
复制 Windows 10 的 EFI 分区文件到目标 EFI 分区:
1 | bcdboot c:\windows /s q: /f uefi /l zh-cn |
重启机器;
就可以在 UEFI 启动项中找到 Windows Boot Manager 了。
更新 Grub
找到 Windows 10 的 EFI 的引导后,我希望通过 CentOS 7 来引导 Windows 10,需要更新 Grub:
1 | # run following command as root user |
要确保你使用
EFI模式启动,否则是/boot/grub2/grub.cfg文件。
若需要更多的Grub使用信息,请参考官方网站。
重启计算机后,就能够通过 Grub 来引导系统了。
删除无用的EFI启动项Ubuntu
启动
CentOS 7,以root用户登录进入;打开终端,输入命令:
1
root@localhost # efibootmgr
可以看到如下输出:
1
2
3
4
5
6BootCurrent: 0002
Timeout: 2 seconds
BootOrder: 0002,0001,000
Boot0001* Ubuntu
Boot0002* CentOS
Boot0003* Windows Boot Manager删掉
Ubuntu对应的Boot0001:1
root@localhost # efibootmgr -b 1 -B
修正Windows 10时间不正确问题
设置Windows 10时钟为Universal Time
未确认是否可以行.
更改注册表:
打开
开始菜单左侧的搜索界面,输入regedit;以管理员权限运行
regedit,进入注册表编辑程序;进入如下键值路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation

鼠标右键点击左边键值目录,选择
新建;选择:
DWORD (32-bit Value);

命名这个
DWORD键为:RealTimeIsUniversal;鼠标左键双击
RealTimeIsUniversal,修改值为:1;

重启计算机,进入非
Windows操作系统。再次重启进入
Windows,时间应该正确了。