将Windows 7部署到OpenStack – 实例引导时的Windows安装程序错误

我创build了Windows 7专业版64图像,所有都得到这个错误。 我configuration它们使用1-74驱动程序使用virtio磁盘和networking适配器。 他们在本地工作良好(在Ubuntu 13,QCOW2驱动器,virtio nic和磁盘上的KVM),但是当我将它们上传到我的组织的OpenStack云时,Windows会引发错误。

当我试图创build一个实例时,我从控制台中看到以下错误:

  • Windows安装程序无法将Windowsconfiguration为在此计算机的硬件上运行。 在这里输入图像说明

我承认错误,重新启动虚拟机,现在它不断尝试启动操作系统时,显示以下错误:

  • Windows无法完成安装。 要在此计算机上安装Windows,请重新启动安装。

在这里输入图像说明

从这个KB中读取我检索的日志文件,如下所示:

setuperr.log

  • 错误[0x0f0082] SYSPRP LaunchDll:执行'C:WindowsSystem32scecli.dll,SceSysPrep'时发生失败,返回错误代码1208 [gle = 0x000003e5]
  • 错误[0x060435] IBS Callback_Specialize:决定是否需要专门化或专门化时发生错误; dwRet = 0x4b8
  • 错误[0x0603f1] IBS Module_Term_ImageTransfer:无法禁用图像selectUI; 状态0x80070005 [gle = 0x00000005]
  • 错误[0x0601b8] IBS Module_Term_DiskSpace:无法设置磁盘configurationUI标志[gle = 0x00000005]

setupact.log

我不会在这里列出整个文件(下载我的setupact.log ),但是在知识库文章中有描述。 最接近的条目是这样的:

  • 2014-04-10 08:36:13,信息SYSPRP SPPNP:function驱动程序iaStorV未使用。

解决方法

作为一个临时的解决方法,我可以对破损的实例进行如下操作。 但是,我需要一个永久的解决scheme,以便首先不会出现错误。

  1. 在错误屏幕上按SHIFT-F10调出命令提示符。
  2. 运行CD C:\ windows \ system32 \ oobe \ msoobe

请帮忙,我一直试图让这个工作2个星期吧!

我能够通过以下方式创build一个没有启动错误的良好映像:

  1. 在本地创build映像,然后加载virtio驱动程序。 最好login到Windows审计模式,同时安装任何额外的驱动程序,更新,软件或自定义设置
  2. 不要安装cloudbase-init或sysprep映像
  3. 一目了然地上传图片到OpenStack(我们称之为SEED图片)
  4. 根据图像创build一个实例。 如果在初始启动过程中遇到任何Windows错误,请尝试解决它们(例如,通过在我的解决方法答案中运行msoobe)并启动到Windows。 您的目标是让Windows启动并在OpenStack模拟硬件上运行。 在这个阶段,Windows将自行调整以完全适合OpenStack模拟硬件 – 这在本地VM中难以做到。
  5. 如果您忘记了或完全不想在您的本地实例上执行这些更新,请在OpenStack中完成更新/定制您的实例。
  6. 仍然不要安装cloudbase-init或sysprep映像
  7. closures实例并获取SNAPSHOT(我们称之为PREP快照)! 请记住:快照是一个图像! 稍后您将能够参考此快照以进行图像更新,或者如果需要,甚至可以分离出新的图像。
  8. 此时,您不需要SEED图像或从中创build的实例。 你可以删除这两个。
  9. 从PREP快照启动一个新实例。 请注意,Windows在从SEED映像启动实例时不需要执行所有硬件调整。
  10. 您现在可以安装cloudbase-init和sysprep实例。
  11. closures系统并获取快照(让我们称之为IMAGE快照)。
  12. 通过启动一个实例来testing你的IMAGE快照。
  13. 将图片快照标记为公开并庆祝!

就我个人而言,我觉得这应该是build立新形象的标准过程。 您不仅可以获得在相同的硬件上部署的映像,而且可以使用快照function更新/testing/分散映像,从而在OpenStack中快速/轻松地完成映像的更新本地机器和上传,每次浏览一下。