在下一代Windows
操做系统 Windows Server 2008里面,Microsoft引入了不少新的特性,其中就包括新的引导模式。对于一台计算机来讲,操做系统的启动是很关键的一个步骤,对于目前占据了大量桌面计算机市场领域的Microsoft Windows操做系统来讲,其可否正常的启动会影响全部使用Microsoft Windows操做系统的用户。众所周知,Windows 的引导方式前先后后经历过屡次的变更,基本上是每换一代Windows操做系统,Windows的启动方式均要发生一次变更。Windows Server 2008做为第6代Windows操做系统,其启动方式再次发生了变更。
在Windows Server 2008 以及Windows Vista 里面,不管是早期的从纯DOS模式下引导仍是如今Windows 2000/XP/Server 2003采用的ntldr+ntdetect.com 的引导方式,均被抛弃了。一种被称为Boot Manager的组件取代了ntldr+ntdetect.com 的引导方式,成为Microsoft在Windows Server 2008 以及Windows Vista里面采用的Windows引导方式。
在Windows Server 2008 以及Windows Vista中,微软引入了一种全新的boot loader架构, Windows Boot Manager (Bootmgr.exe)。与Ntldr严重地依赖于硬件不一样的是,Windows Server 2008中的新架构能够实现完整的硬件独立性,且可以与多种操做系统无缝结合,让Windows Server 2008的启动/引导过程更加快速与
安全。同时,将以前Windows 系统中由Boot.ini管理的内容移交给新的Boot Configuration Data (BCD : 启动设置数据),固然,也提供了新的启动选项编辑工具,BCDEdit (BCDEdit.exe),来管理启动设置。对于安装了Windows Server 2008的机器,Microsoft将修改被激活的主分区的启动扇区(Windows 安装程序将在磁盘的第一个扇区里面写入MBR内容),使用新的启动扇区内容替代原有的启动扇区的内容。经典的错误提示信息:“Ntldr is missing”将被“Bootmgr is missing” 所取代。
什么是BCD 存储
Boot Configuration Data (BCD)用来存储启动配置参数而且控制Windows Server 2008 以及Windows Vista系统如何启动。这些参数在以前的操做系统中是被存储在Boot.ini文件之中(存在于基于BIOS的操做系统)或者是记录在非易失性的RAM上(NVRAM)。用户可使用Bcdedit.exe这个命令行工具来控制在预操做系统环境下运行的Windows® code,从而实现对BDC存储的添加,删除,编辑以及加载等操做。
Bcdedit.exe工具存放在Windows Vista分区的\Windows\System32目录下。对于基于BIOS的操做系统,BCD的注册文件存储在主分区的\Boot\Bcd目录下。而对于基于EFI的操做系统,BCD注册文件则是定位在EFI的系统分区上。只有拥有管理员权限的用户才能够修改BCD。
C:\Boot\BCD 文件就是整个 BCD 数据库。在Windows Vista 运行的时候,这个文件是不可以被删除或者更名的,这是由于系统一直占用它。若是用户将这个文件删除,且已经安装了Boot Manager,那么用户的系统将不可以启动,由于 Boot Manger 没法找到合适的BCD数据文件来使用。
为何Boot.ini要升级为BCD?
BCD的诞生主要是为了描述启动配置数据提供了一种新的改进的机制。随着新的固件模型的发展(例如,扩展固件接口(EFI)),用户须要为底层固件抽象提供一个可扩展的通用接口。这一全新的设计将为Windows Server 2008 以及Windows Vista的许多新特性提供必要的支持(例如,启动恢复工具以及多用户安装快照)。
修改BCD的方法
根据修改内容的不一样,用户能够选择下面的某种工具来修改BCD:
·
Startup and recovery. 若是用户安装了多个操做系统,那么在 Startup and recovery 对话框中用户能够选择默认的启动操做系统以及倒计时数。这些设置都存储在System Properties 对话框的Advanced 页签中。
· System Configuration utility (Msconfig.exe). Msconfig.exe 是一个更加高级的工具,它主要包括了如下的操做 /debug, /safeboot, /bootlog, /noguiboot, /basevideo, 以及 /numproc.
· BCD WMI provider. 这个工具是一个管理接口,使用它用户能够利用脚原本修改BCD。
· BCDEdit.exe. 在Windows Server 2008和Windows Vista中这个命令行的工具替代了原来的 Bootcfg.exe 工具,用户也不能用Bootcfg.exe来修改BCD,不过,Bootcfg.exe工具在系统中依然有效,用以支持以前的操做系统。
BCD要比XP的Bootmgr强大得多,所以你还可以用它作其它不少的事。不过BCDEdit是比较难理解与使用的,BCD中管理启动数据的规则也要比你所想象的更为复杂得多。使用Bcdedit.exe,用户能够在Windows Server 2008中建立一个BCD
存储,也能够为现有BCD存储添加新的登陆项,修改或者删除现有登陆项,此外,Bcdedit.exe工具还能够导入导出现有的Bcd存储,查询指定项以及应用全局修改。 新的引导环境被分为两个部分,Windows Boot Manager 和引导环境中运行的多种引导应用程序。Windows Boot Manager简单的说就是一个迷你的
操做系统,这个系统控制着用户的引导过程,而且容许用户选择哪一个引导应用程序须要运行。每一个引导应用程序都有着本身的不一样的做用,例如Windows Boot Loader应用程序就是用来引导Windows的。
当用户使用/enum参数时,用户能够看到一个Windows Boot Manager登陆(由于只有一个boot manager),对于每一个Windows Server 2008 或者Windows Vista操做系统用户还能够看到对应的Windows Boot Loader应用程序。例如,若是用户在计算机的不一样分区中安装了两个不一样版本的Windows Vista操做系统,那么用户就能够看到两个Windows Boot Loader登陆。此外,用户还能够看到一个legacy登陆,这个登陆并非一个引导应用程序,而是使用NTLDR以及Boot.ini来引导Windows Server 2008 之前的操做系统,例如Windows Server 2003, Windows XP以及更早的操做系统。
当用户须要在已经安装了Windows Server 2008 或者Windows Vista的计算机上安装早期的Windows 操做系统时,用户须要按照下面的步骤依次进行:首先安装早期的Windows系统,而后登陆到旧的操做系统上,经过运行活动分区中\boot目录下的fixntfs /lh 来恢复最新的boot manager。而后为旧的操做系统建立一个BCD登陆,找到定位在\Windows\System32目录下的Bcdedit.exe,而后输入下面的命令:
Bcdedit
/
create ...
{legacy}
/
d “Description”Bcdedit
/
set
...
{legacy}
device bootBcdedit
/
set
...
{legacy}
path \ntldrBcdedit
/
displayorder ...
{legacy}
/
addlast注意Description表明的是旧操做系统新的登陆的描述.
要想建立一个引导Windows Imaging Format (WIM)镜像的登陆,那么用户须要建立一个带有指向引导分区的RAMDISK选项的OSloader类型的登陆。要想完成这些操做,要使用下面的程序:首先引导路径为multi(0)disk(0)rdisk(0)partition(1)来对应计算机的C盘,而后镜像还要是一个标准的Boot.wim文件,WIM镜像的System32文件夹下还要包含Winload.exe文件。具体步骤以下:首先建立在BCD存储上建立一个{ramdisktoptions}对象:
bcdedit
/
create ...
{ramdiskoptions}
/
d
"
Ramdisk options
"
bcdedit
/
set
...
{ramdiskoptions}
ramdisksdidevice partition
=
Drivebcdedit
/
set
...
{ramdiskoptions}
ramdisksdipath \boot\boot.sdi注意Drive表明的是包含镜像的分区
而后建立一个新的引导应用程序:bcdedit /create /d "Boot from WIM" /application OSLOADER,完成后新建立的登陆会返回一个标识符(GUID),下面的操做所有是依据这个GUID来进行的:
bcdedit
/
set
...
{GUID}
device ramdisk
=
[c:]\sources\boot.wim,...
{ramdiskoptions}
bcdedit
/
set
...
{GUID}
path \windows\system32\winload.exebcdedit
/
set
...
{GUID}
osdevice ramdisk
=
[c:]\sources\boot.wim,...
{ramdiskoptions}
bcdedit
/
set
...
{GUID}
systemroot \windows
若是用户但愿引导到Windows Preinstallation Environment (Windows PE)环境中,那么还须要完成下面的操做:
bcdedit
/
set
...
{GUID}
winpe yesbcdedit
/
set
...
{GUID}
detecthal yes
最后在显示列表上添加上新的登陆:
· bcdedit
/
export “D:\BCD Backup\Bcd Backup : 将启动设置备份到D盘 “BCD Backup” 目录下;· bcdedit
/
import “D:\BCD Backup\Bcd Backup : 恢复以前备份在D盘 “BCD Backup”目录下启动选项。
使用BCDEdit修改启动菜单选项
做为一种良好的操做习惯,在对Windows Server 2008的启动选项进行任何修改前,首先要对BCD中的启动选项进行备份,相应的命令上面已经介绍过,在此再也不赘述;其次,使用“bcdedit ”或“ bcdedit /enum all ”来查看系统中
硬盘或分区的正确 GUID 标识,并将其记录下来。毕竟,BCDEdit只是一款命令行工具,咱们操做时需手动输入相似“{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}”这样的长字符串时,很容易出错,而这每每会致使Windows Vista启动失败。
此外若是用户须要改变特定的登陆选项的debugger设置,能够按照下面的步骤操做:
要设计一个连续的debugging:bcdedit
/
set
...
{GUID}
debugtype:serialbcdedit
/
set
...
{GUID}
baudrate:Baudratebcdedit
/
set
...
{GUID}
debugport:Port要设置一个USB的debugging:bcdedit
/
set
...
{GUID}
debugtype:usbbcdedit
/
set
...
{GUID}
targetname:debugging要设置1394的debugging:bcdedit
/
set
...
{GUID}
debugtype:1394bcdedit
/
set
...
{GUID}
targetname:
32
下面的命令行演示的是为c74b751a
-
ff09
-
11d9
-
9e6e
-
0030482375e4在115200波特com1端口设置连续debugging:Bcdedit
/
set
...
{c74b751a
-
ff09
-
11d9
-
9e6e
-
0030482375e4}
debugtype:serialBcdedit
/
set
...
{c74b751a
-
ff09
-
11d9
-
9e6e
-
0030482375e4}
baudrate:
115200
Bcdedit
/
set
...
{c74b751a
-
ff09
-
11d9
-
9e6e
-
0030482375e4}
debugport:
1
最后须要说明的是,Windows Server 2008 对BCD键是采用了保护措施的。Windows Server 2008 默认设定,只容许 SYSTEM 用户可以彻底控制这个键,而Administrators组用户只有读取的权限,没有写入的权限。而其余类型的用户则根本没有查看的权限。换句话说,要修改这个键,就须要手动调整注册表的
安全描述符的内容了。调整注册表安全描述符的方法很简单,只须要右键点击将要被修改的键,而后选择权限,而后点击添加按钮把本身的帐户加入列表,并打开写入权限便可,这里再也不详细的描述。 BCD 是一个很是复杂的话题,涉及到不少Windows比较深刻的技术。本文简单的描述了Windows Server 2008 BCD的一些特性,对于普通的用户来说,BCD也许与以前的Boot.ini区别不大,可是对于开始使用基于EFI (Extensible Firmware Interface : 可扩展固件接口,之后采用这种接口的PC会愈来愈多 )的计算机用户而言,全新的引导技术将会带给用户全面的管理体验。