Xen中半虚拟化的创建与配置

引言

本文介绍了在Xen4.6平台上使用命令行创建半虚拟化Ubuntu的domU客户机过程,使用Xen4.6的dom0运行在CentOS6.9上。本文使用的是Xen安装附带的xl程序(Xen4CentOS版本已经不再支持xm)。

如果要使用virt-manager安装,可以参考CentOS官网上的《采用LibVirt/Virt-install及Virt-Manager来管理xen4centos》,也可以参考我的另外一篇博客《Xen使用virt-manager创建虚拟机》,半虚拟化的创建与完全虚拟化的创建过程基本相似,若是想采取完全虚拟化的安装,可以参考《Xen使用命令行创建虚拟机》。

安装准备

假设你已经按照CentOS官方推荐的 Xen4CentOS6或者 Xen made Easy官方提供的解决方案安装了一个 Xen 内核,Xen安装成功以后,需要对网络进行配置,假设已经按照CentOS官网的 桥接方式对网络配置好了(默认网桥名称是xenbr0),也可以参考我的另外一篇博客《 在 CentOS6上为Xen设置桥接网络》。

创建domU使用的逻辑卷分区

首先需要创建domU使用的逻辑卷分区LV(Logical Volume),这要求在进行dom0安装时进行逻辑卷组VG(Volume Group)的创建或在新的硬盘分区上进行创建,我在CentOS dom0安装时预留了用于domU使用的逻辑卷组VG_CentOS。

然后使用lvcreate创建Dom U所需的逻辑分区

[root@bogon xen]# lvcreate -L 100G -n xen_centos_pv VG_CentOS    
 Logical volume "xen_centos_pv" created 
[root@bogon xen]# lvdisplay /dev/VG_CentOS/xen_centos_pv 
  --- Logical volume ---
  LV Path                /dev/VG_CentOS/xen_centos_pv
  LV Name                xen_centos_pv
  VG Name                VG_CentOS
  LV UUID                A9FR3Q-uhwH-Xc2g-6Nk0-KShV-i4iS-qZ7WvQ
  LV Write Access        read/write
  LV Creation host, time bogon, 2017-08-21 10:57:03 +0800
  LV Status              available
  # open                 0
  LV Size                100.00 GiB
  Current LE             25600
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:5
若是不使用逻辑卷管理当作Dom U的硬盘也是可以的,CentOS官网是采用映像文件来作为 Dom U的硬盘,详情可参考《 创建及安装一台CentOS 5 domU》。

准备镜像及配置文件

安装需要用到 DomU 的 initrd 映像及内核,可以将它们放在一个合适的目录,并将它们改为恰当的名称。我把相关文件放置在了/srv/centos-pv目录下。

[root@bogon ye]# cd /srv/centos-pv/
[root@bogon centos-pv]# ls
initrd.img  vmlinuz

CentOS的initrdy映像和内核可以到这里下载:http://mirrors.sohu.com/centos/6/os/x86_64/images/pxeboot

然后我们需要为每个虚拟机配置文件。在安装成功Xen后有一个名为/etc/xen/xlexample.pvlinux的半虚拟化配置的示例文件,参照这个配置文件,我在/srv/xen/ 目录下创建了这个虚拟机的配置文件。

[root@bogon xen]# cat centos-pv.cfg 
kernel = "/srv/centos-pv/vmlinuz"
ramdisk = "/srv/centos-pv/initrd.img"
name = "centos-pv"
memory = "1024"
disk = [ 'phy:/dev/VG_CentOS/xen_centos_pv,xvda,w']
vif = [ 'bridge=xenbr0']
vcpus=1
on_reboot = 'destroy'
on_crash = 'destroy'
sdl = 0  
vnc = 1  
vnclisten  = "127.0.0.1"  
vncdisplay = 0  
vncpasswd  = 123456789  
stdvga=1  
videoram = 64 
各个选项什么意思可以参考Xen官网的说明手册: xl.cfg(5),但要注意以下几点:

1. on_reboot和on_crash的参数都是destroy是指当Dom U关机或者重启时“摧毁”这个Dom U(有点像物理机强制关机的意思),以便再安装完成后对Dom U重新配置。

2. disk选项我这里使用的是逻辑卷,也可以使用其他的方式当做Dom U的磁盘。

3. 我是使用VNC对虚拟机进行安装,VNC的配置可以参考《Linux中VNC的安装与配置》。当然也可以使用文本模式安装或者使用kickstart自动进行安装。

到此虚拟机就已经创建好了。

启动虚拟机

使用xl命令可以启动虚拟机

[root@bogon xen]# xl list
Name                                        ID   Mem VCPUs	State	Time(s)
Domain-0                                     0  1024     4     r-----    5367.5
[root@bogon xen]# xl create /srv/xen/centos-pv.cfg 
Parsing config from /srv/xen/centos-pv.cfg
[root@bogon xen]# xl list
Name                                        ID   Mem VCPUs	State	Time(s)
Domain-0                                     0  1024     4     r-----    5370.9
centos-pv                                    7   960     1     r-----       2.2
刚才创建的虚拟机已经启动了,这里我使用VNC进行控制Dom U。

[root@bogon xen]# xl vncviewer centos-pv
便可以进入Dom U的控制窗口了。
注意安装的时候选择URL进行安装,URL地址可以是: http://mirrors.sohu.com/centos/6/os/x86_64/

安装完成后,这个Dom U因为要重启而会被销毁。

安装后的配置修改

之前的配置文件是用于安装domU,安装完成以后需要修改配置文件。

[root@bogon xen]# cat centos-pv.cfg 
#kernel = "/srv/centos-pv/vmlinuz"
#ramdisk = "/srv/centos-pv/initrd.img"
name = "centos-pv"
memory = "1024"
disk = [ 'phy:/dev/VG_CentOS/xen_centos_pv,xvda,w']
bootloader = "pygrub"
vif = [ 'bridge=xenbr0']
vcpus=1
#on_reboot = 'destroy'
#on_crash = 'destroy'
sdl = 0  
vnc = 1  
vnclisten  = "127.0.0.1"  
vncdisplay = 0  
vncpasswd  = 123456789  
stdvga=1  
这个新的配置文件不会再使用内核和initrd映像。取而代之,它会使用pygrub为开机程序。pygrub会尝试在磁盘的分区内寻找一个有GRUB配置文件的文件系统,找到GRUB的配置文件,它便会被用来引导内核。

同时,你也会注意到开关机选项参数由destroy更改为默认,关机或重启Dom U后不会再被摧毁。


注意:主机与虚拟机直接的切换是使用快捷键:ctrl+]

遇到的问题:

1、pygrub启动失败,查看它的日志,报no module named xen.lowlevel.xc错误,可以修改pygrub,注释掉import xen.lowlevel.xc即可,详细参见这篇文章的解释。

2、pygrub启动失败,查看它的日志,报no module named fsimage错误,可以locate一下fsimage,看到它在/usr/local/lib64/python2.6/site-packages目录下,所以修改pygrub,在import fsimage前面添加:

sys.path = ['/usr/local/lib64/python2.6/site-packages'] + sys.path 

详细参见这篇博客里面的解释。


参考文献:

[1]. https://wiki.centos.org/zh/HowTos/Xen/InstallingCentOSDomU

[2]. http://blog.csdn.net/hustsselbj/article/details/45815175?locationNum=9

你可能感兴趣的:(Xen)