[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

CentOS 6 及 7 的 Xen4 xl 命令行工具

Xen 基本知识

当你完成基本安装 Xen4QuickStart 及设置网桥后(CentOS6CentOS7)(缺省网桥名为 xenbr0……但名称可任选),你已准备好应用 xen。其中一个做法就是配合 libvirt 采用 CentOS 提供的通用 VM 工具(见 Xen4Libvirt)。但内置的 libvirt 对 xen 不太友善,并且规制你只能执行 virsh、virt-manager 及 virt-install 理解的操作。这对 Xen 来说不够全面。

另一个选择就是采用 xen 所安装的 xl 程序(Xen4CentOS 版本已不再支持 xm)。

此页提供一个以 xl 在 CentOS-6 Dom0 机器上创建 CentOS-6 及 CentOS-7 DomU 的简单例子。

信息

请采用 xl info 命令取得有关你的安装的信息。以下是一个例子及输出:

[root@c6-xen-dom0 ~]# xl info

host                   : c6-xen-dom0
release                : 4.9.13-22.el6.x86_64
version                : #1 SMP Sun Feb 26 22:18:35 UTC 2017
machine                : x86_64
nr_cpus                : 6
max_cpu_id             : 5
nr_nodes               : 1
cores_per_socket       : 3
threads_per_core       : 2
cpu_mhz                : 3292
hw_caps                : 178bf3ff:2fd3fbff:00000000:00001700:16982203:00000000:01c9bfff:00000000
virt_caps              : hvm
total_memory           : 16340
free_memory            : 15133
sharing_freed_memory   : 0
sharing_used_memory    : 0
outstanding_claims     : 0
free_cpus              : 0
xen_major              : 4
xen_minor              : 6
xen_extra              : .3-8.el6
xen_version            : 4.6.3-8.el6
xen_caps               : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64 
xen_scheduler          : credit
xen_pagesize           : 4096
platform_params        : virt_start=0xffff800000000000
xen_changeset          : Wed Feb 15 02:12:22 2017 -0600 git:35503e1-dirty
xen_commandline        : dom0_mem=1024M,max:1024M cpuinfo com1=115200,8n1 console=com1,tty loglvl=all guest_loglvl=all
cc_compiler            : gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-17)
cc_compile_by          : mockbuild
cc_compile_domain      : centos.org
cc_compile_date        : Tue Feb 28 14:18:26 UTC 2017
xend_config_format     : 4

在此例子中,我们假设网桥名为 xenbr0。所有 VM 都会采用该网桥。以下是本样例在 CentOS6 内所运用的配置文件:

[root@c6-xen-dom0 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE="eth0"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
BRIDGE="xenbr0"
IPV6INIT=no


[root@c6-xen-dom0 ~]# cat /etc/sysconfig/network-scripts/ifcfg-xenbr0 
DEVICE="xenbr0"
BOOTPROTO=none
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Bridge"
IPADDR=192.168.0.9
PREFIX=24
GATEWAY=192.168.0.1
DNS1=8.8.8.8
DNS2=8.8.4.4
DEFROUTE=yes
IPV6INIT=no

下面是只备有 IPv4 样例机器的情况:

[root@c6-xen-dom0 ~]# ifconfig -a
eth0      Link encap:Ethernet  HWaddr D0:50:99:62:6C:43  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2206 errors:0 dropped:0 overruns:0 frame:0
          TX packets:714 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:208511 (203.6 KiB)  TX bytes:558027 (544.9 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

xenbr0    Link encap:Ethernet  HWaddr D0:50:99:62:6C:43  
          inet addr:192.168.0.9  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1515 errors:0 dropped:0 overruns:0 frame:0
          TX packets:716 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:102780 (100.3 KiB)  TX bytes:558321 (545.2 KiB)

你亦需要为你的 DomU VM 提供存储空间。你也可选择创建映像档作为碟盘,但本例子采用 LVM 上的逻辑磁盘区(LV)。

我个人喜欢以 LV 作为机器的碟盘,因为有问题时你可以简单地从 Dom0 机器挂载它们,有需要时它们亦能容易扩展。在多数 Linux 发行版本上,文件系统缺省亦会采用它。

CentOS-6 及 CentOS-7 缺省会为 /home 创建一个巨大的 LV。要是你拥有一个大的碟盘,你可以简单地收复空间作为 LV 供 xen 的碟盘用。你也可在另一个碟盘上为你的 LV 创建新的实体磁盘区及新的磁盘区群组。以下是对于在磁盘区群组内腾出空间及创建空白逻辑磁盘区的极佳参考数据(LVM 管理)。

在此样例中,我采用 CentOS-6 安装程序设立的缺省 VG,预留空间来创建新的逻辑磁盘区:

[root@c6-xen-dom0 ~]# vgdisplay
  --- Volume group ---
  VG Name               vg_c6xendom0
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               1.82 TiB
  PE Size               4.00 MiB
  Total PE              476806
  Alloc PE / Size       102006 / 398.46 GiB
  Free  PE / Size       374800 / 1.43 TiB
  VG UUID               vqWRX0-SZOy-pxRx-R3oN-O61F-vt1B-xLdgjT

我的 VG(名为 vg_c6xendom0)拥有 1.43 TB 的空间。

我利用 lvcreate 为将要进行的安装创建了两个 20GB 的 LV:

[root@c6-xen-dom0 ~]# lvcreate -L 20G -n c6-x8664-hvm vg_c6xendom0
  Logical volume "c6-x8664-hvm" created.


[root@c6-xen-dom0 ~]# lvcreate -L 20G -n c7-x8664-hvm vg_c6xendom0
  Logical volume "c7-x8664-hvm" created.

我们可以利用 lvdisplay 指令查看结果:

[root@c6-xen-dom0 ~]# lvdisplay

<other non xen stuff>

  --- Logical volume ---
  LV Path                /dev/vg_c6xendom0/c6-x8664-hvm
  LV Name                c6-x8664-hvm
  VG Name                vg_c6xendom0
  LV UUID                ojMKYF-UvDC-lq7i-C0HO-G1I2-qo5o-QocEHU
  LV Write Access        read/write
  LV Creation host, time c6-xen-dom0, 2017-03-07 23:50:31 -0600
  LV Status              available
  # open                 0
  LV Size                20.00 GiB
  Current LE             5120
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     4096
  Block device           253:3
   
  --- Logical volume ---
  LV Path                /dev/vg_c6xendom0/c7-x8664-hvm
  LV Name                c7-x8664-hvm
  VG Name                vg_c6xendom0
  LV UUID                YJEQVD-t1K9-mM2a-XyKW-2M5G-EreW-1dgIUL
  LV Write Access        read/write
  LV Creation host, time c6-xen-dom0, 2017-03-07 23:54:38 -0600
  LV Status              available
  # open                 0
  LV Size                20.00 GiB
  Current LE             5120
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     1024
  Block device           253:4

我们会以 ISO 安装 CentOS,因此我在 Dom0 机器上创建了 /opt/isos/ 目录,然后从 CentOS-6 镜站CentOS 7 镜站 下载 CentOS-6.8-x86_64-minimal.isoCentOS-7-x86_64-Minimal-1611.iso,它们是截至此文章时的最新版本。

Xen 的 VM 种类

VM 主要有 PV(半虚拟)及 HVM(全虚拟)这两种。另外还有混合选项。以下 Xen 概览对此有所讨论:Xen 概览。在此简单样例中,我们进行 HVM(全虚拟)安装,这是最简易的类型。

运用 xl

以下是来自 Xen 使用手册的 xl 文档:xl(1)

我们将会创建一台 CentOS-6 及 一台 CentOS-7 的 HVM。

首先每台 VM 需要一个配置文件。在 xen 组件内有一个名为 /etc/xen/xlexample.hvm 的 HVM 样例配置文件。你可以参阅该文件及以下的 HVM 文档:xl.cfg(5)

这里是我们的配置文件……我在 /etc/xen 创建了一个名为 config.d 的目录并将配置文件收录在内。

首先是 /etc/xen/config.d/c6-x8664.hvm.cfg

builder = "hvm"
name = "c6-x8664.hvm"
memory = 4096
vcpus = 2
serial='pty'
vif = [ 'mac=00:16:3E:29:00:00,bridge=xenbr0' ]
disk = [ 'phy:/dev/vg_c6xendom0/c68-x8664-hvm,xvda,rw', 'file:/opt/isos/CentOS-6.8-x86_64-minimal.iso,xvdb:cdrom,r' ]
boot = "dc"
sdl = 0
vnc = 1
vnclisten  = "192.168.0.9"
vncdisplay = 0
vncpasswd  = "supersecret"
stdvga=1
videoram = 64

还有 /etc/xen/config.d/c7-x8664.hvm.cfg

builder = "hvm"
name = "c7-x8664.hvm"
memory = 4096
vcpus = 2
serial='pty'
vif = [ 'mac=00:16:3E:29:00:01,bridge=xenbr0' ]
disk = [ 'phy:/dev/vg_c6xendom0/c73-x8664-hvm,xvda,rw', 'file:/opt/isos/CentOS-7-x86_64-Minimal-1611.iso,xvdb:cdrom,r' ]
boot = "dc"
sdl = 0
vnc = 1
vnclisten  = "192.168.0.9"
vncdisplay = 1
vncpasswd  = "supersecret"
stdvga=1
videoram = 64

这参详上述 xl.cfg(5) 连结有关各选项的意思,但重点是:

我们会从每个版本的 ISO 进行标准的 CentOS 安装。

xl create

引导 CentOS-6 VM 的指令是:

xl create /etc/xen/config.d/c6-x8664.hvm.cfg

连接到 192.168.0.9 的 5900 端口并进行标准安装。我从一台 CentOS-7 工作台利用以下指令连接并进行安装:

remote-viewer vnc://192.168.0.9:5900

(坊间有很多 VNC 客端,你可以从 Windows 或 Mac 机等连接)

你可用以下指令开始 CentOS-7 的安装:

xl create /etc/xen/config.d/c7-x8664.hvm.cfg

你可以这样连接到该台 VM:

remote-viewer vnc://192.168.0.9:5901

安装完成后,你需要编辑 /etc/xen/config.d/c6-x8664.hvm.cfg(及 c7-x8664.hvm.cfg)并将开机次序改为 boot="c",这样便能以碟盘而不是光盘开机。

半虚拟化

选用半虚拟化(PV)或 PV-on-HVM(PVHVM)

PV-on-HVM(PVHVM)

这里有 PV-on-HVM 的详细讨论(连结),及实例(连结)。简单来说,你只需在上述 HVM 配置文件加入 xen_platform_pci=1 便能采用 PVHVM。

半虚拟化(PV)

CentOS-6 及 CentOS-7 的内核缺省是不兼容半虚拟化的。你可以在 DomU 内采用 Dom0 内核,并于安装完成后通过修改配置文件启用 PV。

要是你有意这样做,以下是一些注意事项:

1. 你 不能 进行缺省安装,因为 Xen PV 机器的开机分区不能采用 XFS 文件系统……这是 CentOS 的缺省值。请在 CentOS 安装程序内手动创建一个 ext4 的 /boot 分区。

2. 切勿在 CentOS 安装程序内以 LVM 分区作为开机分区……请采用标准分区。

3. 要是你完成了上述事情,你便能创建一个 PV 配置文件,然后以 PV 模式从该分区开机。下面是一个供 c7-x8664.hvm DomU 用的样例,名为 /etc/xen/config.d/c7-x8664.pv.cfg

bootloader = "/usr/lib/xen/bin/pygrub"
name = "c7-x8664.pv"
memory = 4096
vcpus = 2
vif = [ 'mac=00:16:3E:29:00:01,bridge=xenbr0' ]
disk = [ 'phy:/dev/vg_c6xendom0/c73-x8664-hvm,xvda,rw' ]
vfb = [ 'type=vnc,vncdisplay=1,vncpasswd=supersecret' ]

假如你遵从上述所有规则(以 xen dom0 内核替换 CentOS-7 安装的内核,/boot 禁用 xfs 文件系统,/boot 禁用 LVM,等……),该机器将会以 PV 模式引导。当然,由于碟盘是共享的,你可以 同时 运行 HVM 及 PV 实例。你也可单独执行它们。

要引导你的 PV DomU,请用此指令:

xl create /etc/xen/config.d/c7-x8664.pv.cfg

Translation of revision 10


2023-09-11 07:23