KVM以及virsh比较详细的说明·[转]

我这里的环境和下面转载的文章中的环境有所不一样:

我的host主机是centos6,原本计划也是安装的ubuntu服务器版的。结果弄了近一天,查了无数资料,不得不面对一个显示,钠就是ubuntu11.04 server版的对RAID5的支持太差了,或者说基本不支持。只好又老老实实的装成了centos6 64bit

guest准备弄2003


最近远程管理着一台HP DL系列的服务器,硬件支持虚拟化,所以准备用kvm将其榨干,虚拟出多台服务器。
HOST操作系统:ubuntu server 10.04.2 64bit
客户机操作系统:1.win2003 sp2 32bit
2.debian 6.0.1a 32bit
预期:
1.职能划分 HOST操作系统专职伺候GUEST操作系统,具体的应用放在GUEST操作系统中。
2.网络预期 HOST操作系统和各个GUEST操作系统采用桥接方式,静态分配IP,处在同一网段。为了方便叙述,假定HOST的IP为10.3.1.35,两个GUEST的IP分别为10.3.1.36和10.3.1.37.
3.数据共享 实现HOST和GUEST之间的数据共享。
4.管理 方便管理,最好有远程管理工具。
步骤:
1.前期准备条件:
最小化安装ubuntu server 10.04.2 64bit(已经自带部分KVM),软件安装请参考本站置顶贴(http://forum.ubuntu.org.cn/viewtopic.php?f=65&t=154792),由于整个过程是不断摸索,所以有些软件安装的具体过程没有留下记录。
但必须安装kvm,qemu-kvm,libvirt-bin

代码:

sudo apt-get install kvm libvirt-bin python-virtinst bridge-utils

安装完了后,要将自己的用户名加入到libvirtd组中

代码:

sudo adduser $USER libvirtd

$USER是你自己的用户名
为了方便管理guest,ubuntu server最好装一下acpid

代码:

sudo aptitude install acpid

-.-!为什么没用apt-get 呢。。。
2.配置桥接
这一部分最迷惑人,最开始参考的是置顶贴,但其中的一句话理解错误“根据你的情况加入以下内容:”导致第一次配网络与服务器失去连接,到机房重启才继续进行,注意,这里的“加入”应该为“更改为”,可参考此贴http://hi.baidu.com/huakaiweizhi/blog/item/b53b16ced4ead72cb700c844.html
具体步骤:
a.修改interfaces

代码:

sudo vim /etc/network/interfaces

本人原始配置

代码:

auto eth0
iface eth0 inet static
address 10.3.1.35
netmask 255.255.255.192
network 10.3.1.68
broadcast 10.3.1.127
gateway 10.3.1.129

dns-* options are implemented by the resolvconf package, if installed

dns-nameservers 10.1.0.40
dns-search ubuntu
修改之后的配置

代码:

auto lo
iface lo inet loopback

The primary network interface

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
address 10.3.1.35
netmask 255.255.255.192
network 10.3.1.68
broadcast 10.3.1.127
gateway 10.3.1.129

dns-* options are implemented by the resolvconf package, if installed

dns-nameservers 10.1.0.40
dns-search ubuntu

bridge_ports eth0
bridge_stp off
bridge_maxwait 5
bridge_fd 0


b.重启网络,使配置生效

代码:

sudo /etc/init.d/networking restart

注意:对于远程操作者而言,这一步一定要谨慎操作,避免与服务器失去联系。
c.重启后,用ifconfig检查

代码:

ifconfig

正常的话,eth0应该不再有IP,虚拟的桥接网卡br0应该接管了eth0的配置,并将数据转到eth0
我的显示:

代码:

br0 Link encap:以太网 硬件地址 00:1b:78:9b:c1:5e
inet 地址:10.3.1.35 广播:10.3.1.127 掩码:255.255.255.192
inet6 地址: fe80::21b:78ff:fe9b:c15e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:9989322 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:11703348 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:5763086071 (5.7 GB) 发送字节:7809744229 (7.8 GB)

eth0 Link encap:以太网 硬件地址 00:1b:78:9b:c1:5e
inet6 地址: fe80::21b:78ff:fe9b:c15e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:12338743 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:11084473 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:8041899891 (8.0 GB) 发送字节:5870981468 (5.8 GB)
中断:16 Memory:f8000000-f8012800

lo Link encap:本地环回
inet 地址:127.0.0.1 掩码:255.0.0.0
inet6 地址: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 跃点数:1
接收数据包:194873 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:194873 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:123538384 (123.5 MB) 发送字节:123538384 (123.5 MB)


至此,桥接网络成功

3.安装GUEST(以win2003为例)
准备工作:将win2003的安装镜像放到服务器目录中,假定放在/home/darkofday/win2003.iso;假定安装好的虚拟磁盘位于/home/kvm/win2003/win2003.img
a.服务器端操作启动安装
远程到服务器,用virt-install启动安装:

代码:

sudo virt-install –connect qemu:///system -n win2003 -r 1024 –vcpus=2 –disk path=/home/kvm/win2003/win2003.img,cache=writeback,size=90 -c /home/darkofday/win2003.iso –vnc –noautoconsole –os-type windows –accelerate –network=bridge:br0,model=rtl8139 –hvm –os-variant=win2k3

这一步(如果用kvm命令,也有可能出现)如果出现如下错误提示:

代码:

pci_add_option_rom: failed to find romfile “pxe-rtl8139.bin”
inet_parse: ipv4 parse error (100)

执行如下命令可修复

代码:

sudo apt-get install kvm-pxe

说明:

代码:

–connect qemu:///system

是将画面连接到qemu:///system服务,以便在远程计算机上用virt-viewer控制安装过程。

代码:

-n win2003

这个是给GUEST取一个名字,很有用,以便virt-viewer连接,同时方便用virsh管理

代码:

–disk path=/home/kvm/win2003/win2003.img,cache=writeback,size=90

指定将安装好的虚拟磁盘置于/home/kvm/win2003/win2003.img,大小90G;这个地方不需要事先创建虚拟磁盘,与qemu-kvm不同,如果没有事先创建,该命令会自动创建。

代码:

–network=bridge:br0,model=rtl8139

将guest的网络桥接到br0,网卡选rtl8139,当然也可以选择其它型号的虚拟网卡,具体可参考man virt-install
b.在自己的电脑(desktop)上远程控制安装过程
执行上述命令后,服务器端就已经启动安装过程了,此时,你需要一台电脑(linux操作系统,带桌面的,可以用自己的笔记本)来控制安装过程。您需要先在desktop上安装virt-viewer:

代码:

sudo apt-get install virt-viewer

然后,启用root窗口

代码:

su

远程连接到服务器安装过程

代码:

virt-viewer –connect qemu+ssh://[email protected]/system win2003

在这个过程中,需要输入两次服务器端的root密码,如果服务器端没有设置root密码,可以用如下命令设置

代码:

sudo passwd root

安装好win2003后,就可以设置网络了,设置好网络后,guest就可以与外界自由联通了,这时也可以不通过virt-viewer,而直接通过远程桌面连接管理win2003了。(本人在此处走了弯路,由于用了一个有问题的win2003安装镜像,装好后,不管如何设置,找了N多资料,网络死活不通,想死的心都有了,一两天后才意识到可能是镜像的问题,换了个镜像文件,立马好了,尼玛啊~~~)
本段参考资料:http://www.howtoforge.com/installing-kvm-guests-with-virt-install-on-ubuntu-8.10-server

4.服务器端管理guest
服务器端用virsh管理guest,有人可能想要一个和vmware-server类似的web管理界面,其实有的,甚至有基于kvm,做的和vmware-esx类似的虚拟机操作系统,还有分布式管理的,但管理一台服务器的话,还是virsh省心,可以参考:http://www.linux-kvm.org/page/Management_Tools
执行以下命令,就可以进入virsh

代码:

virsh

virsh的具体命令可以参考其帮助,也可以参考网上的,不过最常用的也就这么几个:

代码:

help

简易帮助文档

代码:

list

列出通过virt-install 安装的,正在运行的guest。

代码:

list –all

列出所有guest

代码:

start win2003

启动一个guest,比如win2003

代码:

shutdown win2003

关闭一个guest,比如win2003

代码:

destroy win2003

彻底关闭一个guest,包括释放其占用的资源,不影响虚拟磁盘本身,还可以通过start命令启动guest。

5.服务器host和guest之间共享数据
如果guest是linux,可以通过设置NFS来实现;如果guest是windows,也可以安装NFS服务来实现,不过要麻烦的多。我现在主要是guest中需要获取host中存放的软件,是通过virsh附加device实现将数据单向传送到win2003中的,觉得通过virsh也可以实现双向,但还没有摸透。先说说单向的吧。
首先,我实现的是把服务器上的镜像文件(iso或其它可以mount的文件),通过给win2003附加cdrom的方式单向共享。如果文件不是iso格式,可以通过mkisofs来制作,很简单。先安装mkisofs

代码:

sudo apt-get install mkisofs

然后将/home/darkofday/share/sql2005x86.rar(也可以是文件夹)文件制作成/home/darkofday/sql2005.iso

代码:

mkisofs -r -o /home/darkofday/sql2005.iso /home/darkofday/share/sql2005x86.rar

ISO文件制作好了。然后进入virsh

代码:

virsh

给win2003附加cdrom(注意,win2003必须是开机状态才能附加,不然会报错)

代码:

attach-disk win2003 /home/darkofday/sql2005.iso hdc –mode readonly –driver file –type cdrom

附加成功。