在XEN虚拟化环境中创建PV模式虚拟机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在XEN虚拟化环境中创建PV模式虚拟机相关的知识,希望对你有一定的参考价值。

如何创建xen pv模式:

    1、kernel

    2、initrd或者initramfs

    3、DomU内核模块

    4、根文件系统

    5、swap设备


    将上述内容定义在DomU的配置文件

    注意:xm与xl启动DomU使用的配置文件略有不同

    对于xl而言,其创建DomU使用的配置指令可通过"man xl.cfg"获取

    常用指令:

        name:域唯一的名称

        builder:指明虚拟机的类型,generic表示pv,hvm表示hvm

        vcpus:虚拟cpu的个数

        maxcpus:最大虚拟cpu个数

        cpus:vcpu可运行于其上的物理CPU列表

        memory=MBYTES:内存大小

        maxmem=MBYTES:可以使用的最大内存空间

        on_poweroff:指明关机时采取的action,比如destory, restart, preserve

        on_reboot="ACTION":指明"重启"DomU时采取的action

        on_crash="ACTION":虚拟机意外崩溃时采取的action

        uuid:DomU的唯一标识

        disk=[ "DISK_SPEC_STRING", "DISK_SPEC_STRING", ...]:指明磁盘设备,列表

        vif=[ "NET_SPEC_STRING", "NET_SPEC_STRING", ...]:指明网络接口,列表

        vfb=[ "VFB_SPEC_STRING", "VFB_SPEC_STRING", ...]:指明virtual frame buffer, 列表

        pci=[ "PCI_SPEC_STRING", "PCI_SPEC_STRING", ...]:pci设备的列表


    PV模式专用指令:

        kernel="PATHNAME":内核文件路径,此为Dom0中的路径

        ramdisk="PATHNAME":为kernel指定内核提供的ramdisk文件路径

        root="STRING":指明根文件系统

        extra="STRING":额外传递给内核引导时使用的参数

        bootloader="PROGRAM":如果DomU使用自己的kernel及ramdisk,此时需要一个Dom0中的应用程序来实现其bootloader功能


    磁盘参数指定方式: 

        [<target>,[<format>,[<vdev>,[<access>]]]]

            <target>表示磁盘映像文件或设备文件路径,如/images/xen/linux.img, /dev/myvg/linux

            <format>表示磁盘格式,如果映像文件,有多种格式,例如raw, qcow, qcow2

            vdev:此设备在DomU被识别为硬件设备类型,支持hd[x], xvd[x], sd[x]

            access:访问权限

                ro, r:只读

                rw, w:读写

        例如:disk=[ "/images/xen/linux.img, raw, xvda, rw", ]


        使用qemu-img管理磁盘映像:

            create [-f fmt] [-o options] filename [size]

            可创建sparse格式的磁盘映像文件


如何配置网络接口:

        vif = [ '<vifspec>','<vifspec>', ... ]

        vifspec:[<key>=<value>|<flag>,]

        常用的key:

            mac=:指定mac地址,要以"00:16:3e"开头

            bridge=<bridge>:指定此网络接口在Dom0被关联至哪个桥接设备上

            model=<model>:

            vifname=:接口名称,在Dom0中显示的名称

            script=:执行的脚本

            ip=:指定ip地址,会注入到DomU中

            rate=:指明设备传输速率,通常为"#UNIT/s"格式

                UNIT: GB, MB, KB, B

                       Gb, Mb, Kb, b

        例如:vif = [ 'bridge=xenbr0' ]


创建一个PV格式的vm:

    (1) 准备磁盘映像文件

        qemu-img create -f raw -o size=2G /images/xen/busybox.img 

        mk2fs -t ext /images/xen/busybox.img 

    (2) 提供根文件系统

        编译busybox, 并复制到busybox.img映像中

        mount -o /images/xen/busybox.img /mnt

        cp -a $BUSYBOX/_install/* /mnt 

        mkdir /mnt/{proc,sys,dev,var}

    (3) 提供DomU配置文件

        name = "busybox-001"

        kernel = "/boot/vmlinuz"

        ramdisk = "/boot/initramfs.img"

        extra = "selinux=0 init=/bin/sh"

        memory = 256

        vcpus = 2

        disk = [ '/images/xen/busybox.img,raw,xvda,rw' ]

        root = "/dev/xvda ro"

    (4) 启动实例

        xl [-v] create <DomU_Config_file> -n

        xl create <DomU_Config_file> -c

注:因为编译busybox需要安装Linux开发库,且需要图形界面,所以这里不进行busybox的演示,有需要可以去看马哥Linux培训视频。当然,你也可以参照如下链接:https://blog.csdn.net/qq_33932782/article/details/53983726?locationNum=2&fps=1


创建PV模式的ubuntu虚拟机:

1、安装LVM

[[email protected] xen]# yum -y install lvm2 lvm2-devel

2、创建卷组和逻辑卷

[[email protected] xen]# mkdir /mnt/vmdisk

[[email protected] xen]# dd if=/dev/zero of=/mnt/vmdisk/mydisk1 bs=100M count=10

记录了10+0 的读入

记录了10+0 的写出

1048576000字节(1.0 GB)已复制,26.7937 秒,39.1 MB/秒

[[email protected] xen]# losetup /dev/loop1 /mnt/vmdisk/mydisk1 

[[email protected] xen]# pvcreate /dev/loop1 

  Physical volume "/dev/loop1" successfully created

[[email protected] xen]# pvs

  PV         VG   Fmt  Attr PSize    PFree   

  /dev/loop1      lvm2 ---- 1000.00m 1000.00m

[[email protected] xen]# vgcreate -s 512M myvg01 /dev/loop1 

  Volume group "myvg01" successfully created

[[email protected] xen]# vgs

  VG     #PV #LV #SN Attr   VSize   VFree  

  myvg01   1   0   0 wz--n- 512.00m 512.00m

[[email protected] xen]# lvcreate -L 512M -n mylv01 myvg01

  Logical volume "mylv01" created.

[[email protected] xen]# lvs

  LV     VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

  mylv01 myvg01 -wi-a----- 512.00m 

3、下载网络启动映像

[[email protected] xen]# mkdir -p /var/lib/xen/images/ubuntu-netboot

[[email protected] xen]# cd /var/lib/xen/images/ubuntu-netboot/

[[email protected] ubuntu-netboot]# wget http://mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/xen/vmlinuz

wget http://mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/xen/initrd.gz

[[email protected] ubuntu-netboot]# ll

总用量 26404

-rw-r--r--. 1 root root 21256771 4月  16 2014 initrd.gz

-rw-r--r--. 1 root root  5778968 4月  16 2014 vmlinuz

4、创建虚拟机配置文件

[[email protected] ubuntu-netboot]# vi /etc/xen/ubuntu.cfg 

[[email protected] ubuntu-netboot]# cat /etc/xen/ubuntu.cfg 

name = "ubuntu-vm1"

memory = 512

disk = [ 'phy:/dev/myvg01/mylv01,xvda,w' ]

vif = [ 'bridge=br0' ]

kernel = "/var/lib/xen/images/ubuntu-netboot/vmlinuz"

ramdisk = "/var/lib/xen/images/ubuntu-netboot/initrd.gz"

extra = "debian-installer/exit/always_halt=true  --console=hvc0"

5、启动虚拟机

[[email protected] ubuntu-netboot]# xl create -c /etc/xen/ubuntu.cfg

6、查看虚拟机状态 

[[email protected] ~]# xl list

Name                                        ID   Mem VCPUsStateTime(s)

Domain-0                                     0  1024     1     r-----     117.0

ubuntu-vm1                                   1   512     1     --p---       0.0

技术分享图片



技术分享图片

技术分享图片


技术分享图片


技术分享图片

6、待系统安装完成后,修改虚拟机配置文件

[[email protected] xen]# vi /etc/xen/ubuntu.cfg 

[[email protected] xen]# cat /etc/xen/ubuntu.cfg 

name = "ubuntu-vm1"

memory = 512

disk = [ 'phy:/dev/myvg01/mylv01,xvda,w' ]

vif = [ 'bridge=br0' ]

#kernel = "/var/lib/xen/images/ubuntu-netboot/vmlinuz"

#ramdisk = "/var/lib/xen/images/ubuntu-netboot/initrd.gz"

bootloader = "/usr/lib/xen/bin/pygrub"

#extra = "debian-installer/exit/always_halt=true  --console=hvc0"

[[email protected] xen]# xl create /etc/xen/ubuntu.cfg 

Parsing config from /etc/xen/ubuntu.cfg

[[email protected] xen]# xl list

Name                                        ID   Mem VCPUsStateTime(s)

Domain-0                                     0  1024     1     r-----     465.7

ubuntu-vm1                                   9   512     1     r-----       4.6

[[email protected] xen]# xl console 9

注意事项:

如果出现如下错误:

[[email protected] ubuntu-netboot]# xl create -c /etc/xen/ubuntu.cfg 

Parsing config from /etc/xen/ubuntu.cfg

xenconsole: Could not read tty from store: Success

问题原因: 

xenconsoled守护进程未启动,在指定-c创建虚拟机之前,启用该守护进程可以解决该错误。

解决方法:

[[email protected] ubuntu-netboot]# /usr/sbin/xenconsoled --pid-file=/var/run/xenconsoled.pid

[[email protected] ubuntu-netboot]# ps -ef|grep xenconsoled

root      4793     1  0 23:58 ?        00:00:00 /usr/sbin/xenconsoled --pid-file=/var/run/xenconsoled.pid

root      4796  3194  0 23:58 pts/0    00:00:00 grep xenconsoled

参照:https://tipstricks.itmatrix.eu/ubuntu-16-10-xenconsole-could-not-read-tty-from-store-success/  (国外站点)


创建PV模式的CentOS虚拟机:

1、创建虚拟机磁盘文件

[[email protected] ~]# mkdir -p /images/xen/

[[email protected] ~]# touch /images/xen/centos

[[email protected] ~]# dd if=/dev/zero of=/images/xen/centos bs=1024M count=10

2、创建目录并下载网络启动映像

[[email protected] ~]# mkdir -p /var/lib/xen/images/centos 

[[email protected] ~]# cd /var/lib/xen/images/centos/

[[email protected] centos]# wget https://mirrors.aliyun.com/centos/6/os/x86_64/images/pxeboot/vmlinuz

[[email protected] centos]# wget https://mirrors.aliyun.com/centos/6/os/x86_64/images/pxeboot/initrd.img

[[email protected] centos]# ll

总用量 36636

-r--r--r--. 1 root root 33383679 7月  17 2017 initrd.img

-r-xr-xr-x. 1 root root  4128368 7月  17 2017 vmlinuz

3、创建虚拟机配置文件

[[email protected] centos]# cat /etc/xen/centos6.5.cfg 

name = "centos6.5"

vcpus = 1

memory = 512

disk = [ 'file:/images/xen/centos,xvda,w' ]

vif = [ 'bridge=br0' ]

on_reboot = "restart"

on_poweroff = "destroy"

on_crash = "restart"

kernel = "/var/lib/xen/images/centos/vmlinuz"

ramdisk = "/var/lib/xen/images/centos/initrd.img"

4、启动虚拟机

[[email protected] centos]# xl create -c /etc/xen/centos6.5.cfg

5、安装操作系统

技术分享图片技术分享图片

技术分享图片技术分享图片

技术分享图片

6、修改虚拟机配置文件

[[email protected] xen]# vi /etc/xen/centos6.5.cfg 

[[email protected] xen]# cat /etc/xen/centos6.5.cfg 

name = "centos6.5"

vcpus = 1

memory = 512

disk = [ 'file:/images/xen/centos,xvda,w' ]

vif = [ 'bridge=br0' ]

on_reboot = "restart"

on_poweroff = "destroy"

on_crash = "restart"

#kernel = "/var/lib/xen/images/centos/vmlinuz"

#ramdisk = "/var/lib/xen/images/centos/initrd.img"

bootloader = "pygrub"

7、使用新的配置文件创建虚拟机并连接

[[email protected] xen]# xl create /etc/xen/centos6.5.cfg 

Parsing config from /etc/xen/centos6.5.cfg

[[email protected] ~]# xl list

Name                                        ID   Mem VCPUsStateTime(s)

Domain-0                                     0  1024     1     r-----    1277.9

centos6.5                                   17   512     1     -b----      13.0

ubuntu-vm1                                  18   512     1     -b----       8.5

[[email protected] ~]# xl console 17

技术分享图片




以上是关于在XEN虚拟化环境中创建PV模式虚拟机的主要内容,如果未能解决你的问题,请参考以下文章

7xen虚拟机开机自启动配置

给xen虚拟机添加硬盘分区格式化

xen实现pv模式

Xen server虚拟化中虚拟机磁盘文件丢失的处理办法

Paravirtualization (半虚拟化PV) - Xen

Xen搭建虚拟机实现VNC访问