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