HOWTO:从移动存储上启动和运行完整版的 Windows Server 2008 R2
还记得这篇日志吗 —《从UFD启动和运行Hyper-V Server 2008 R2》!?要从 UFD(USB Flash Disk 闪存盘)或移动硬盘上启动和运行 Hyper-V Server 2008 R2 是非常简单的,这是因为微软在 Hyper-V Server 2008 R2 中添加了对移动存储启动的支持。只需要参考日志中的操作流程,就可以看到成果了!在文中,gOxiA 提到只需要修改注册表中的相关项便能够在移动存储上运行完整版的 Windows Server 2008 R2,相信这才是大家更感兴趣的体验!
gOxiA 先后入手了一个PNY 8G 的 UFD和一个双接口的移动硬盘盒,目前打算在这个拥有320G存储容量的双接口(eSATA+USB)硬盘盒中独立运行一个 Windows Server 2008 R2,主要用于 Hyper-V 相关的虚拟机应用,其中虚拟机也将存储在这个移动存储中。这样一来,gOxiA 就能够节省出来笔记本本身的资源,降低本机硬盘的损耗。
实际的实施过程比较顺利,但是结果并不乐观。gOxiA 修改了 PollBootPartitionTimeout 为 30000(十进制,十六进制是0x00007530)后,在启动系统时还是出现了蓝屏 0x0000007b,看来只修改 PollBootPartitionTimeout 并不能完全解决问题。前面讲过 Hyper-V Server 2008 R2 能够直接从 UFD或大容量移动存储上启动和运行主要还是因为微软添加了对此的支持,通过对相关驱动文件内容的比较发现 Hyper-V Server 2008 R2 和 Windows Server 2008 R2 并无实质差异,不足以影响到启动失败,那么问题应该还是出在注册表设置上,查阅了一些资料发现了一个关键的注册表键 – BootDriverFlags,在 MSDN Library 中找到了合理的解释。
BootDriveFlags:On initial validation, Image Configuration Editor displays the following message in the Validation tab: Package "Bootable Windows USB Stack" would like Setting "BootDriverFlags" in Component "Kernel-PnP" set to the value "4".
找到了关键问题所在,一切都迎刃而解!非常顺利的,gOxiA 在自己的320G移动硬盘上启动并成功运行了 Windows Server 2008。下面就将详细的操作步骤与大家分享!
在开始前,请准备好自己的环境(PS:gOxiA 的实际环境是一台装有 Windows 7 Ultimate 的 Thinkpad x60,一块320G的移动硬盘分了两个区,引导分区40G(盘符 S:),NTFS格式、活动分区。一套 Windows Server 2008 R2 英文版。本机内已经预先安装了 WOPK,为了方便经常使用, imagex 工具单独拷贝到了 Windows 目录下。VHD 挂载到系统中分配的盘符是 V:):
- 一份 Windows Server 2008 R2 安装源;
- 一个已经在 Windows 7 中分区格式化激活为活动分区过的 UFD 或者移动硬盘,否则就需要 WAIK 或 WOPK 中的 Bootsect.exe 命令来使其能够支持引导。首先定位到“C:\Program Files\Windows AIK\tools\PETools\x86”(PS:根据你实际安装的 WAIK 或 WOPK,以及当前架构来确定最终正确的目录。),再执行下面的命令行: bootsect /nt60 s: /force /mbr
- WAIK或WOPK,如果你已经在 Windows 7 中使用 diskpart 分区格式化并激活了这些移动存储设备,那么只需要找个 imagex.exe 工具即可。
- 操作机器 Windows 7 或 Windows Server 2008 R2,否则你将寸步难行。
一切准备就绪后我们就可以正式开始了,如果你一直关注 gOxiA 的博客,那么应该对 diskpart 为移动存储设备分区格式化激活为活动分区有了很深入的学习和了解,这里准备移动存储设备的步骤就不再复述了。
首先,我们使用 diskpart 命令在(S:)上创建一个动态扩展类型,大小为 10G 的 VHD,之后挂载到当前系统中,使用 NTFS 格式创建一个活动主分区,卷标为 Win08R2Ent,并分配盘符为 (V:)。为此,执行如下的命令行:
完成上述步骤后,便可以将 Windows Server 2008 R2 安装文件释放到 VHD 中,本例中将要安装的是 Windows Server 2008 R2 Enterprise,所以执行如下命令行:
释放之后,使用“bcdboot v:\windows /s s:”命令行在(S:)上创建引导管理器和相关的引导信息。由于 gOxiA 事先已经在移动硬盘上安装了 Hyper-V Server 2008 R2 和 Windows Server 2008 R2 Standard,所以此步骤在本例中忽略。后面会单独介绍为当前移动存储设备上的引导信息添加额外引导项。
到这里,如果安装的是 Hyper-V Server 2008 R2,就可以直接重新启动来运行移动存储上的系统了。对于完整版的 Windows Server 2008 R2,我们要进入关键的设置环节,离线方式编辑(V:)上系统的注册表,来修改 PollBootPartitionTimeout 和 BootDriverFlags 的键值。否则在启动引导过程中会遇到 0x00000076 或 0x0000007b 的蓝屏错误。
编辑注册表我们可以使用系统自带的命令 – Reg.exe。首先,载入注册表。为此,执行如下命令行:
之后,修改 PollBootPartitionTimeout 的键值为 30000 的十六进制,即:0x00007530。为此:
接下来再修改 BootdriverFlags 的键值为 0x00000004(十六进制),为此:
完成注册表的修改后,卸载注册表。为此:
提示:Reg.exe 命令行的使用很简单,这里就不再介绍,大家可以运行 reg /? 来获取相关的信息。下图中 reg 命令行中 /f 表示强行覆盖,不再提示。所以,使用时要尤为注意。
大功告成,现在就可以重新启动计算机从移动存储上引导和运行 Windows Server 2008 R2 了,由于后续过程中会多次重新启动,如果计算机 BIOS 未设置先由 USB 设备引导,就必须在每次重新启动后,人工方式来调用 BIOS 的设备引导选项,选择从 USB 设备引导。此外请注意,如果你同 gOxiA 一样要在 Windows Server 2008 R2 上运行 Hyper-V Roles,请务必使用 bcdedit 将 hypervisorlaunchtype 参数设置为 auto;如果还要运行在其他计算机上,还要将 detecthal 设置为 on。
之前,gOxiA 介绍过已经在移动存储上创建了两个系统,所以在本例中 gOxiA 还需要为现在这个 Windows Server 2008 R2 Enterprise 再创建一个引导信息。为此,执行了如下图所示的命令行,最终完成了整个操作过程。
下面是 gOxiA 的移动硬盘上的引导信息,供大家参考:
Windows 启动管理器
--------------------
标识符 {bootmgr}
device partition=S:
description Windows Boot Manager
locale en-US
inherit {globalsettings}
default {default}
resumeobject {f42031ce-8f5f-11df-a522-0016cff894cf}
displayorder {default}
{f320cdfd-8faf-11df-a49a-0016cff894cf}
{3ff017e1-8fc7-11df-9ce0-0016cff894cf}
toolsdisplayorder {memdiag}
timeout 30
Windows 启动加载器
-------------------
标识符 {default}
device vhd=[S:]Hyper-V Server R2.vhd
path Windowssystem32winload.exe
description Microsoft Hyper-V Server 2008 R2
locale en-US
inherit {bootloadersettings}
osdevice vhd=[S:]Hyper-V Server R2.vhd
systemroot Windows
resumeobject {f42031ce-8f5f-11df-a522-0016cff894cf}
nx OptOut
hypervisorlaunchtype Auto
Windows 启动加载器
-------------------
标识符 {f320cdfd-8faf-11df-a49a-0016cff894cf}
device vhd=[S:]win08r2std.vhd
path Windowssystem32winload.exe
description Windows Server 2008 R2 Standard
locale en-US
inherit {bootloadersettings}
recoverysequence {406f48fd-903b-11df-80cb-0019d244ddeb}
recoveryenabled Yes
osdevice vhd=[S:]win08r2std.vhd
systemroot Windows
resumeobject {f42031ce-8f5f-11df-a522-0016cff894cf}
nx OptOut
hypervisorlaunchtype Auto
nocrashautoreboot Yes
sos Yes
Windows 启动加载器
-------------------
标识符 {3ff017e1-8fc7-11df-9ce0-0016cff894cf}
device vhd=[S:]win08r2ent.vhd
path Windowssystem32winload.exe
description Windows Server 2008 R2 Enterprise
locale en-US
inherit {bootloadersettings}
osdevice vhd=[S:]win08r2ent.vhd
systemroot Windows
resumeobject {f42031ce-8f5f-11df-a522-0016cff894cf}
nx OptOut
hypervisorlaunchtype Auto
detecthal Yes
注意观察,在 Windows Server 2008 R2 Standard 引导信息中,gOxiA 启用了 nocrashautoboot 和 sos 参数,前面的参数表示遇到蓝屏不重新启动,后面的参数表示引导过程中显示详细的启动信息。这样有助于我们进行排错!
本文至此告一段落,发表一下 gOxiA 的感慨!Windows 发展至今,给予我们太多的惊喜,而这些惊喜不仅仅只体现在客观层面上!Windows 十分强大,也将越来越强大!微软所做的努力将会证明,我们的选择是正确的!
最后,友情提示:运行在移动存储上的 Windows Server 2008 如果要运行在其他计算机上,建议不要安装驱动程序,而使用内置的驱动,因为一旦运行于其他计算机便会重新识别硬件。此外,在其他计算机上运行之后会修改当前系统的引导信息,所以请关注引导信息中 device 和 osdevice 参数设置。
Server 2008 R2 能不能支持UEFI安装啊,,
它与Hyper-V Server 2008 R2 又有什么区别,,
,
我的WIN7是UEFI安装的,用imagex把2008r2企业完整版应用到在D盘新建的SERVER.VHD,
再给UEI盘,分配盘符S,SERVER.VHD挂载盘符是U,再CMD里,
bcdboot U:\windows /s U: /l zh-cn
就报错啊,,大概意思是不能创建啥,,的,,