:Ubuntu 9.04上的XEN虚拟服务器(二) 安装虚拟机

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 00:46:16

搞定XEN的安装之后,看着孤孤单单的Domain-0是不是想要给他找个伴呢?一步一步慢慢来嘛,接下来就新增一个虚拟机,跟Domain-0做个伴。

在XEN下新增虚拟机有各种各样的方法:从Domain-0文件直接复制可以;新建配置文件指向安装程序,用xm命令启动虚拟机安装也可以;用virt-inst脚本进行安装也行。条条大路通罗马呗。第一个虚拟机,就用最简单的virt-install脚本来安装吧。

在安装之前还要考虑的一点就是虚拟机的磁盘使用哪种方式。在前一篇文章里说过,可以用镜像文件来虚拟成磁盘或者直接给虚拟机一个LVM逻辑卷虚拟成磁盘。我个人比较偏向于使用LVM逻辑卷,因为一是在Domain-0的主机上无法看到Domain-U的文件,相对独立,可以避免一些误操作导致的虚拟机资料的丢失问题;二是个人认为直接给虚拟机使用LVM性能会较好。

所以,首先要做的就是划一个逻辑卷给虚拟机使用。

# sudo lvcreate -L 20G -n xenvm1 /dev/atomsvr

在这个例子里,我在/dev/atomsvr逻辑卷组里新建了一个20G的名为xenvm1的逻辑卷供虚拟机使用(新建逻辑卷前要确保逻辑卷组中有足够的未用空间)。新建完成后,可以使用lvdisplay来验证。

# sudo lvdisplay /dev/atomsvr/xenvm1
  --- Logical volume ---
  LV Name                /dev/atomsvr/xenvm1
  VG Name                atomsvr
  LV UUID                GI5MqK-yc8l-0Zcf-EnFA-KwfQ-YEsV-EBlpCa
  LV Write Access        read/write
  LV Status              available
  # open                 2
  LV Size                20.00 GB
  Current LE             5120
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:2

LV创建完成了,因为是给虚拟机虚拟成磁盘使用,而不是给Domain-0当文件系统挂载,因此我们不需要用mkfs来格式化文件系统。下一步就是安装virt-install和virsh等脚本。这些脚本是为了方便虚拟机的安装管理,使用python写的。

# sudo apt-get install python-virtinst libvirt-bin

在使用virt-install安装虚拟机前还需要打开xend服务的http服务模式,修改/etc/xen/xend-config.sxp。

# sudo vi /etc/xen/xend-config.sxp

找到 # (xend-http-server no),去掉注释符#修改为
(xend-http-server yes)

找到 # (xend-port            8000),去掉注释符#修改为
(xend-port            8000)

保存后重启xend服务。

# sudo /etc/init.d/xend restart

服务重启完成后,就开始正式安装操作系统了。安装操作系统也可以有很多方式,使用镜像文件中提取出来的文件安装,通过网络安装,等等。因为我要安装的操作系统是CentOS,所以使用最简单的通过网络安装。在国内CentOS 5.3 64位版本的网络安装源的地址在 http://centos.ustc.edu.cn/centos/5.3/os/x86_64/ ,因此使用virt-install创建虚拟机的参数如下:

# sudo virt-install -p --name=atom1 -l http://centos.ustc.edu.cn/centos/5.3/os/x86_64/ --file=/dev/atomsvr/xenvm1 --ram=512 --nographic --prompt

其中

  • -p 指定XEN虚拟为半虚拟模式(使用支持XEN的内核的虚拟模式)
  • -name=atom1 指定虚拟机的名称为atom1
  • -l http://centos.ustc.edu.cn/centos/5.3/os/x86_64/ 指定安装源地址
  • --file=/dev/atomsvr/xenvm1 指定虚拟成磁盘的设备或文件名,如果使用镜像文件虚拟成磁盘,就直接写上文件名
  • --ram=512 指定虚拟机内存为512M
  • --nographic 以文本方式执行安装
  • --prompt 如有交互问题则显示

如果不出意外的话,在下载了OS Kernel和ramfs文件后就顺利进行操作系统的安装了。安装系统前首先会询问网络的配置,请根据实际情况配置,如果不正确,将无法通过网络获取安装文件。在安装过程中,虚拟机会把我们提供的 /dev/atomsvr/xenvm1 逻辑卷虚拟成一个物理磁盘,因此在上面划分文件系统的时候就可以不必使用LVM了。

安装CentOS的步骤就不多说了,跟普通安装一样。安装完成后,系统会重启。但是这时候可能会发现virt-install脚本报错,虚拟机的系统也无法正常重启。

检查/etc/xen目录,发现virt-install没有成功创建名为atom1的虚拟机的配置文件。所以需要手工配置一个。首先使用xm list来查看虚拟机,如果atom1还存在(系统重启时未正常关闭,有残留),就需要先手动把它移除。

# sudo xm list
如果发现有atom1虚拟机,则进行下面的移除动作。
# sudo xm shutdown atom1
# sudo xm delete atom1

然后在/etc/xen下手工创建该虚拟机的配置文件。

# sudo vi /etc/xen/atom1
name    = "atom1"
memory  = "512"
disk    = [ 'phy:/dev/atomsvr/xenvm1,xvda,w', ]
vif     = [ 'mac=00:00:00:00:01:01, bridge=eth0', ]
vcpus   = 1
vfb = [ 'type=vnc,vncdisplay=10' ]
on_reboot = 'restart'
on_crash  = 'restart'
bootloader = "/usr/bin/pygrub"

非常简单,要说明的是:

  • disk 参数,phy:指的是使用设备,xvda则是将前面的LVM虚拟成的目标也就是虚拟磁盘xvda(类似于真实的物理硬盘sda)。如果使用的是镜像文件,就需要把phy:改成file:,后面跟上镜像文件的完整路径和文件名。
  • vif参数,设定了虚拟机的网络部分设置,mac则是虚拟机的虚拟网卡的mac地址,我随便写了一个假的,只要不和环境中的其他网卡有冲突就好,bridge则说明使用哪块真实网卡来桥接。
  • vcpus参数,说明了虚拟的CPU个数。
  • vfb参数,虚拟的显示设备(Frame Buffer),我使用了vnc作为输出,vncdisplay则间接的指定了vnc监听端口。设定完成后,我们可以用vnc客户端连接到Domain-0来查看Domain-U的图形界面。很拗口吧,的确是这样的,所有的虚拟机的vnc监听都是由Domain-0来完成的,在这里我们连接到Domain-0的5910端口就能看到atom1这个Domain的图形界面。为什么是5910呢,因为我们在这里设置了vncdisplay=10,每个Domain-U在Domain-0上的监听端口都是5900+vncdisplay的值。举例说明也许可以看得更清楚些:Domain-0的IP是192.168.1.20;atom1 (Domain-1) 的IP是192.168.1.21,vncdisplay=10;假设还有atom2 (Domain-2) IP为 192.168.1.22,vncdisplay=11。那么我们的VNC客户端连接到 192.168.1.20:5910 看到的是atom1的图形界面,连接到 192.168.1.20:5911就是atom2的图形界面。没错,VNC客户端永远是连接到Domain-0的IP,只是端口不同罢了。
  • on_reboot和on_crash指定了当系统发生相应事件时的动作。
  • bootloader,指定了pygrub等引导程序的路径。

保存这个文件后,我们使用如下命令就可以顺利启动虚拟机atom1了。

# sudo xm create atom1

使用 xm console 可以连接到虚拟机的console终端。

# sudo xm console atom1

不知道为什么,我尝试了很多次,都无法使用 xm create -c atom1 命令来在启动时自动连接console终端,系统总是报 pygrub未返回任何信息的错误。

对于关闭系统,可以使用终端或用ssh/telnet等软件连入虚拟机的系统使用shutdown命令正常关闭,也可以使用xm命令来关闭。

# sudo xm shutdown atom1

虚拟机可以正常使用了,但是要在Domain-0之外的主机通过VNC客户端来连接虚拟机还需要修改一下配置。因为xend的默认设置是只在Domain-0的localhost(127.0.0.1)监听vnc连接的,因此其他IP是无法接受VNC客户端的请求的。修改/etc/xen/xend-config.sxp文件。

# sudo vi /etc/xen/xend-config.sxp
找到# (vnc-listen '127.0.0.1'),去掉注释符#,并修改为
(vnc-listen '0.0.0.0')

保存后关闭所有虚拟机,重新启动xend服务,然后再打开虚拟机即可。

# sudo xm shutdown atom1
# sudo /etc/init.d/xend restart
# sudo xm create atom1

接着我们先在虚拟机上使用startx命令进入图形界面(如果有安装图形界面的话),然后就能用VNC客户端软件在其他主机连接Domain-0的5910端口来查看虚拟机上的图形界面啦。


使用VNC客户端连接到Domain-0的5910端口


透过VNC看到 atom1 虚拟机的桌面环境启动了


XEN的性能很不错,虚拟机开图形界面Domain-0性能不受任何影响

关于安装Domain-U虚拟机的这一部分就先写到这里,其他的方法和关于XEN的其他技巧等我实验过后慢慢再讲吧。以免又要被人说“天书”写太多……囧一个。


参考文档:

  • Ubuntu Community Documentation - Xen
  • 鳥哥的 Linux 私房菜:利用 Xen 設計虛擬機器 (该文章某些观点并不是很正确,请选择性学习)
  • Xen Installation Support
  • Xen Mini-HOWTOs
  • Installing Xen 3.3 With Kernel 2.6.27 On Ubuntu 8.10 (x86_64)
  • Managing Xen With Xen-Tools, Xen-Shell, And Argo
  • Use virt-install to install LVM based virtual machines (PVM)
  • Configuring a VNC based Graphical Console for a Xen Paravirtualized domainU Guest
  • Xen Domain Configuration File Overview