史上最洁癖的在Ubuntu Server 12.04上部署虚拟化

这个国庆好无聊,中国好声音决赛一上来就淘汰了两个喜欢的选手,总之:真是该走的没走,不该走的都留下了。。。
微博上,满眼都是好友都在全球各地旅游晒幸福的图片。显得我的处境更加的苦逼了。

真心好无聊啊,上个月攒了一台比较便宜的机器做公司公用服务器。安装了Ubuntu Server 12.04 LTS,安装的时候发现“Virtual Machine host”,手贱装上了。
作为一个习惯于虚拟化办公的人来说,没有虚拟机的日子很难熬。只好现在研究一下。。。

首先介绍一下背景:

我使用的是一台Xeon E3 1230 v2 + 某微星H77芯片组的PC,用主板自带的RAID1(ST 2Tx2)安装了Ubuntu Server 12.04 LTS,仅仅16G内存。本来不想上显卡的,可是这个主板很坑爹的,没有显卡居然无法启动,BIOS过不去,根本到不了引导!!所以上了个垃圾显卡(好像才用了两天,花屏了!!奸商啊!!好在我真心不是为了插显示器,只要让主板工作就好),另外还上了一块PCI-E RTL-8168 1000M有线网卡。(装这个网卡的过程也很苦逼!!)

其实我以前习惯用linux,由于某公司强制要求hi为第一聊天工具,和lync为强烈推荐软件,而且邮件服务器除了Exchange以外只支持80年代的POP3和SMTP协议。我靠,这意味着我无法离开windows办公,所以我需要一个xp的虚拟机。目前的我,拥有一个win的虚拟机也是一个习惯了。

先下载以下资源:

1. 安装 Ubuntu Server 12.04 LTS (链接)
2. 下载 Windows XP 的安装盘iso (百度一下)
3. 可能会用到的工具,SSH软件:Xshell (地址)
4. 可能会用到的工具,VNC软件:UltraVNC (下载地址)
5. 虚拟机使用的驱动程序 virtio驱动 (立即下载)
注:Windows XP为Microsoft的商业操作系统,其余均是免费软件。

安装Ubuntu Server的任务,我就不细说了。这个不是本文重点内容。详情请自行百度一下。
高能警告:因为我装的服务器一般木有图形界面,所以以下操作均为shell操作。
安装的时候,记得勾选 Virtual Machine host 安装选项(默认安装kvm)

ubuntu server 12.04的kvm比较奇怪,好像前辈的文章都描述qemu的目录在“/usr/libexec/qemu-kvm”,而据观察本版本qemu的可执行文件是“/usr/bin/qemu-system-x86_64”。呵呵,不明白为什么,如果你有答案请给我留言~~!

A. 首先嘛,先建立一个虚拟机使用的磁盘镜像文件:

/usr/bin/qemu-img create -f raw "/home/jay/vm/windows.img" 100G

这个100G的文件创建非常快,几乎不耗时。会不会惊讶磁盘的写入速度啊~
哈哈,你中招了,qemu-img创建的其实是一个稀疏文件。其实并真正占磁盘空间。
可以通过-f来控制镜像文件的格式,官方推荐raw格式,且不用cache的方式运行(因为os有一层磁盘cache机制)。

因为我们木有图形界面,安装使用vnc协议

B. 启动一个虚拟机有两种方式:
1. 直接启动qemu进程,即可开启虚拟机:不得不承认,这确实是一个out-dated,落后的启动方式。
启动一个qemu进程可以使用类似下面的命令

/usr/bin/qemu-system-i386 \
-name "jay's windows" \
-machine "pc" \
-smp 1 \
-m "1G" \
-hda "/home/jay/vm/windows.img" \
-vnc ":88" \
-cdrom "/home/jay/tmp/20120918/YLMF_GHOSTXP_SP3_YN99.iso" \
-k en-us \
-no-acpi \
-localtime \
-usb \
-boot d

这种启动虚拟机的方式很挫,关于参数不懂的话,可以参考一下“man qemu”。
但是也不全是缺点,比如说这种方式可以用非root账号启动一个虚拟机 wow~ 但是效率嘛… 嘿嘿

2. 使用virsh通过xml调用,并交给libvirtd统一管理:事实上,libvirtd还是启动一个qemu的进程
这种方式建立虚拟机优雅多了,通过网上网罗的各种xml,修改对应数据后生成下列xml

<domain type='kvm' id='1'>
<name>jay-xp</name>
<uuid>b7bbce15-13f1-907b-d172-7e91460ed8c3</uuid>
<memory>1048576</memory>
<currentMemory>1048576</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='hd'/>
<!--boot dev='cdrom'/-->
</os>
<features>
<!--acpi/-->
<apic/>
<pae/>
</features>
<clock offset='localtime'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source file='/home/jay/vm/windows.img'/>
<target dev='vda' bus='virtio'/>
</disk>
<!--disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source file='/home/jay/vm/windows.img'/>
<target dev='hda' bus='ide'/>
</disk-->
<!--disk type='file' device='cdrom'>
<source file='/home/jay/tmp/20121002/zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
</disk-->
<disk type='file' device='cdrom'>
<source file='/home/jay/tmp/20121002/virtio-win-0.1-30.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
</disk>
<interface type='bridge'>
<mac address='bd:4a:a2:97:bd:4c'/>
<source bridge='br0'/>
<model type='virtio'/>
</interface>
<graphics type='vnc' port='5988' listen='0.0.0.0' autoport='no' keymap='en-us' passwd='123456'/>
</devices>
</domain>

C. 安装windows系统的流程:
1. 安装系统时,应该配置成ide硬盘,保证兼容性。用xml配置iso,用cdrom引导
2. 安装windows比较慢,耐心一点
3. 系统安装完成后,关机,修改xml。保留ide硬盘,加一块临时的virtio硬盘,加网卡,cdrom改为virtio驱动的iso,修改启动顺序
4. 安装virtio硬盘和网卡的驱动
5. 删掉所有的光盘,删掉临时硬盘,把主硬盘驱动改为virtio模式

基本上,系统就算安装好了。

D. 桥接网络:
1. 修改/etc/network/interfaces,加入

auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

2. 配置完成后重启网络

/etc/init.d/networking restart

重启网络后,ifconfig可以看到br0代替了原来的eth0继续工作。
3. 重新启动虚拟机即可桥接方式连接物理机的网络了
此时虚拟机可以通过外面的dhcp分配到地址,而且外网也可以直接访问虚拟机,真是很方便呢~

E. 接下来就 Rock & roll 尽情的享受有虚拟机的生活了!

更多资料:

http://blog.chinaunix.net/uid-7934175-id-3276599.html

This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>