EFI启动项及BCD配置数据库详细指南
关键词: UEFI, BCD, BCDEDIT, Multi-boo
bcdedit /set {fwbootmgr} default $newguid
Bcdedit /set {fwbootmgr} displayorder {bootmgr} /addfirst
==========注意: 以下为一个完整的BCD Datastore==============
c:>bcdedit /enum all
Firmware Boot Manager
---------------------
identifier {fwbootmgr}
displayorder {df169357-da47-11e5-9737-806e6f6e6963}
timeout 5
Firmware Application (101fffff)
-------------------------------
identifier {30c51ad8-da54-11e5-bba5-806e6f6e6963}
description USB Hard Drive 1 - General USB Flash Disk
Firmware Application (101fffff)
-------------------------------
identifier {71d193d7-d484-11e5-8b4e-806e6f6e6963}
device partition=\Device\HarddiskVolume1
path \EFI\CLOVER\CLOVERX64.EFI
description Clover start bootmgfw.efi at EFI
Firmware Application (101fffff)
-------------------------------
identifier {ae905f8b-c2b6-11e5-bdcd-fca96f5bb55a}
description Notebook Ethernet
Firmware Application (101fffff)
-------------------------------
identifier {b68ea7d7-dae0-11e5-88d5-806e6f6e6963}
device partition=\Device\HarddiskVolume1
path \efi\grub\grub64.efi
description GRUB64 at EFI
Firmware Application (101fffff)
-------------------------------
identifier {df169357-da47-11e5-9737-806e6f6e6963}
description Notebook Hard Drive
==========Firmware Boot Loader=============
到此为止,全部内容为Firmware相关的启动内容,说白了,就是UEFI的启动表项,也就是机器开机时开始加载的全部内容。这里包括Windows的Boot loader,以及硬盘,网络以及其他EFI启动内容。
通常来说,对于UEFI的启动项,都是由BIOS设置来决定,在系统启动时会自动导入系统中。从经验来说,在操作系统层面设置的UEFI启动顺序,在系统重新开机时都会恢复原样,所以没必要去做这方面的尝试。但如果愿意,其具体指令格式如下:
bcdedit /set {fwbootmgr} default $newguid
Bcdedit /set {fwbootmgr} displayorder {bootmgr} /addfirst
对于UEFI来说,其缺省启动项为Boot Manager, 而这个表项对应的内容为\EFI\BOOT\BOOTX64.EFI,如果想改变缺省启动的内容,直接替换这个表项就可以。
===========以下为Windows BOOT Loader==========
#这部分内容是大家最熟悉的,网上连篇累牍的,都是这方面的介绍。
以下例子为一个标准的完整的Windows启动的BCD数据结构,包括一个(唯一)bootmgr, 俩个启动项,Windows 7和Win 7 PE, 两个工具表项, Windows恢复环境和内存测试。以及Windows 7正常工作所需要的功能项,休眠唤醒。
Windows Boot Manager
--------------------
identifier {bootmgr} #唯一项,主要作用是加载BCD启动的菜单项
device partition=\Device\HarddiskVolume1
path \EFI\Microsoft\Boot\bootmgfw.efi
description Windows Boot Manager
locale zh-CN
inherit {globalsettings}
default {current}
resumeobject {b1d7de57-da63-11e5-94f6-806e6f6e6963}
displayorder {current}
{ae905f9b-c2b6-11e5-bdcd-fca96f5bb55a}
toolsdisplayorder {ae905fa3-c2b6-11e5-bdcd-fca96f5bb55a}
{memdiag}
timeout 5
Windows Boot Loader
-------------------
identifier {current}
device partition=C:
path \Windows\system32\winload.efi
description Windows 7 Enterprise
inherit {bootloadersettings}
recoverysequence {ae905fa3-c2b6-11e5-bdcd-fca96f5bb55a}
recoveryenabled Yes
osdevice partition=C:
systemroot \Windows
resumeobject {b1d7de57-da63-11e5-94f6-806e6f6e6963}
Windows Boot Loader
-------------------
identifier {ae905f9b-c2b6-11e5-bdcd-fca96f5bb55a}
device ramdisk=[D:]\images\WinPE.wim,{ae905f9a-c2b6-11e5-bdcd-fca96f5bb55a}
description Windows PE 3.1 EFI mode
osdevice ramdisk=[D:]\images\WinPE.wim,{ae905f9a-c2b6-11e5-bdcd-fca96f5bb55a}
systemroot \Windows
nx OptIn
detecthal Yes
winpe Yes
Windows Boot Loader
-------------------
identifier {ae905fa3-c2b6-11e5-bdcd-fca96f5bb55a}
device ramdisk=[C:]\Recovery\ae905fa3-c2b6-11e5-bdcd-fca96f5bb55a\Winre.wim,{ae905fa4-c2b6-11e5-bdcd-fc
a96f5bb55a}
path \windows\system32\winload.efi
description Windows Recovery Environment
inherit {bootloadersettings}
osdevice ramdisk=[C:]\Recovery\ae905fa3-c2b6-11e5-bdcd-fca96f5bb55a\Winre.wim,{ae905fa4-c2b6-11e5-bdcd-fc
a96f5bb55a}
systemroot \windows
nx OptIn
winpe Yes
Resume from Hibernate
---------------------
identifier {b1d7de57-da63-11e5-94f6-806e6f6e6963}
device partition=C:
path \Windows\system32\winresume.efi
description Windows 7 Enterprise
inherit {resumeloadersettings}
filedevice partition=C:
filepath \hiberfil.sys
debugoptionenabled No
Windows Memory Tester
---------------------
identifier {memdiag}
device partition=\Device\HarddiskVolume1
path \EFI\Microsoft\Boot\memtest.efi
description Windows Memory Diagnostic
locale zh-CN
Device options
--------------
identifier {ae905f9a-c2b6-11e5-bdcd-fca96f5bb55a}
ramdisksdidevice partition=D:
ramdisksdipath \images\boot.sdi
Device options
--------------
identifier {ae905fa4-c2b6-11e5-bdcd-fca96f5bb55a}
description Windows 7 Recovery Environment
ramdisksdidevice partition=C:
ramdisksdipath \Recovery\ae905fa3-c2b6-11e5-bdcd-fca96f5bb55a\boot.sdi
========================
对于bootmgr和启动表,都可以通过BCDEDIT命令来设置。其中大部分命令可以在网络上查找到。
设置bootmgr的缺省启动项
bcdedit /set {bootmgr} default ID #事实上,当你将ID项设置为缺省启动项时,其ID将自动转换为{current}
bcdedit /displayorder ID1 ID2 ID3 #设置启动顺序,不同ID以空格隔开
bcdedit /displayorder ID /addlast or /addfirst or /remove
对于工具表项,设置方式也是如此
bcdedit /toolsdisplayorder ........
与Windows标准启动不同的是,WinPE也是一个基于RAM运行的环境,需要先建立ramdisk的device,另外的区别要打开相应的nx, detecthal, pe开关。
Resume from Hibernate
这个项目通常不需要单独设置,当你设置系统的休眠时,都会自动创建这个设备。
Windows恢复环境,可以通过复杂的BCDEDIT指令来创建,但是,对于Windows来说,有更为便捷的方式来处理。这就是reagentc指令。配置windows恢复环境的步骤如下:
1, reagentc /disable #确认该环境未在运行
2, reagentc /setreimage path /c:\winre
这个命令有点奇特,它并不是设置WinRE的目的路径,其中的path是指包含boot.sdi和winre.wim的路径,理论上可以在任何地方。执行的结果是它将相关的文件移动到c:\Recovery\下一个以ID命名的隐藏文件夹中,同时设置相应的BCDEDIT表项。
当然了,winre.wim和boot.sdi文件是不能隐藏的,不然会报not found。
3, reagentc /enable #启动WinRE恢复环境。
如果你愿意,可以直接将WinRE设置在BCD的启动菜单里,无须太多的BCDEDIT创建指令。
C:\>reagentc /info
Extended configuration for the Recovery Environment
Windows RE enabled: 1
Windows RE staged: 0
Setup enabled: 0
Custom Recovery Tool: 0
WinRE.WIM directory:
Recovery Environment: \\?\GLOBALROOT\device\harddisk0\partition4\Recovery\b6
d04d9f-8cb5-11e1-984a-a170d9c72c1b
BCD Id: b6d04d9f-8cb5-11e1-984a-a170d9c72c1b
Setup Files:
Recovery Operation: 4
Operation Parameter:
Boot Key Scan Code 0x0
REAGENTC.EXE: Operation successful
Reference
https://msdn.microsoft.com/en-us/library/windows/hardware/dn898491%28v=vs.85%29.aspx
https://msdn.microsoft.com/en-us/library/windows/hardware/ff542273%28v=vs.85%29.aspx
bcdedit /set {fwbootmgr} default $newguid
Bcdedit /set {fwbootmgr} displayorder {bootmgr} /addfirst
==========注意: 以下为一个完整的BCD Datastore==============
c:>bcdedit /enum all
Firmware Boot Manager
---------------------
identifier {fwbootmgr}
displayorder {df169357-da47-11e5-9737-806e6f6e6963}
timeout 5
Firmware Application (101fffff)
-------------------------------
identifier {30c51ad8-da54-11e5-bba5-806e6f6e6963}
description USB Hard Drive 1 - General USB Flash Disk
Firmware Application (101fffff)
-------------------------------
identifier {71d193d7-d484-11e5-8b4e-806e6f6e6963}
device partition=\Device\HarddiskVolume1
path \EFI\CLOVER\CLOVERX64.EFI
description Clover start bootmgfw.efi at EFI
Firmware Application (101fffff)
-------------------------------
identifier {ae905f8b-c2b6-11e5-bdcd-fca96f5bb55a}
description Notebook Ethernet
Firmware Application (101fffff)
-------------------------------
identifier {b68ea7d7-dae0-11e5-88d5-806e6f6e6963}
device partition=\Device\HarddiskVolume1
path \efi\grub\grub64.efi
description GRUB64 at EFI
Firmware Application (101fffff)
-------------------------------
identifier {df169357-da47-11e5-9737-806e6f6e6963}
description Notebook Hard Drive
==========Firmware Boot Loader=============
到此为止,全部内容为Firmware相关的启动内容,说白了,就是UEFI的启动表项,也就是机器开机时开始加载的全部内容。这里包括Windows的Boot loader,以及硬盘,网络以及其他EFI启动内容。
通常来说,对于UEFI的启动项,都是由BIOS设置来决定,在系统启动时会自动导入系统中。从经验来说,在操作系统层面设置的UEFI启动顺序,在系统重新开机时都会恢复原样,所以没必要去做这方面的尝试。但如果愿意,其具体指令格式如下:
bcdedit /set {fwbootmgr} default $newguid
Bcdedit /set {fwbootmgr} displayorder {bootmgr} /addfirst
对于UEFI来说,其缺省启动项为Boot Manager, 而这个表项对应的内容为\EFI\BOOT\BOOTX64.EFI,如果想改变缺省启动的内容,直接替换这个表项就可以。
===========以下为Windows BOOT Loader==========
#这部分内容是大家最熟悉的,网上连篇累牍的,都是这方面的介绍。
以下例子为一个标准的完整的Windows启动的BCD数据结构,包括一个(唯一)bootmgr, 俩个启动项,Windows 7和Win 7 PE, 两个工具表项, Windows恢复环境和内存测试。以及Windows 7正常工作所需要的功能项,休眠唤醒。
Windows Boot Manager
--------------------
identifier {bootmgr} #唯一项,主要作用是加载BCD启动的菜单项
device partition=\Device\HarddiskVolume1
path \EFI\Microsoft\Boot\bootmgfw.efi
description Windows Boot Manager
locale zh-CN
inherit {globalsettings}
default {current}
resumeobject {b1d7de57-da63-11e5-94f6-806e6f6e6963}
displayorder {current}
{ae905f9b-c2b6-11e5-bdcd-fca96f5bb55a}
toolsdisplayorder {ae905fa3-c2b6-11e5-bdcd-fca96f5bb55a}
{memdiag}
timeout 5
Windows Boot Loader
-------------------
identifier {current}
device partition=C:
path \Windows\system32\winload.efi
description Windows 7 Enterprise
inherit {bootloadersettings}
recoverysequence {ae905fa3-c2b6-11e5-bdcd-fca96f5bb55a}
recoveryenabled Yes
osdevice partition=C:
systemroot \Windows
resumeobject {b1d7de57-da63-11e5-94f6-806e6f6e6963}
Windows Boot Loader
-------------------
identifier {ae905f9b-c2b6-11e5-bdcd-fca96f5bb55a}
device ramdisk=[D:]\images\WinPE.wim,{ae905f9a-c2b6-11e5-bdcd-fca96f5bb55a}
description Windows PE 3.1 EFI mode
osdevice ramdisk=[D:]\images\WinPE.wim,{ae905f9a-c2b6-11e5-bdcd-fca96f5bb55a}
systemroot \Windows
nx OptIn
detecthal Yes
winpe Yes
Windows Boot Loader
-------------------
identifier {ae905fa3-c2b6-11e5-bdcd-fca96f5bb55a}
device ramdisk=[C:]\Recovery\ae905fa3-c2b6-11e5-bdcd-fca96f5bb55a\Winre.wim,{ae905fa4-c2b6-11e5-bdcd-fc
a96f5bb55a}
path \windows\system32\winload.efi
description Windows Recovery Environment
inherit {bootloadersettings}
osdevice ramdisk=[C:]\Recovery\ae905fa3-c2b6-11e5-bdcd-fca96f5bb55a\Winre.wim,{ae905fa4-c2b6-11e5-bdcd-fc
a96f5bb55a}
systemroot \windows
nx OptIn
winpe Yes
Resume from Hibernate
---------------------
identifier {b1d7de57-da63-11e5-94f6-806e6f6e6963}
device partition=C:
path \Windows\system32\winresume.efi
description Windows 7 Enterprise
inherit {resumeloadersettings}
filedevice partition=C:
filepath \hiberfil.sys
debugoptionenabled No
Windows Memory Tester
---------------------
identifier {memdiag}
device partition=\Device\HarddiskVolume1
path \EFI\Microsoft\Boot\memtest.efi
description Windows Memory Diagnostic
locale zh-CN
Device options
--------------
identifier {ae905f9a-c2b6-11e5-bdcd-fca96f5bb55a}
ramdisksdidevice partition=D:
ramdisksdipath \images\boot.sdi
Device options
--------------
identifier {ae905fa4-c2b6-11e5-bdcd-fca96f5bb55a}
description Windows 7 Recovery Environment
ramdisksdidevice partition=C:
ramdisksdipath \Recovery\ae905fa3-c2b6-11e5-bdcd-fca96f5bb55a\boot.sdi
========================
对于bootmgr和启动表,都可以通过BCDEDIT命令来设置。其中大部分命令可以在网络上查找到。
设置bootmgr的缺省启动项
bcdedit /set {bootmgr} default ID #事实上,当你将ID项设置为缺省启动项时,其ID将自动转换为{current}
bcdedit /displayorder ID1 ID2 ID3 #设置启动顺序,不同ID以空格隔开
bcdedit /displayorder ID /addlast or /addfirst or /remove
对于工具表项,设置方式也是如此
bcdedit /toolsdisplayorder ........
与Windows标准启动不同的是,WinPE也是一个基于RAM运行的环境,需要先建立ramdisk的device,另外的区别要打开相应的nx, detecthal, pe开关。
Resume from Hibernate
这个项目通常不需要单独设置,当你设置系统的休眠时,都会自动创建这个设备。
Windows恢复环境,可以通过复杂的BCDEDIT指令来创建,但是,对于Windows来说,有更为便捷的方式来处理。这就是reagentc指令。配置windows恢复环境的步骤如下:
1, reagentc /disable #确认该环境未在运行
2, reagentc /setreimage path /c:\winre
这个命令有点奇特,它并不是设置WinRE的目的路径,其中的path是指包含boot.sdi和winre.wim的路径,理论上可以在任何地方。执行的结果是它将相关的文件移动到c:\Recovery\下一个以ID命名的隐藏文件夹中,同时设置相应的BCDEDIT表项。
当然了,winre.wim和boot.sdi文件是不能隐藏的,不然会报not found。
3, reagentc /enable #启动WinRE恢复环境。
如果你愿意,可以直接将WinRE设置在BCD的启动菜单里,无须太多的BCDEDIT创建指令。
C:\>reagentc /info
Extended configuration for the Recovery Environment
Windows RE enabled: 1
Windows RE staged: 0
Setup enabled: 0
Custom Recovery Tool: 0
WinRE.WIM directory:
Recovery Environment: \\?\GLOBALROOT\device\harddisk0\partition4\Recovery\b6
d04d9f-8cb5-11e1-984a-a170d9c72c1b
BCD Id: b6d04d9f-8cb5-11e1-984a-a170d9c72c1b
Setup Files:
Recovery Operation: 4
Operation Parameter:
Boot Key Scan Code 0x0
REAGENTC.EXE: Operation successful
Reference
https://msdn.microsoft.com/en-us/library/windows/hardware/dn898491%28v=vs.85%29.aspx
https://msdn.microsoft.com/en-us/library/windows/hardware/ff542273%28v=vs.85%29.aspx
-
Hank 赞了这篇日记 2021-04-27 10:35:52