标签归档:bcd

移除 BCD 与 NVRAM 中重复的固件对象

在有些使用统一可扩展固件接口 (UEFI) 的计算机上,固件会在计算机开机时为本机装置 (如 CD-ROM 或硬盘) 建立静态随机存取内存 (NVRAM) 项目。Bcdedit 会同步处理 NVRAM 中的固件命名空间对象与系统开机设定数据 (BCD)。Bcdedit 会在您执行 bcdedit /set 或 /enum 命令时,开启系统 BCD 存放区。bcdedit 开启 BCD 时,会比较 NVRAM 中的项目与 BCD 中的项目。固件在 NVRAM 中建立的项目若未存在于 BCD 中,即会新增至系统 BCD。当 bcdedit 关闭系统 BCD 时,BCD 中任何不在 NVRAM 内的开机管理程序项目皆会新增至 NVRAM 中。bcdedit
/import 命令会将系统 BCD 中的所有固件命名空间对象复制到 NVRAM 中。

若您执行多项 bcdedit /import 操作,NVRAM 即可能包含系统上之装置 (如 CD ROM 与硬盘) 的多个项目。多项 /import 操作可能会导致许多重复项目。下列命令可用以列举 BCD 中的固件命名空间对象:

Bcdedit /enum firmware

下列范例类似于 bcdedit /enum 固件命令所产生的输出:

固件开机管理程序

---------------------

identifier              {fwbootmgr}

displayorder            {bootmgr}

{93cee840-f524-11db-af62-aa767141e6b3}

{93cee841-f524-11db-af62-aa767141e6b3}

{93cee842-f524-11db-af62-aa767141e6b3}

{93cee844-f524-11db-af62-aa767141e6b3}

{93cee843-f524-11db-af62-aa767141e6b3}

timeout                 2

 

Windows 开机管理程序

--------------------

identifier              {bootmgr}

device 
                partition=\Device\HarddiskVolume1

path                   
\EFI\Microsoft\Boot\bootmgfw.efi

description             Windows Boot Manager

locale                  en-US

inherit                 {globalsettings}

default                 {current}

displayorder            {current}

toolsdisplayorder       {memdiag}

timeout                 30

 

固件应用程序 (101fffff)

-------------------------------

identifier             
{93cee840-f524-11db-af62-aa767141e6b3}

description             Primary Master CDROM

 

固件应用程序 (101fffff)

-------------------------------

identifier             
{93cee841-f524-11db-af62-aa767141e6b3}

description             Harddisk 4

 

固件应用程序 (101fffff)

-------------------------------

identifier             
{93cee842-f524-11db-af62-aa767141e6b3}

description             Internal EFI Shell

 

固件应用程序 (101fffff)

-------------------------------

identifier             
{93cee843-f524-11db-af62-aa767141e6b3}

description             Floppy

 

固件应用程序 (101fffff)

-------------------------------

identifier 
            {93cee844-f524-11db-af62-aa767141e6b3}

description             Acpi(PNP0A03,0)/Pci(1F|1)/Ata(Primary,Master)/CDROM(Entry1)

若您重复使用 bcdedit /import,NVRAM 与系统 BCD 中即可能会有多个固件对象。若您将主计算机中的 BCD 存放区汇入到目标计算机,则相同的装置可能会有多个固件项目。若有多个固件项目存在,您所看见的 bcdedit /enum 固件输出将包含类似下列范例所示的固件项目:

固件开机管理程序

---------------------

identifier              {fwbootmgr}

displayorder            {bootmgr}

{93cee840-f524-11db-af62-aa767141e6b3}

{93cee841-f524-11db-af62-aa767141e6b3}

{93cee842-f524-11db-af62-aa767141e6b3}

{93cee844-f524-11db-af62-aa767141e6b3}

{93cee843-f524-11db-af62-aa767141e6b3}

{8b87c5a0-f2f2-11db-9717-f87ee6ea6002}

{8b87c5a1-f2f2-11db-9717-f87ee6ea6002}

{8b87c5a2-f2f2-11db-9717-f87ee6ea6002}

{8b87c5a3-f2f2-11db-9717-f87ee6ea6002}

{8b87c5a4-f2f2-11db-9717-f87ee6ea6002}

timeout                 2

每个装置可能会有两个或更多具有不同 GUID 的项目。例如,主服务器 CDROM 可能包含多个项目:

固件应用程序 (101fffff)

-------------------------------

identifier             
{93cee840-f524-11db-af62-aa767141e6b3}

description             Primary Master CDROM

 

固件应用程序 (101fffff)

-------------------------------

identifier              {8b87c5a0-f2f2-11db-9717-f87ee6ea6002}

description             Primary Master CDROM

您可以使用多个 Bcdedit 命令,将 NVRAM 与 BCD 系统存放区中的多个或重复项目移除。若要对您想要移除的多个对象项目使用正确的对象 GUID,则可能必须手动建立命令脚本。

移除重复项目

1.      
使用下列 Bcdedit 命令为目前的系统存放区储存复本。

Bcdedit /export savebcd

您也可以于日后使用此档案进行复原。

2.      
复制要用于 Bcdedit 删除操作的 SaveBCD 档案。

Copy savebcd newbcd

3.      
列举系统 BCD 存放区中的固件命名空间对象,并将输出结果储存到文本文件中:

Bcdedit /enum firmware > enumfw.txt

4.      
使用 Notepad.exe 开启 Enumfw.txt,检视要删除之重复 GUID 项目的列表。检视计算机上的 GUID 项目列表。

5.      
使用 [记事本] 建立新的命令档案。将档案储存为 RemoveDups.cmd。

6.      
在 RemoveDups.cmd 档案中新增命令行,以删除依照 [固件开机管理程序] 显示顺序列出的重复固件 GUID:

Bcdedit /store newbcd /delete
{93cee840-f524-11db-af62-aa767141e6b3}

对每个要移除的 GUID 重复此命令。就上面的范例而言,在 RemoveDups.cmd 中加入下列命令:

Bcdedit /store newbcd /delete
{93cee841-f524-11db-af62-aa767141e6b3}

Bcdedit /store newbcd /delete
{93cee842-f524-11db-af62-aa767141e6b3}

Bcdedit /store newbcd /delete
{93cee843-f524-11db-af62-aa767141e6b3}

Bcdedit /store newbcd /delete
{93cee844-f524-11db-af62-aa767141e6b3}

Bcdedit /store newbcd /delete
{8b87c5a1-f2f2-11db-9717-f87ee6ea6002}

Bcdedit /store newbcd /delete {8b87c5a2-f2f2-11db-9717-f87ee6ea6002}

Bcdedit /store newbcd /delete
{8b87c5a3-f2f2-11db-9717-f87ee6ea6002}

Bcdedit /store newbcd /delete
{8b87c5a4-f2f2-11db-9717-f87ee6ea6002}

在 EFI 固件已初始化其本机装置之 NVRAM 项目标计算机上,您即可在必要时删除所有 GUID 项目。请不要删除 {bootmgr} 的项目

7.      
使用 /clean 选项在汇入操作的过程中移除所有 NVRAM 项目,并将最终命令新增至 RemoveDups.cmd,以汇入新的 BCD 档案:

Bcdedit /import newbcd /clean

8.      
储存档案,并于命令提示字符中执行 RemoveDups.cmd,即可移除 newbcd 存放区中所有的重复项目,并将 newbcd 存放区汇入系统 BCD 中。

9.      
重新开启系统。在重新启动期间,EFI 固件会重新初始化固件对象 GUID 对应于系统连接装置的 NVRAM。使用 bcdedit /enum 固件命令,确认所有重复的固件项目均已移除。

 

Windows 7设置由VHD启动系统

VHD Native Boot作为Windows 7和Windows Server 2008 R2新增重要功能之一,它支持系统直接从VHD启动。

1. 说明

系统要求:Windows 7 Enterprise 或 Ultimate版,其它版本不支;Windows Server 2008 R2 除 Foundation Edition版本不支持外,其它版本都支持

磁盘要求:系统必须有两个分区,System分区必须有Windows 7 Boot environment Files和BCD存储。如果VHD文件类型为动态扩展,必须确保磁盘有足够的磁盘空间。最多支持挂接 512 个VHD文件。

另外,从VHD启动的系统,不支持系统休眠和Over SMB 共享;保存VHD文件的分区不支持Bit-locker加密,VHD文件的父分区不支持Volume Snaphot功能;VHD不能配置为动态磁盘,也不支持建立软件Raid。相比物理硬盘,VHD没有CACHE,所以在写数据时,VHD硬盘相比物理硬盘有些差异,但读性能基本上和物理硬盘相近。

2. 必备工具

(1) bcdboot - bcd 启动文件创建和修复工具。

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

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

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

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

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

/v   ——启用详细模式。

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

(2) Bcdedit

Bcdedit.exe 命令行工具用于修改启动配置数据存储。启动配置数据存储包含启动配置参数并控制操作系统的启动方式。

(3) diskpart

磁盘分区管理工具。在本例中,它用来在命令行状态产生VHD文件,分区,格式化等

(4) imagex

WIM映像管理工具,它包含在微软AIK工具包中。本例中,用它来释放安装映像Install.WIM文件到VHD文件。

(5) Windows Deployment Services部署服务

3. 部署

用VHD启动计算机,有以下两种场景,一是将VHD部署在已有OS的计算机上,二是裸机的部署。两者的最大区别是对裸机,由于硬盘上没有OS,也就没有Windows 7的启动文件和MBR,所以必须首先产生一个系统分区,并使用Bcdboot将Windows 7启动文件写入这个分区;同时也必须产生一个主分区,用来存放VHD文件。对于在已有OS的计算机上部署,主要是要产生VHD文件,并将Windows 7或Windows 2008 R2映像释放到VHD硬盘,并使用BCDEDIT工具增加启动项目。

由于VHD文件有动态,固定,差异这三种类型,为了保证性能,推荐使用固定尺寸大小的VHD文件。

在已有OS的计算机上部署

实验环境:使用Microsoft Virtual Server 2005 SP1产生一台虚拟机Windows 7并安装好WINDOWS 7 7600操作系统和AIK工具包,这台虚拟机有两块虚拟硬盘,一块c:,已安装好Windows 7;另一块e:,用来产生VHD文件;光驱为D:

启动计算机,进行如下操作(注意以下操作均以管理员BILL.xu进行操作)

(1) 以管理员身份进入命令提示符状态,运行DISKPART

(2) 依次输入以下命令:

Create vdisk file=e:\win2007.vhd maximum=10000 type=fixed(在e盘产生名为win2007.vhd,大小为10000MB,类型为固定尺寸的VHD硬盘),等待一段时间完成。

Select vdisk file=e:\win2007.vhd(选择e:\win2007.vhd磁盘文件)

Attach vdisk(连接到虚拟磁盘文件)

Create Partition Primary(产生主分区)

Assign Letter R(分配盘符为R)

Format Quick Fs=ntfs(以NTFS文件系统快速格式磁盘),此时在我的电脑会多出一块盘符为R的硬盘。

(3) 打开虚拟服务器管理网站,编辑虚拟机Windows 7设置,在光驱中加载windows 7安装光盘ISO文件。

(4) 以管理员身份运行AIK工具包中的Deployment Tools Command Prompt,运行以下命令

imagex /info d:\sources\install.wim(显示安装映像文件的信息,主要是查找映像文件中各个版本的image index号)

imagex /apply d:\sources\install.wim 5 r:\(将安装映像中image index=5映像释放到r:盘,即释放到VHD文件上,image index=5这旗舰版),等待完成。

(5) 回到第二步的窗口,输入以下命令

detach vdisk(分离虚拟磁盘文件)

exit(退出DISKPART命令)

(6) 在命令提示符状态下,输入以下命令

bcdedit /copy {current} /d "Starting From VHD"(编辑BCD数据库,将{current}复制为副本,注释为Starting From VHD。执行后会返回新项目的GUID)。在本操作中返回的GUID为 {91efbc47-7796-11de-8788-b469c8eae731}

bcdedit /set {91efbc47-7796-11de-8788-b469c8eae731} device vhd=[e:]\win2007.vhd(编辑BCD数据库,修改guid为{91efbc47-7796-11de-8788-b469c8eae731}的device值修改为[e:]\win2007.vhd,注意[])

bcdedit /set {91efbc47-7796-11de-8788-b469c8eae731} osdevice vhd=[e:]\win2007.vhd

bcdedit /set {91efbc47-7796-11de-8788-b469c8eae731} detecthal on(允许启动时硬件抽像层检测)完成后,将e:\win2007.vhd备份到其它位置,备用。

(7)重新启动计算机,选择“Starting From VHD”,出现安装界面,安装操作系统,完成。

在裸机上的部署

实验环境:使用Microsoft Virtual Server 2005 SP1产生一台虚拟机Win7VHD,一块硬盘c:,光驱为D:。

(1) 打开虚拟服务器管理网站,编辑虚拟机Win7VHD设置,在光驱中加载WINPE的ISO文件。WINPE光盘的ISO文件可以在装好AIK的文件夹下找到。

(2) 用WINPE光盘启动计算机,选择命令提示符

(3) 依次输入以下命令

create partition primary size=200

format quick fs=ntfs

assign letter=s

active

产生个尺寸大小为200M的文件,以NTFS格式化,并指定盘符为S,激活这个分区

create partition primary

format quick fs=ntfs

assign letter=c

exit

将其它的空间产生一个主分区,以NTFS格式化这个分区,分配盘符为C。

(4) 将我们上例中第6步产生的备份的文件复制到c盘

(5) 在命令提示符状态使用Diskpart,连接虚拟磁盘文件win2007.vhd

Diskpart

select vdisk file=c:\win2007.vhd

attach vdisk

exit

(6) cd f:\windows\system32  (F:为虚拟磁盘文件加载后产生的盘符)

bcdboot f:\windows /s s: 将系统文件复制到系统盘(即前面产生200M的系统分区)

(7) 以硬盘启动计算机,完成安装。

Windows 启动项乱码解决

方法如下:进入Windows系统,使用管理员身份(Administrator)打开命令提示符窗口输入:
bcdedit /set {bootmgr} locale zh-CN
bcdedit /deletevalue {bootmgr} device
bcdedit /deletevalue {bootmgr} path
3项各修改成功后,英文菜单重新启动后双系统菜单就恢复中文了。

BCDEDIT命令详解

案例:bcdedit添加系统启动项

使用BCDEDIT命令,编辑启动项,方便、快捷,只需记住几条命令,必要时替换即可。

以下是一个案例:

标识符 {de329298-0dd8-11e0-90b6-8af61b7989dc}

device partition=G:

path \Windows\system32\winload.exe

description Windows 7 Ultimate

osdevice partition=G:

systemroot \Windows

要实现添加以上启动项信息,可依次键入以下命令:

bcdedit /create {35f41e64-23c5-11e0-b95b-fe17cc1d8647} /d “Windows 7
Ultimate” /application osloader

bcdedit /set {35f41e64-23c5-11e0-b95b-fe17cc1d8647} device partition=G:

bcdedit /set {35f41e64-23c5-11e0-b95b-fe17cc1d8647} path \Windows\system32\winload.exe

bcdedit /set {35f41e64-23c5-11e0-b95b-fe17cc1d8647} systemroot \Windows

bcdedit /set {35f41e64-23c5-11e0-b95b-fe17cc1d8647} osdevice partition=G:

bcdedit /displayorder {35f41e64-23c5-11e0-b95b-fe17cc1d8647} /addfirst

附,关闭Hyper-V,让windows运行VMWare

Hyper-VVMWare共存。打开cmd,键入:

bcdedit /copy {default} /d “Windows Server 2008 Without Hyper-V” (windows会自动生成一个guid,注意记下)

然后再键入:

bcdedit /set {xxxxxxxxxxxx} hypervisorlaunchtype off {}里面填入前面一个命令出来的guid号。
然后你就可以在那个没有启动Hyper-V的系统里面安装使用Vmware了。

自定义启动管理项——Bcdedit命令详解

Bcdedit 位于X:\Windows\system32\ “X:”为安装Vista的盘符。

一、储存操作指令

====================

/createstore 创建一个新的空白启动配置数据文件。

bcdedit /createstore C:\Data\BCD 创建BCD启动配置数据文件储存到“C:\DATA\”文件夹。

/export 备份启动配置数据文件。

bcdedit /export “C:\Data\BCD Backup” 备份BCD启动配置文件到“C:\Data\”文件夹,并以“BCD Backup”命名。

/import 还原启动配置数据文件。

bcdedit /import “C:\Data\BCD Backup” “C:\Data\”文件夹恢复BCD启动配置文件。

二、储存项目操作指令

====================

/copy 项目拷贝

操作系统启动项目的拷贝:

bcdedit /copy {cbd971bf-b7b8-4885-951a-fa03044f5d71} /d “Copy of entry”

/create 新建项目

创建操作系统载入程序项目的 NTLDR(Ntldr):

bcdedit /create {ntldr} /d “Earlier Windows OS Loader”

创建存储器磁碟另外的选择项项目:

bcdedit /create {ramdiskoptions} /d “Ramdisk options”

创建一个新的操作系统启动项目:

bcdedit /create /d “Windows Vista” /application osloader

创建一个新的调试器:

bcdedit /create {dbgsettings} /d “Debugger Settings”

/delete 删除项目

删除指定的操作系统项目:

bcdedit /delete {cbd971bf-b7b8-4885-951a-fa03044f5d71}

删除指定的操作系统项目但启动时不显示项目(彻底删除):

bcdedit /delete {cbd971bf-b7b8-4885-951a-fa03044f5d71} /cleanup

删除指定的操作系统项目但启动时显示项目:

bcdedit /delete {cbd971bf-b7b8-4885-951a-fa03044f5d71} /nocleanup

删除操作系统载入程序项目的 NTLDR:

bcdedit /delete {ntldr} /f

三、项目选择操作指令

====================

/deletevalue 删除项目选择项。

删除启动管理的bootmgr选择项项目:

bcdedit /deletevalue {bootmgr} bootsequence

删除(WinPE)操作系统的数值开机项目:

bcdedit /deletevalue winpe

删除来自指定的操作的 Windows PE 数值系统开机项目:

bcdedit /deletevalue {cbd971bf-b7b8-4885-951a-fa03044f5d71} winpe

/set 设定项目选择项数值。

设定操作系统“cbd971bf-b7b8-4885-951a-fa03044f5d71”引导分区“C”:

bcdedit /set {cbd971bf-b7b8-4885-951a-fa03044f5d71} device partition=C:

指定的操作系统引导文件“ windows\ system 32\ winload.exe”:

bcdedit /set {cbd971bf-b7b8-4885-951a-fa03044f5d71} path
\windows\system32\winload.exe

设定“NX”“OptIn”:

bcdedit /set nx optin

更改系统名称

默认XP系统名称在Vista启动管理器中是”earlier
version of Windows”,
更改:

bcdedit /set {ntldr} Description “Windows XP Professional SP2″

默认Vista系统名称在Vista启动管理器中是”Microsoft Windows”,更改:

bcdedit /set {current} Description “Windows Vista 5456″

四、输出控制指令

====================

/enum 在储存中的列表项目。

列出所有的操作系统载入程序启动项目:

bcdedit /enum OSLOADER

列出所有的启动管理项目:

bcdedit /enum BOOTMGR

列出默认的启动项目:

bcdedit /enum {default}

列出指定的操作系统启动项目:

bcdedit /enum {b38a9fc1-5690-11da-b795-e9ad3c5e0e3a}

/v 列出所有活动的项目

bcdedit /enum ACTIVE /v

五、启动管理控制指令

====================

/bootsequence 设定启动列表顺序。

设定二个操作系统项目和启动顺序:

bcdedit /bootsequence {802d5e32-0784-11da-bd33-000476eba25f}
{cbd971bf-b7b8-4885-951a- fa03044f5d71} {ntldr}

加入操作系统项目为启动列表最后项:

bcdedit /bootsequence {802d5e32-0784-11da-bd33-000476eba25f} /addlast

/default 设定默认启动项目。

设定默认启动项目:

bcdedit /default {cbd971bf-b7b8-4885-951a-fa03044f5d71}

设定默认启动操作系统程序为 NTLDR:

bcdedit /default {ntldr}

/displayorder 设定哪一个系统启动显示多启动画面。

设定二个操作系统项目和在启动管理显示命令中被建立操作系统载入的程序 NTLDR:

bcdedit /displayorder {802d5e32-0784-11da-bd33-000476eba25f}

{cbd971bf-b7b8-4885-951a-fa03044f5d71} {ntldr}

把指定的操作系统项目加入启动管理显示命令结束:

bcdedit /displayorder {802d5e32-0784-11da-bd33-000476eba25f} /addlast

/timeout 设定启动暂停数值。

/toolsdisplayorder 设定命令在哪一个启动管理显示工具画面。

设定二个工具项目和内存诊断在那启动管理工具显示命令:

bcdedit /toolsdisplayorder {802d5e32-0784-11da-bd33-000476eba25f}

{cbd971bf-b7b8-4885-951a-fa03044f5d71} {memdiag}

把指定的工具项目加入启动的结束管理工具显示命令:

bcdedit /toolsdisplayorder {802d5e32-0784-11da-bd33-000476eba25f} /addlast

六、BCDEDIT常用设置修复及配置示例

启动入口最主要是四个部分:

Identifier标识符——启动入口的系统标识,可能是bootmgrcurrentid形式等。

device设备——一般是驱动器路径或虚拟映像,系统启动引导后入口。

path路径——device设备的位置,系统用来定位启动文件。

description描述——显示描述,也就是大家见到的菜单显示。

{bootmgr} ——启动管理器

{current}——当前操作系统,启动时选择的系统

{default} ——缺省默认的启动项

{ntldr} ——早期Windows加载

七、为一个启动应用程序控制紧急处理服务的指令

====================

/bootems

开启启动管理紧急处理服务:

bcdedit /bootems {bootmgr} ON

/ems

为目前的操作系统启动项目 EMS 开启:

bcdedit /ems ON

/emssettings 设定紧急处理服务参数。

设定 EMS 参数使用基本输出入系统设定:

bcdedit /emssettings BIOS

BCDEDIT常用操作举例

1、为Windows XP创建一个分区启动入口:

bcdedit /create {ntldr} /d “Windows XP”

bcdedit /set {ntldr} device partition=F:

bcdedit /set {ntldr} path ntldr

bcdedit /displayorder {ntldr} /addlast

2、删除Windows XP启动入口

bcdedit /delete {ntldr} /f

3、设置启动分区

bcdedit /set {标识符} device
partition=C:

4、增加Linux引导入口

bcdedit /create /d “GrubInstallUbuntu” /application bootsector

命令执行后会返回一个GUID,然后使用鼠标选中右键全选,并在标题栏中右键复制下来,接着再执行以下命令(命令中的GUID需要替换成上面命令返回的ID 值)。

bcdedit /set {GUID} device partition=C:

bcdedit /set {GUID} path grldr.mbr

bcdedit /displayorder {GUID} /addlast

5、关闭系统DEP保护:

bcdedit.exe /set {current} nx AlwaysOff

6、创建一个配置数据库:

bcdedit /createstore C:\Myboot


如果打开其他指定的bcd文件如下:

示例:C:\boot>bcdedit.exe /store c:\BCD 后面可以加入操作命令。


ghost前的重要准备工作:

win+r 打开运行对话框:按顺序运行以下代码(复制到运行里回车)
以administrator权限运行以下命令:
BCDEDIT /set {bootmgr} device boot
BCDEDIT /set {default} device boot
BCDEDIT /set {default} osdevice boot