CentOS 6 及 7 的 Xen4 xl 命令行工具
Contents
Xen 基本知识
当你完成基本安装 Xen4QuickStart 及设置网桥后(CentOS6 或 CentOS7)(缺省网桥名为 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.iso 及 CentOS-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) 连结有关各选项的意思,但重点是:
- vnc listen 的 IP 地址是网桥的 IP,在此样例中为 192.168.0.9
boot 可用磁盘机(a)、硬盘(c)、网络(n)或光盘(d)……因此 dc 代表以光盘然后以硬盘开机。完成安装后我们会将它改为 boot="c"
- 我们可利用 vnc 客端连接到 192.168.0.9:5900(centos-6)及 192.168.0.9:5901(centos-7)。
我们会从每个版本的 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