How to Repair EFI/GPT Bootloader

什么是UEFI

Unified Extensible Firmware Interface (UEFI)统一可扩展固件接口,是一种标准的、开放统一和开源的、被烧录在主板ROM内的一套程序,是几乎所有计算机硬件厂商都遵守的一套标准,由于UEFI将硬件初始化后抽象成统一的接口给操作系统,它不关心上层系统是什么,因此硬件厂商不必再为不同的系统提供不同的兼容接口,被广泛应用于现代计算机初始化硬件和提供硬件抽象和启动操作系统,已于近几年取代了我们所熟知的BIOS了,它提供的主板配置更易用更友好,功能更强。如欲了解更多相关知识,请移步知乎老狼的文章https://www.zhihu.com/question/21672895

什么是GPT

Globally Unique Identifier Partition Table(GPT) 又称GUID分区表,是UEFI标准的一部分,用于解决MBR最大磁盘控制容量不能超过2T的问题。其结构图如下


image.png
  • PMBR 不支持GPT的分区工具试图对硬盘进行操作时(例如MS-DOS和linux的fdisk),可以借助于PMBR以传统方式启动,过程等同于MBR+BIOS,提高了兼容性。当使用支持GPT的系统在检测到PMBR时会直接跳到GPT表头读取分区表
  • GPT HDR GPT表头定义了分区表中项目数以及每项大小,硬盘容量信息,磁盘对的GUID,分区表头位置(总是LBA1)和大小,备份分区表头和分区表的位置和大小信息(LBA-1 ~LBA-34)和大小,分区表头和分区表的CRC32校验码,固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否正常,如不正常可使用软件从硬盘最后的备份GPT中恢复整个分区表,如果备份GPT校验同样错误,磁盘将不可再用,表头内容见下图
image.png
  • Partition Table 分区表,包含分区的类型GUID(如:EFI系统分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}),名称,起始终止位置,该分区的GUID以及分区属性,见下图
image.png
  • GPT特性
    • 得益于LBA提升至64位,以及分区表中每项128位设定,GPT可管理的空间近乎无限大,假设一个扇区大小仍为512字节,可表示扇区数为,算下来,可管理的硬盘容量=18EB(1EB=1024PB=1,048,576TB)
    • 分区数量几乎没有限制,由于可在表头中设置分区数量的大小,如果愿意,设置更多分区也可以(有人愿意管理这么多分区吗),不过,目前windows仅支持最大128个分区,
    • 磁盘首尾都存有GPT表头,一方损坏可以通过另一份恢复
    • 循环冗余检验值针对关键数据结构而计算,提高了数据崩溃的检测几率。
    • 提供了16字节的GUID标识分区类型,不容易产生冲突
    • 分区名字长度位72字节,支持长命名
    • 完美支持UEFI,是UEFI规范衍生品
      欲了解更多GPT相关知识,请移步知乎老狼文章
      https://zhuanlan.zhihu.com/p/26098509

修复EFI/GPT Bootloader

引导损坏的原因

系统引导可能由下列某种原因导致:

  • 当安装第二个个系统版本时(双系统配置),windows Bootloader可能在安装过程中被损坏;
  • 系统恢复时数据恢异常
  • 删除隐藏分区数据
  • 恶意软件破坏以及其它原因

The boot configuration data for your PC is missing: EFI\Microsoft\Boot\BCD

如果EFI bootloader 损坏,以UEFI模式安装的windows就会启动失败,尝试启动时会出现蓝屏报错,信息如下:

The boot configuration data for your PC is missing or contains errors.
File :\EFI\Microsoft\Boot\BCD
Error code: 0xc000000f

Error code: 0xc000014c

上面的报错信息表明Boot Configuration Data (BCD)文件已经损坏或被意外删除,此时如果尝试使用bcdedit工具修复 UEFI bootloader,将会收到类似如下报错:

The boot configuration data store could not be found.
The requested system device cannot be found.

事实上,windows系统(Windows 10)以UEFI模式安装在GPT 磁盘上时, Windows EFI bootloader (Windows Boot Manager) 把boot manager和 BCD文件存储在隐藏EFI分区中,(一般是一个100MB的FAT32 分区),bcedit的命令不能发现并管理在这个分区上面的配置文件

使用BCDBoot 手动修复EFI Bootloader

  • 使用windows安装镜像进入windows修复环境并打开CMD命令行界面(此处请自行百度或者参考https://www.jianshu.com/p/0f8878f6eadb)
  • 确定是否当前系统为UEFI模式安装

diskpart - cmd下运行该命令
list disk -列出当前计算机已由磁盘信息
如下图,如果GPT列标有*字样则表明当前行磁盘为GPT磁盘,系统安装为UEFI模式

image.png

  • 修复引导
  1. diskpart交互命令下,列出当前选中磁盘的卷
    select disk 0 - 选择0号磁盘
    list volume - 列出卷
    如下图
image.png

EFI 引导分区很好区分,他是一个100M大小的FAT32分区,大多数情况下还会拥有System EFI的标签,本例中的Volume 1即是EFI引导分区;通常还有各MSR(**Microsoft System Reserved)分区存在。是NTFS格式,是微软的系统预留分区。

  1. 为EFI卷分配盘符
    select vomume - 选中EFI卷
    assign letter=k: -为EFI卷分配盘符K
    exit -退出diskpart命令
  2. 尝试修复EFI引导
    cd /d K:\efi\microsoft\boot\ - 进入EFI 卷(这个卷是隐藏的)
    如果提示目录不存在尝试下面命令
    cd /d K:\boot\ 或cd /d K:\ESD\Windows\EFI\Microsoft\Boot
    随后,在其它的修复教程中,可能会提到用下面的命令重写引导记录以及查找已安装系统并添加到BCD(引导数据信息)中

bootrec /fixboot
bootrec /scanos
bootrec /rebuildbcd
更甚者还有如下命令
bootrec /fixmbr (重GPT磁盘上恢复MBR看起来是不是很奇怪呢?)

以上命令是MBR磁盘所用的,因此不能再当前情景下使用,如果你的电脑是以UEFI模式安装在GPT磁盘上,那么就应该使用BCDBoot命令,BCDBoot命令允许你使用%WINDIR%\System32\Config\BCD-Template文件从windows系统分区中的system目录恢复引导至EFI引导;如果强制使用Bootrec命令,将会收到:Access is denied的报错信息。

使用attrib 命令移除BCD文件的隐藏、只读和系统属性
attrib BCD -s -h -r
重命名旧的BCD配置文件
ren BCD BCD.bak
使用bcdboot.exe工具重从windows 目录复制UEFI引导信息到引导分区中用以重建BCD store
bcdboot C:\Windows /l /en-us /s k: /f ALL

  • C:\Windows - windows系统安装目录
  • /f /ALL 复制系统引导变量文件,包括UEFI和BIOS,如果只想复制EFI bootloader,可以使用 /f UEFI
  • /l en-us 表示使用国家位置代码 en-us - English(USA)

For UK
bcdboot c:\Windows /l en-uk /s K: /f ALL
For DUtch
bcdboot c:\Windows /l nl-NL /s K: /f ALL
For German
bcdboot c:\Windows /l de-DE /s K: /f ALL
For CN
bcdboot c:\Windows /l cn-ZH /s K: /f ALL

  • /c 忽略现有的引导信息,并创建一份新的BCD 配置信息
  • 开启详细日志模式

使用bcdedit查看新建的引导项

image.png

可能出现的报错:

  1. BFSVC Error: Could not open the BCD template store. status – [c000000f] - 查看命令拼写是否正确,尤其是国家代码,如果检查无误,就有可能从\Windows\System32\Config复制的EFI 引导环境文件不完整或已经破坏,使用sfc检查(假设加载的系统安装镜像d:
    sfc /scanow /OFFBOOTDIR=C:\ /OFFWINDIR=D:\WINDOWS
  2. BFSVC Error: Error copying boot files from Last Error = 0x570 - 检查磁盘
    CHKDSK K: /F
  3. BFSVC Error: Failed to set element application device. Status = [c000000bb] - 使用chkdsk.exe检查EFI引导和windows安装分区
  4. Failure when initializing library system volume 检查EFI引导分区的文件系统类型是否为FAT32

最后,重启计算机尝试引导进入系统。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容