Rebuild BCD File and Master Boot Record

什么是MBR?

MBR
Master Boot Record(MBR) 位于0号磁盘的第一个扇区,它用来存储系统的引导信息和磁盘分区表(DPT),共有512字节,其中446字节用于存储MBR信息,磁盘分区列表占用64字节,结束标识符(Magic Number)占用2字节.由于每个分区标识均需要占用16个字节,因此它最大支持的主分区只能是4个,最大磁盘管理空间不能超过2T(16位字节表示最大扇区数 FF FF, FF FFH * 扇区大小(512byte)= 2 TB).

image.png

什么是BCD

BCD
Boot Configuration Data(BCD)引导配置数据,存储在引导分区中(C:\BOOT\BCD),被Windows Boot Manager 调用并用以引导系统启动。如果MBR分区破坏或者BCD文件意外丢失,系统将无法被正常引导。
BCD 特性:

  1. BCD用来替代windows较早版本中BOOT.INI文件
  2. BCD由3个组件组成,分别为Store, Objects, 和 Elements,Stores存储Objects,而每个Objects均包含多个Element
  3. BCD Stores由Windows Manager 控制,BCD Store 的Objects即为系统标识条目,若计算机为多系统版本安装,将会有多条对应的条目存在。
  4. BCD Store将会在系统安装时被创建,目录为C:\BOOT\BCD(C盘位引导分区,也可能不是C盘);BCD Store也会创建一条注册表信息,位于HKLM\BCD000000
  5. 为系统对象(object)创建GUID,GUID将会被Windows Boot Manager 用来标识可用的已安装系统

在系统引导出问题时,该如何修复呢?

先来看看常见的系统引导有关的报错(win10为例)

如果BCD文件丢失或者损坏,又或者不小心删除\格式化了系统保留分区(一般时500M的分区)或OEM recovery分区,可以会出现下面的报错信息

Your PC needs to be repaired
The Boot Configuration Data file is missing some required information
File: \Boot\BCD
Error code: 0xc0000034

image.png

也可能会碰到下面这种报错

The Boot Configuration Data for your PC is missing or contain errors.
File: \boot\bcd
Error Code: 0xc000000f

如果MBR损坏了,还可能出现 "No operating system found” 的报错


image.png

针对不同的报错情节,酌情使用下面列出的修复方案

自动修复Windows Bootloader
  • 使用windows系统安装镜像 启动计算机并进入WinRE环境,(Repair your computer -> Toubleshoot -> Advanced Options -> Command Prompt), 点击并打开CMD命令行,使用命令创建新的BCD文件然后更新MBR


    image.png

    确定磁盘分区类型和分区盘符
    cmd命令行中键入diskpart命令,然后列出磁盘,如果GPT列有*标识则说明该磁盘为GPT分区表格式,反则为MBR分区格式


    image.png

    列出分区卷
    image.png

    如上图,500M的分区(Rezerved)为系统引导分区,BCD文件就存在上面,39GB的NTFS分区,时windows系统安装分区

  • 修复MBR
    使用下面的命令进行修复
    bootrec.exe /fixmbr
    bootsect.exe /nt60 all /force
    如果提示bootsect.exe命令不存在,请尝试完整路径
    X:\boot\bootsect.exe /nt60 all /force
    image.png

可以使用下面的命令尝试自动重建BCD bootloader 配置信息
bootrec /FixBoot - 在引导分区上重启引导区
bootrec /ScanOS
bootrec /RebuildBCD - 扫面所有磁盘,尝试找到所有已安装的windows系统并加入到BCD bootloader的配置信息中
执行完上述操作后重启电脑,如问题不能解决,接着往下看

手动重建引导

使用BCDedit命令,创建新的BCD文件

  • 在系统预留分区上删除旧的BCD文件
    del c:\boot\bcd

如果预留分区没有被分配盘符,可以cmd下使用diskpart命令给它分配盘符
diskpart -运行diskpart命令
select disk 0 -假设只有一块磁盘,盘号为0
select volume 1 -假设预留分区卷号为1
assign letter =c: -将盘符C分配给预留分区
exit -退出diskpart命令

  • 创建新的BCD文件
    创建临时store文件bcd.tmp
    bcdedit /createstore c:\boot\bcd.tmp
    为Boot Manager 创建条目
    bcdedit.exe /store c:\boot\bcd.tmp /create {bootmgr} /d "Windows Boot Manager"
    将临时文件导入BCD
    bcdedit.exe /import c:\boot\bcd.tmp
    为Boot Manager 指定启动分区
    bcdedit.exe /set {bootmgr} device partition=c:
    配置系统选择超时
    bcdedit.exe /timeout 10
    删除临时文件
    del c:\boot\bcd.tmp
    image.png
  • 添加当前机器安装的系统条目
    为BCD 配置文件添加windows 条目
    bcdedit.exe /create /d "Windows 10" /application osloader
    这条命令会返回一个GUID
    The entry {8a7f03d0-5338-11e7-b495-c7fffbb9ccfs} was successfully created.
    image.png

    定义这个GUID所表示的系统为默认启动
    bcdedit /default {8a7f03d0-5338-11e7-b495-c7fffbb9ccfs}
    为新的启动条目制定windows在当前电脑上的安装路径
bcdedit.exe /set {default} device partition=d:
bcdedit.exe /set {default} osdevice partition=d:
bcdedit.exe /set {default} path \Windows\system32\winload.exe
bcdedit.exe /set {default} systemroot \Windows

在BCD中将这条引导记录标记为可见
bcdedit.exe /displayorder {default} /addlast

image.png

以上过程重建Boot Loader和BCD 文件并修复了引导分区和MBR,重启后生效。

你可能感兴趣的:(Rebuild BCD File and Master Boot Record)