为 OpenStack Nova 制作 Windows 镜像

上次 VPSee 给 OpenStack Nova 制作 Ubuntu 镜像的时候忘了介绍制作 Windows 镜像和在 Nova 上运行 Windows 虚拟机的情况,前几天刚好有人在微薄上问到这个问题。在 Nova 上运行 Windows 的虚拟机其实很容易,和运行 Linux 虚拟机差不多:先制作一个 Windows 虚拟机镜像(模板),然后再以这个镜像为模板来创建 Windows 虚拟机(实例)。

安装 Windows 镜像

创建一个 10GB 大小的 “硬盘”(raw 格式):

$ kvm-img create -f raw windowsxp.img 10G
Formatting 'windowsxp.img', fmt=raw size=10737418240

openstack 启动虚拟机实例的时候使用的是 virtio 接口,但是 windows 默认没有这个接口的驱动,所以需要额外的驱动。然后使用 ISO 文件的 windowsxp.iso 安装盘来安装 Windows:

$ wget http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/
virtio-win-1.1.16.vfd

$ sudo kvm -m 1024 -cdrom windowsxp.iso -drive file=windowsxp.img,if=virtio,boot=on \
-fda virtio-win-1.1.16.vfd -boot d -nographic -vnc :0

在另外一台机器上使用 vnc 客户端就可以看到 windows 安装过程和进行操作:

$ vncview 172.16.39.111:5900

安装完 windows 后可以进行一些必要的定制,比如打开 RDP 访问、设置防火墙不要屏蔽 RDP 等,这时候也可以安装一些必要软件,要注意的是这个是以后的模板,要尽量保持系统原样,最好不要做定制也不要装任何软件,可以留给客户自己做,定制这东西每个人口味都不同。

发布 Windows 镜像

windows 虚拟机镜像做好以后就可以发布到云里了,注册镜像后会得到一个标志符 ami-00000004,以后就用这个 ami-00000004 来识别云里面的镜像(还记得我们上次做的 ubuntu 镜像的标志符是 ami-00000003 吗?):

$ euca-bundle-image -i windowsxp.img 
Checking image
Encrypting image
Splitting image...
Part: windowsxp.img.part.00
Part: windowsxp.img.part.01
...
Part: windowsxp.img.part.65
Generating manifest /tmp/windowsxp.img.manifest.xml

$ euca-upload-bundle -b mybucket -m /tmp/windowsxp.img.manifest.xml 
Checking bucket: mybucket
Uploading manifest file
Uploading part: windowsxp.img.part.00
...
Uploading part: windowsxp.img.part.65
Uploaded image as mybucket/windowsxp.img.manifest.xml

$ euca-register mybucket/windowsxp.img.manifest.xml
IMAGE	ami-00000004

检验一下 windows 镜像是否上传成功,ami-00000004 就是我们刚做的 windows 镜像:

$ euca-describe-images
IMAGE	aki-00000001	mybucket/vmlinuz-2.6.32-28-server.manifest.xml		available	public		x86_64	kernel	 	 
IMAGE	ari-00000002	mybucket/initrd.img-2.6.32-28-server.manifest.xml		available	public		x86_64	ramdisk	 	 
IMAGE	ami-00000003	mybucket/ubuntutemplate.img.manifest.xml		available	public		x86_64	machine	aki-00000001	ari-00000002
IMAGE	ami-00000004	mybucket/windowsxp.img.manifest.xml		untarring	public		x86_64	machine

第一个 Windows 虚拟机实例

有了这个 windows 模板(镜像)以后我们就可以以这个 “镜像” 为模板来为云计算用户创建 n 个 windows 虚拟机,运行之前需要 key:

$ euca-describe-keypairs 
KEYPAIR	mykey	76:7d:93:88:a0:e5:3e:5d:4b:62:cd:85:c5:23:7a:05

$ euca-run-instances -k mykey -t m1.small ami-00000004
RESERVATION	r-er0zkjm7	mycloud	default
INSTANCE	i-00000003	ami-00000004			scheduling	mykey (mycloud, None)	0	m1.small	2011-06-20T14:08:45Z	unknown zone

然后用 nova-manage 命令检查是否成功运行 windows 虚拟机,状态栏 state 应该是 running 状态:

$ sudo nova-manage vm list
instance   node            type       state      launched            image        kernel       ramdisk       project    user       zone       index
i-00000003 node01           running    2011-06-20 14:12:49 7                                       mycloud    vpsee       None       0

大功告成,用一个 RDP 客户端连接 windows 就可以了(这个 windows 云虚拟机使用的是内部 IP):

# rdesktop 192.168.3.4

评论 (25 Comments)

  1. windows的密码是固定的吗?

  2. 初始镜像的密码就是安装 Windows 时的密码,启动 Windows 后需要自己更改密码。

  3. @vpsee
    $ euca-describe-keypairs
    KEYPAIR mykey 76:7d:93:88:a0:e5:3e:5d:4b:62:cd:85:c5:23:7a:05

    $ euca-run-instances -k mykey -t m1.small ami-00000004
    这个m1.small是用ami-04创建的一个虚机吗?
    这里的mykey的名字是上面查看到keypairs的名称是一样的是吧?

  4. m1.small 是虚拟机型号,ami-00000004 是模板(image)序号。

  5. koory@openstack:~$ euca-bundle-image -i windowsxp.img
    Invalid cert
    vpsee你好!出现这样的现象是什么问题?谢谢.

  6. 问题解决了,没仔细看vpsee写的文章。打扰~

  7. 請問一下 我按照你的文件安裝了 OpenStack Compute over Ubuntu 11.04 是可以運行的 同時也安裝了第一個 instance Ubuntu 10.10 可以連得上 也可以登入 一切正常 但是我嘗試著根據你的這篇文章安裝 Windows XP instance run 起來正常 也可以透過 VNC 連進去安裝成功 可是接下來 euca-run-instance 之後 running 正常 卻無法登入也無法 ping. 我想知道有需要針對這個 Windows instance 另外做網路設定嗎?

  8. @Christine
    你在 windows 里面设置网络和固定 IP/gateway 再试一下。

  9. 我也遇到了与7楼相同问题,可以正常启动、DHCP分配IP地址,就是不可以连接WINDOWS实例。VNC与RDESKTOP都不可以。直接用KVM启动这个虚拟机,提示没网卡驱动。

  10. 我遇到的问题是, 发布模板之后, 创建虚拟机实例之后使用 VNC连上发现 硬盘是不可启动设备:
    显示:
    booting from harddisk
    boot faild: not a bootable disk

    我创建的模板本身的硬盘镜像绝对是可以启动的, 已经另试验过了..

  11. myhost@myhost:~$ euca-bundle-image -i windowsxp.img
    Invalid cert

    vpsee你好!我也出现koory 同样的问题,但是我还没有找到原因,请帮忙谢谢!

  12. 问题解决了,谢谢

  13. 能分享下,问题是怎么解决的吗?我也出现这样的情况了。

  14. 想问一下,我做windows7镜像的时候没有安装virtio,后面怎么补救?

  15. vpsee您好!
    请教一个问题,我做好winxp镜像成功,instance显示是running,有两个ip地址,为何我都不能ping通?
    无法远程连接啊!
    期望您的解答!

  16. 我也是如上做了,用kvm起的时候是可以上网的,可是上传后显示running但console-output是空的,也ping不到不知是什么原因,请教~~

  17. @vpsee
    为何我要start instance时会出现api error的讯息

  18. 系统Fedora16 64位

    qemu -boot d -m 512 -cdrom Deepin.iso -drive file=xp.img,boot=on -fda virtio-win-1.1.16.vfd -vnc :1

    以下命令后,在另一终端中vnc登录,一直卡在“Booting from Hard Disk。。。”

    Deepin.iso此用virt-manager可以正常安装

    请教下vpsee!多谢了~~

  19. 想請問有高手知道輸入
    $ euca-bundle-image -i windowsxp.img
    Invalid cert

    這樣結果是出錯在哪??
    要怎麼修正??
    謝謝

  20. 已解決,謝謝

  21. 你好,我制作的时候,出现了一个错误,提示无法辨别raw的提示,是啥原因导致的呢?麻烦,抽空帮帮忙,谢谢

  22. 你好,请问当我输入euca-register mybucket/windowsxp.img.manifest.xml
    时,报错:UnknownError: An unknown error has occurred. Please try your request again. (前面我上传的步骤都正确,输入 euca-describe-availability-zones verbose
    时也能显示:AVAILABILITYZONE nova available
    AVAILABILITYZONE |- node00
    AVAILABILITYZONE | |- nova-scheduler enabled :-) 2011-05-22 10:32:31
    AVAILABILITYZONE | |- nova-network enabled :-) 2011-05-22 10:32:32
    AVAILABILITYZONE | |- nova-compute enabled :-) 2011-05-22 10:32:24

    请大牛帮帮忙!!!!!

  23. @vpsee
    我的window7虚机启动时没有网卡和声卡,什么原因哦?谢谢!

  24. @MyName
    原因很多,要到 /var/log/ 里面看错误日志才知道啥问题。

  25. 执行sudo kvm -m 1024 -cdrom windowsxp.iso -drive file=windowsxp.img,if=virtio,boot=on \
    -fda virtio-win-1.1.16.vfd -boot d -nographic -vnc :0命令会报下面的错误:
    drive with bus=0, unit=0 (index=0) exists
    请教下是为什么问题,img的问题?

发表评论