• Exhen's Blog

    A simple, naive blog for Exhen.

  • 豆
  • HomeTagsTechMovie

BCD 启动菜单与 Windows 引导

X
如果你喜欢这篇文章
不如请作者喝瓶冰可乐

01 Oct 2018

Reading time ~7 minutes

TechTutorialWindows
X
扫描二维码分享到微信
分享 微博 豆瓣广播

  • BCD 启动菜单
  • 编辑 BCD 菜单
    • 使用 Bootice 编辑 BCD 菜单
    • 编辑 WINPE U盘的 BCD
    • 修复 BCD
      • 使用 Bootice 修复 BCD
      • 使用命令行修复 BCD

BCD 启动菜单

BCD 是 Boot Configuration Data 的缩写,即有关启动设置的数据。无论是以往 BIOS 启动模式(legacy)下的 ntldr 启动还是现在流行的 EFI 启动,XP 之后的 Windows 系统1都需要读出 BCD 文件存储的启动信息来引导启动。

编辑 BCD 菜单

在 CMD 中,我们可以使用bcdedit指令来编辑 BCD 菜单,但这显然是非常不直观的。为了方便编辑,我们在这里使用 Bootice 来进行操作。

使用 Bootice 编辑 BCD 菜单

Bootice

打开 Bootice 后,我们选择 BCD 编辑页面,点击智能编辑模式。

如果想要编辑的不是当前系统的 BCD,比如想编辑 Windows 安装 U 盘中的 BCD,或是在 PE 模式下读取原系统的 BCD,则需要手动寻找 BCD 位置。通常情况下的 BCD 位置如下:

BIOS 启动:
C:\boot\bcd
EFI 启动:
Z:\efi\microsoft\boot\bcd //Z盘代表ESP分区

Bootice BCD

进入编辑界面后,我们可以看到在左侧列出了全部的引导项目,如果想增加引导系统,只需要点击添加即可,反之点击删除。在右侧显示的是当前选中的引导项目的详细参数。

在这里我们要修改如下几项:

  • 设备类型
    通常为 Partition 分区,如果你的系统装在 RamDisk 或者 VHD 上面,那么我想你的技术水平应该不需要参考这篇 Tutorial,在这里我就不详细说明了。
  • 启动磁盘
    选择系统安装所在的硬盘。
  • 启动分区
    选择 C 盘的分区。
  • 菜单标题
    随便起一个自己看的懂的标题,例如WIN10 EDU X64
  • 启动文件
    这里注意,要根据启动方式选择对应的启动文件。
    \windows\system32\boot\winload.exe // 对于BIOS启动的系统
    \Windows\system32\winload.efi // 对于EFI启动的系统
    
  • 系统路径
    这里是统一的
    \Windows
    

全部修改完后记得保存。

编辑 WINPE U盘的 BCD

有的时候,我们希望 U 盘能同时启动 Windows 官方安装镜像和 PE 系统,当然你可以选择用 GRUB2 这种功能强大的工具达到这个目的,但是比较简单的办法就是直接编辑 BCD 文件。

首先,我们先把 Windows 安装镜像用软碟通写入 U 盘,这样我们就得到了一个纯净的 Windows 环境。

之后在 U 盘根目录建立WINPE目录2,之后把 WINPE 镜像中的有效成分WINPE.sdi和WINPE.wim拷入目录下。3

之后打开 Bootice,依次编辑两处 BCD:

BIOS 启动:
BCD 位置:U:\boot\bcd
EFI 启动:
BCD 位置:U:\efi\microsoft\boot\bcd

在左侧选择添加-添加 WIM 启动项

EFI

照着图片修改即可

  • 设备类型
    选择 WIM 启动项,这里自动是 RamDisk,WIM 在启动时被挂载到内存,所以用 RamDisk 很合理。
  • 启动磁盘
    没有实际的硬盘,选择 WIM
  • 启动分区
    无
  • 设备文件
    即 WIM 文件,WINPE 包含的系统的所有文件
  • SDI 文件
    SDI 文件是系统部署映像,体积几百 KB,理解为配置文件即可。
  • 菜单标题
    随便起一个自己懂的标题就行。
  • 启动路径
    和 Windows 的配置一样,注意不同启动方式路径不同。
  • 系统路径
    同样是统一的\Windows

修复 BCD

有的时候,因为一些操作(比如更换硬盘等),导致系统找不到 BCD 文件,表现为开机蓝屏报错如下。

Your PC needs to be repaired

The Windows Boot Configuration Data file is missing required information

File: \Boot\BCD

这时候我们就需要修复 BCD,方法有两种。

使用 Bootice 修复 BCD

进入 PE 环境运行 Bootice,按照上文介绍的配置方法,重新设置 BCD。如果发现 BCD 文件遗失,可以从 PE 的目录或者其他运行正常的 Windows 系统下复制一份 BCD 然后拷入相应的位置即可。

使用命令行修复 BCD

Windows 提供了一条bcdboot指令可以供我们用来修复 BCD,具体用法如下:

C:\Users\admin>bcdboot -help
Bcdboot - Bcd 启动文件创建和修复工具。

bcdboot.exe 命令行工具用于将关键启动文件复制到
系统分区以及创建新的系统 BCD 存储。

bcdboot <source> [/l <locale>] [/s <volume-letter> [/f <firmware>]] [/v]
                 [/m [{OS Loader ID}]] [/addlast] [/p] [/c]

  source     指定 Windows 系统根目录的位置。

  /l         指定在初始化 BCD 存储时使用的
             可选区域设置参数。默认值为“简体中文”。

  /s         指定一个可选的卷号参数,该参数用于指定
             要将启动环境文件复制到的目标系统
             分区。默认值为固件所标识的
             系统分区。

  /v         启用详细模式。

  /m         如果提供了操作系统加载器 GUID,则此选项可以将
             给定的加载器对象与系统模板合并,以生成
             可启动条目。否则,只合并全局对象。

  /d         指定应保留现有的默认
             Windows 启动条目。

  /f         与 /s 命令一起使用,指定目标系统分区
             的固件类型。<firmware> 的选项是 'UEFI'、
             'BIOS' 或 'ALL'。

  /addlast   指定 Windows 引导管理器固件条目
             应该最后添加。默认行为是首先添加
             它。

  /p         指定 Windows 引导管理器固件条目
             位置应予以保留。如果条目不存在,
             则将在第一个位置添加新条目。

  /c         指定不应迁移模板描述的
             任何现有对象。

示例: bcdboot c:\windows /l en-us
          bcdboot c:\windows /s h:
          bcdboot c:\windows /s h: /f UEFI
          bcdboot c:\windows /m {d58d10c6-df53-11dc-878f-00064f4f4e08}
          bcdboot c:\windows /d /addlast
          bcdboot c:\windows /p

一般我们只需要记住这两条:

BIOS 启动:

bcdboot C:\Windows /f bios

EFI 启动:

bcdboot C:\Windows /s Z: /f uefi

注意其中的Z:代表 ESP 分区,需要手动挂载到 Z 盘符。关于如何挂载 ESP 分区可以参考DISKPART指令挂载ESP分区。


参考链接:

编辑启动选项:

https://docs.microsoft.com/zh-cn/windows-hardware/drivers/devtest/editing-boot-options


  1. XP 之前的系统启动信息存储在 Boot.ini 文件中。 ↩

  2. 当然如果你想的话可以把这个文件夹改成任何名字,只需要在后续操作中改成相应目录即可。 ↩

  3. 同样,如果你的PE不叫这个名字,你只需要找到同样后缀名的两个文件,然后重命名即可。 ↩



TechTutorialWindows
X
扫描二维码分享到微信
分享 微博 豆瓣广播