[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