适用范围
如果你的电脑以UEFI模式安装在了GPT磁盘上,那么如果EFI引导分区被意外移除后格式化,本文都可能帮的到你。当出现上述意外事件时,尝试启动会循环提示需要选择启动设备(Windows 10/8.1/7)并无法正常启动:Reboot and select proper boot device or insert boot media in selected boot device and press a key
GPT磁盘以UEFI模式安装Windows系统时的分区结构
- 在GPT磁盘上以UEFI模式安装windows系统。至少有如下几个分区存在
- EFI 系统分区 (ESP - Extensible Firmware Interface) - 100 MB (分区类型- EFI)
- 微软预留分区 - 128 MB (分区类型 - MSR)
- window系统安装分区 (windows安装的目标)
这几个分区在windows安装时被创建。
- 以上几个分区简介
- EFI分区是一个FAT32格式的分区,基于UEFI模式将windows系统安装到计算机上时,这个分区是必须的,他的GUID为
c12a7328-f81f-11d2-ba4b-00a0c93ec93b
,大小为100MB(但是在扇区大小为4KB的磁盘上,该分区大小为260MB)- MSR(Microsoft System Reserved)分区,用于GPT磁盘的分区管理和维护(比如将磁盘由basic转为动态),它是GUID为
e3c9e316-0b5c-4db8-817d-f92df00215ae
的备份分区。这个分区未分配盘符,不能存储用户数据。Windows 10系统该分区只需16MB,windows 8.1则需要128MB,文件系统为NTFS。另外,MSR分区必须存在于EFI分区(ESP)和windows安装分区之间。
修复丢失的EFI分区
EFI分区
EFI分区类似于MBR/BIOS模式中的系统预留分区,存储着windows引导所需的BCD文件和其它所需文件。当计算机启动时,UEFI程序从EFI分区载入bootloader(EFI\Microsoft\Boot\bootmgfw.efi)并将后续引导控制权交由其控制,bootmgfw.efi将执行Windows Boot Manager并从BCD中载入引导配置数据,引导配置数据载入完成后,控制权交由winload.efi,winload.efi将接管后续windows引导完成windows系统启动
小知识
Winload.efi文件是一个可执行文件,位于windows安装目录X:\windows\system32\winload.ef
(x代表系统安装分区),在UEFI环境中结合bootloader初始化并引导windows系统启动。(个人理解相当于Linux下的0号初始化进程,不知是否合适,实在没有找到相关信息,如有大神知道,请教!!!)
如果EFI分区被损坏或者被意外删除,系统将无法正常启动。UEFI会报"could not locate \efi\boot\bootx64.efi – not found"
或者空的启动项选择菜单并提示“请指定启动设备”
还有一种情况,如果将EFI分区格式化成NTFS格式,在新安装系统时,会有下面报错显示
Windows detected that the EFI system partition was formatted as NTFS. Format the EFI system partition as FAT32, and restart the installation.
手动重建EFI和MSR分区
- 进入WinRE模式,打开CMD命令行,运行diskpart命令(如何进入Windows修复模式请自行百度)列出当前分区
diskpart
select disk 0
list partition
示例如下图,128M的时MSR分区,EFI分区丢失
- 重建EFI和MSR分区
Select partition 1
- 选中MSR分区
Delete partition override
- 删除MSR分区
确保系统分区存在,本例中是9GB的NTFS分区
Select disk 0
- 选目标前磁盘
create partition efi size=100
- 新建EFI分区
为新建的分区分配盘符和label
list partition
select partition 1
format quick fs=fat32 label="System"
assign letter=G
新建MSR分区(Window 8.1 128MB, Windows 10 16MB)
create partition msr size=128
list partition
list vol
修复EFI bootloader 和 Windows BCD
新建EFI分区后,下一步就需要将EFI引导文件复制到其中并创建新的BCD(bootloader configuration file)
- 从windows系统安装分区复制EFI引导文件到新建的EFI分区
mkdir G:\EFI\Microsoft\Boot
xcopy /s C:\Windows\Boot\EFI\*.* G:\EFI\Microsoft\Boot
- 重建Windows BCD bootloader configuration
g: #切换到g(EFI分区)盘
cd EFI\Microsoft\Boot
bcdedit /createstore BCD
bcdedit /store BCD /create {bootmgr} /d “Windows Boot Manager”
bcdedit /store BCD /create /d “My Windows 10” /application osloader
命令最后会返回创建条目的GUID
bcdedit /store BCD /set {bootmgr} default {your_guid}
bcdedit /store BCD /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi
bcdedit /store BCD /set {bootmgr} displayorder {default}
使用bcdedit设置默认启动项{default}配置
bcdedit /store BCD /set {default} device partition=c:
bcdedit /store BCD /set {default} osdevice partition=c:
bcdedit /store BCD /set {default} path \Windows\System32\winload.efi
bcdedit /store BCD /set {default} systemroot \Windows
exit
最后重启电脑完成修复。