初探 Xen

Xen 的效能為什麼能夠這麼好? Xen 在使用上面有什麼樣的限制?我的一部主機最多可以支援幾個 Xen 的模擬環境? Xen 的模擬環境有幾種類型? 這些疑問我們都得要先知道一下才好! 當然,最好能夠有個簡單的小例子來處理 Xen 的模擬環境囉。


Xen 的虛擬類型與特色

Xen 這套自由軟體在虛擬機器的模擬類型方面主要分為半虛擬化 (Para-virtualization) 及全虛擬化 (Full virtualization) 兩種,其中半虛擬化主要是透過修改 Linux 核心來達成的虛擬技術。 半虛擬化技術所產生的虛擬機器需要與原本的作業系統相同較佳。使用半虛擬化的環境所具備的特色有: (註5)

  • 虛擬機器的運作效率與實體機器的效能相當;

  • 最多可支援到具有 32 顆以上 CPU 的主機環境;

  • 支援 x86/32, x86/32 含 PAE 技術, 及 x86/64 的硬體平台環境;

  • 良好的硬體驅動程式支援,幾乎支援所有的 Linux 裝置之驅動程式;

Xen 的半虛擬化技術主要是用在相同版本的 Linux 上面,也就是說,如果妳想要使用半虛擬化的方式啟動多個虛擬機器, 那麼那些虛擬機器全部都必須是相同的作業系統,甚至要求相同版本與相同核心的 Linux distribution 喔。

如果妳想要安裝不同版本的 Linux 或者是其他的 OS (例如 Windows XP) 時,就得要使用全虛擬化技術了。 但是全虛擬化技術是有其限制的,當你的硬體滿足下列需求時,全虛擬化技術才能夠動作:

  • 你的硬體支援 Intel 的 VT 技術 (Virtualization Technology, Intel-VT);

  • 你的硬體支援 AMD 的 SVM 技術 (Secure Virtual Machine, AMD-SVM or, AMD-V)。

此外,上面提到的 PAE 指的是 Intel 的實體位址延伸技術 (Physical Addressing Extensions, PAE), 這項技術可讓原本僅支援到 4GB 實體記憶體的 32 位元硬體平台,可支援到最大 64GB 的記憶體喔! 而且, Xen 幾乎可以在所有的 P-II 以上等級的硬體平台上面跑半虛擬化任務,如果不跑全虛擬化的話,其實效能確實是 OK 的啦!

近來由於虛擬機器軟體的流行,加上 x86 電腦效能與 CPU 運算核心單元的增加,兩大 x86 CPU 製造商 Intel/AMD 都發表了新的整合到 CPU 的虛擬技術,分別是 Intel 的 Vanderpool 虛擬技術以及 AMD 的 Pacifica 技術。 這些技術有的也支援 Xen ,這讓 Xen 的效能增進不少呢! ^_^


Xen 的運作環境解釋

在基礎學習篇裡面我們曾經談過硬體、核心與應用程式的關係, 所有的應用程式都是在核心層之上來完成的 (註6)。 然後透過核心功能去呼叫與使用硬體元件的命令。好了, 現在來仔細想一想,既然我有多個虛擬機器,每個虛擬機器的環境各別有自己的作業系統核心, 也就是有多個作業系統同時存在。如果所有的作業系統都能夠完整的控制硬體的話, 那麼硬體到底該接受誰的指令來運作?那個系統的指令會先被執行?這是很重要的問題, 因為如果這邊搞不定,那麼妳的硬體系統就只有當機一途。

為了解決這個問題,Xen 也分成多個層級 (layer) 來執行。他將 Linux 的核心修改過後, 再使用這個修改過後的核心開機,而開機後先載入 Xen 的監督器 (Hypervisor) , 並且啟動第一個在上頭的作業系統,我們稱他為 domain-0。 (在 Xen 上面所謂的一個 domain 就是一個虛擬機器囉!)

Domain-0 之所以要先被載入是因為 Domain-0 含有其他虛擬機器啟動所必須的控制指令, 並且 domain-0 也是控制虛擬裝置的重要主控系統。 在 domain-0 上頭最重要的就是一個 xend 的常駐程式,其他的 domain 都是由這個 xend 來管理的。 至於命名方面,除了 domain-0 之外的其他虛擬機器就依序被稱為 domain-1, domain-2 等等, 我們通稱為 domain-U 囉。這些咚咚的相關性有點像這樣:


圖 2-1、Xen Hypersvisor 的功能示意圖(註7)

由上圖我們知道 domain-0 真的是很重要的,因為他直接控制 Xen 的監督器 (Hypervisor),而且掌握了實際的 Linux 驅動程式 (drivers)。而其他的虛擬機器 (domain-U) 則是透過 Xen 監督器來與實際的硬體以及 domain-0 達成溝通。而為了讓 domain-0 能夠與 Xen 結合,我們必須要修改 domain-0 的核心才能夠順利運作。並且需要使用 domain-0 的核心來開機才可以。 domain-0 是所有虛擬機器的來源,所以他可以盡量簡單一點,其他的個別服務則可以放置到不同的 domain 當中了。

那個 xend 也是很重要的咚咚,他可以管理 domain-0 與其他 domain 之間的啟動與溝通, 可以提供一個終端機 (console) 介面來讓 domain-0 登入其他的 domain ,所以我們也必須要啟動這玩意兒才行。

早期 Xen 尚未被各 distribution 整合到各自的版本中時,使用者必須要由 Xen 的官方網站下載原始碼, 然後自行重新編譯核心以及編譯 Xen 軟體才行。說實在的,玩個 Xen 這麼麻煩,倒不如不要玩!^_^。 然而在 RHEL 5 (CentOS 5) 以後, Xen 已經包含在原始釋出的套件中了,所以我們直接用 yum 就能夠安裝妥當! 所以要搞定一部 Xen 的 domain-0 已經不再是不可能的任務囉!^_^

對於 Xen 的基本原理有一些認識之後,接下來就讓我們開始在 CentOS 5 上面進行一個小小的實驗吧!


確定你的硬體是否支援 Xen 的運作

雖然說目前的硬體都很新了,不過有的朋友使用的是舊的主機來安裝 Linux ,所以我們必須要留意你的硬體是否支援 xen 的運作。而我們知道 Xen 支援半虛擬化與全虛擬化兩種模式,兩種模式的需求為:

  • 半虛擬化 (Para-virtualization) 硬體需求:

    只要是 64 位元的 x86 主機 (x86_64) 都能夠支援半虛擬化的環境。如果是 32 位元的主機 (x86) 時, 該主機必須要支援的實體位址延伸技術 (PAE) 才能夠使用 xen 喔!那如何確認呢?很簡單,檢查 CPU 的參數即可:

    [root@linux ~]# cat /proc/cpuinfo | grep flags
    flags  : fpu tsc msr pae mce cx8 mtrr mca cmov pat pse36 mmx fxsr sse up
    

    嘿嘿!這一部主機是鳥哥的 P-III 800 主機,看吧!確實有支援 PAE 喔!所以當然可以玩 Xen 囉。

  • 全虛擬化 (Fully-virtualization) 硬體需求:

    如果妳需要全虛擬化的技術支援時,此時需要硬體有支援虛擬化技術才行。 目前在 x86 的主機當中, Intel 提供 VT 技術, AMD 則提供 SVM 技術。 這兩種技術在 CPU 的旗標分別是: Intel (vmx) 與 AMD (svm) 。 鳥哥在 Core Duo 主機上面的測試可以發現:

    在 Intel Core 2 Duo 的 CPU 主機上面測試 CPU 旗標:
    [root@linux ~]# cat /proc/cpuinfo | grep flags
    flags   : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
    # 瞧!是有那個 vmx 的支援啦!

    至於 AMD 的主機旗標則是:(下表感謝donyingle兄的提供!)

    在 AMD Athlon(tm) 64 X2 的 CPU 主機上面測試 CPU 旗標:
    [root@linux ~]# cat /proc/cpuinfo | grep flags
    flags   : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8legacy 3dnowprefetch ts fid vid ttp tm stc 100mhzsteps
    # 瞧!是有那個 svm 的支援啦!

    如果確定你的 CPU 有支援上述的條件後,嘿嘿!那我們就可以開始底下的遊戲啦!如果沒有支援呢? 那很抱歉,底下的資料看看就好!


所需要的 Xen 套件與核心

注意: 在開始安裝之前,請先參考前一小節以確定你的硬體已經支援 Xen 的半虛擬化功能了!

約略談了一下 Xen 的原理、特色之後,在開始玩弄 Xen 之前,我們得瞭解運作 Xen 所需要的各項套件,並且順利安裝後,才能夠使用的啊! ^_^。如同前一小節提到的, 要使用 Xen 半虛擬化 (Para-virtualization) 必須要修改核心才能夠順利的運作。 在以前的版本妳需要重新編譯核心,不過,在新的版本,例如 CentOS 5.x 底下,就已經將 Xen 的核心幫妳編譯好了!妳可以直接安裝即可。所以,妳需要安裝的套件主要有:

  • kernel-xen:修改的 Linux 核心,使可以跑 Xen 的環境;

  • xen:主要的 xen 套件,包括設定檔、啟動腳本、所需的基本函式庫等;

  • xen-libs:Xen 所需要的函式庫等;

  • python-virtinst:提供終端機安裝的軟體;

  • virt-manager:為一個圖形使用者介面軟體,可在圖形介面管理 xen 喔!

在 CentOS 5.x 的環境下,妳可以使用 yum 直接來安裝這幾個套件。安裝完畢後請務必使用新的核心開機! 以鳥哥的例子來說,我安裝了數個核心,包括 kernel-2.6.18-8.1.14.el5 及 kernel-xen-2.6.18-8.14.el5 , 所以在 grub 的設定檔當中會像這樣:

[root@linux ~]# vi /boot/grub/menu.lstdefault=0
timeout=5
splashp_w_picpath=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-8.1.14.el5xen)        root (hd0,0)        kernel /boot/xen.gz-2.6.18-8.1.14.el5        module /boot/vmlinuz-2.6.18-8.1.14.el5xen ro root=/dev/hda1 rhgb quiet        module /boot/initrd-2.6.18-8.1.14.el5xen.img
title CentOS (2.6.18-8.1.14.el5)root (hd0,0)kernel /boot/vmlinuz-2.6.18-8.1.14.el5 ro root=/dev/hda1 rhgb quietinitrd /boot/initrd-2.6.18-8.1.14.el5.img

妳必須要注意到,鳥哥使用的開機選單為第0個,亦即是 2.6.18-8.1.14.el5xen 那一個! 然後重新啟動這部 Linux 主機喔!啟動完成後,應該再次的確認一下是否為 xen 的核心才行!

[root@linux ~]# uname -r
2.6.18-8.1.14.el5xen# 仔細看,鳥哥的核心為新的 xen 的核心喔![root@linux ~]# chkconfig --list | grep xen
xend        0:off  1:off  2:on   3:on  4:on  5:on  6:off
xendomains  0:off  1:off  2:off  3:on  4:on  5:on  6:off
# Runlevel 3/5 的 xen 相關服務是有啟動的才行![root@linux ~]# pstree -p | grep xen|            |-xenbus(10)|            `-xenwatch(9)|-xenconsoled(2348)---{xenconsoled}(2349)|-xenstored(2340)
# 這樣看來,應該確實是有啟動的樣子喔!繼續最後一個確認![root@linux ~]# xm list
Name                  ID Mem(MiB) VCPUs State   Time(s)
Domain-0               0      462     1 r-----     49.2
# xm 為 Xen 的重要指令,list 為列出已經在跑的 xen 系統,預設有 domain-0 存在!

透過上面的測試,我們會知道 xen 確實已經順利的啟動,而且也啟動前面談到的那個重要的 domain-0 囉! 接下來我們再來聊一聊那 xen 的設定檔在哪裡?


  • xen 的套件結構

    我們前面談到過, Xen 在 domain-0 是由一個 xend 的服務所管理的,他可以用來啟動、關閉與連結到其他的 domain-U 當中。此外, Xen 亦提供許多的指令來讓系統管理員管理他們的 domain-U 啊!這些重要的啟動執行檔為:

    • /usr/sbin/xend:就是 xend 的啟動腳本,使用 python 程式語言寫成的;

    • /usr/sbin/xm:重要的管理 xen 的指令,可輸入 xm help 查詢用法。

    至於與 xen 有關的設定檔,包括一些模擬元件的啟動腳本都在 /etc/xen 底下,在這個目錄下的許多資料為:

    • /etc/xen/xend-config.sxp:這個重要!是 xend 的設定檔!內容包括 domain-0 的類型、網路的連結方式、 domain-0 的記憶體與CPU等資源配置、是否使用 vnc 作為 domain-U 的連線方式等等。 不過,鳥哥覺得,這個檔案不太需要更動,使用預設值就很夠用了。

    • /etc/xen/:裡面含有數個 domain-U 的設定檔範本,包括:xmexample1, xmexample.hvm。 其中,那個 xmexample.hvm 可作為完整模擬的參考範本喔!

    • /etc/xen/auto:如果妳想要在系統開機時就自動啟動某個 domain-U 的話,可以將該設定檔指定連結到這個目錄中。 舉例來說,如果妳要在開機後立即使用 /etc/xen/xmexample.hvm 設定檔來啟動某個 domain-U , 那可以這樣做:

      [root@linux ~]# cd /etc/xen/auto
      [root@linux auto]# ln -s ../xmexample.hvm .# 這只是個範例,妳可不要跟著做!因為 xmexample.hvm 還需要修改才能運作!
    • /etc/xen/scripts:這目錄有趣了!包括虛擬設備的啟動、虛擬網路的啟動、 虛擬橋接器的啟動等等,都是透過這目錄底下的所有檔案來達成的!

    在妳安裝完畢,並且使用新核心啟動後,接下來讓我們開始來處理一個小案例吧!


第一個泛用實例

就如同圖 2-1 的樣子,在主機上的所有 Linux OS 都需要自己能夠開機, 而開機流程通常是這樣的:(註8)

  • step 1: 按下電源,主機開始讀取 BIOS 資料;

  • step 2: 取得開機的裝置順序,並由 MBR 取得開機選單與開機管理程式;

  • step 3: 由開機管理程式載入 Linux kernel 及虛擬磁碟 (initrd);

  • step 4: Kernel 偵測硬體載入適當的驅動程式,並掛載根目錄以讀取核心模組;

  • step 5: 開始由 /sbin/init 程式設定主機的環境。

由上述的動作,我們可以知道 Linux 開機的重點在於 1. 核心 2. 虛擬磁碟 (initrd) 及 3. 根目錄 (/) 了。 雖然核心與虛擬磁碟我們的 CentOS 5 已經提供了,但是預設的虛擬磁碟好像並未主動的加入 Xen 的某些驅動程式, 因此我們得需要針對虛擬磁碟進行設定才好。此外,每個 Xen domain 的根目錄也很傷腦筋的!因為根目錄需要很多資料,而且還需要掛載類似 /sys, /proc, /dev, /selinux 等特殊的檔案系統哩! 那該如何處理根目錄呢?底下就讓我們來處理處理:


  • 硬體支援性

    就如同前面幾個小節談到的,如果我們的硬體並不支援 xen 所必須要的功能,那麼妳是無法建立好你的 domain-U 的! 在這個泛用案例當中我們的重點是測試半虛擬化,因此妳只要具有 PAE 的支援即可。 鳥哥以較低階的 P-III 800 來進行測試,硬體檢查的結果是這樣的:

    [root@linux ~]# cat /proc/cpuinfo | grep flags
    flags  : fpu tsc msr pae mce cx8 mtrr mca cmov pat pse36 mmx fxsr sse up
    

    妳可以發現確實存在那個 pae 的關鍵字,因此我們這個系統是可以玩 Xen 的半虛擬化技術的! 所以讓我們繼續進行工作吧!


  • 根目錄所需磁碟槽

    根目錄所需磁碟槽的來源可以有兩個,一個是實體硬碟,一個是利用 dd 建立一個大檔案來使用。 鳥哥比較傾向利用 dd 來處理你的根目錄喔!妳可以這樣做:

    範例:建立一個 5GB 的大檔案
    [root@linux ~]# mkdir -p /disk2/xen# 因為鳥哥的 /disk2 為一顆額外的硬碟,所以容量比較大啦![root@linux ~]# cd /disk2/xen
    [root@linux xen]# dd if=/dev/zero of=xen.img bs=1M count=5000
    5000+0 records in
    5000+0 records out
    5242880000 bytes (5.2 GB) copied,178.482 秒,29.4 MB/s
    # 這個時候會開始創造一個 5GB 左右的檔案,由於硬碟速度快慢的關係,# 這個動作可能會消耗數分鐘到數十分鐘不等。[root@linux xen]# ll /disk2/xen
    -rw-r--r-- 1 root root 5242880000 Oct 10 00:30 xen.img
    

    檔案是建立起來了,不過如果你的 Linux 有啟動 SELinux 的話,還需要一些類型的改變才可以! 其實動作也不難,這樣做就對了!

    [root@linux xen]# chcon -t xen_p_w_picpath_t -R /disk2/xen
    [root@linux xen]# ll -aZ /disk2
    drwxr-xr-x  root root user_u:object_r:xen_p_w_picpath_t      .
    drwxr-xr-x  root root system_u:object_r:file_t         ..
    -rw-r--r--  root root user_u:object_r:xen_p_w_picpath_t      xen.img
    # 如果妳有啟動 SELinux 才需要這麼做,否則就略過。# 反正你要記得 Xen 的檔案必須要是 xen_p_w_picpath_t 的安全內容類型。

    檔案建立起來後,就需要進行格式化囉~格式化的方法為:

    範例:將剛剛建立的大檔案格式化為 ext3 的檔案格式
    [root@linux xen]# mke2fs -j /disk2/xen/xen.img
    mke2fs 1.39 (29-May-2006)
    /disk2/xen/xen.img is not a block special device.
    Proceed anyway? (y,n) y
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    ....底下省略....

    由於這是檔案不是磁碟分割槽,所以會有上述的警告訊息,妳按下『y』就對啦!


  • 複製或安裝根目錄

    由於 domain-U 與 domain-0 其實是一樣的系統,因為是半虛擬化嘛!所以,最簡單的根目錄製作方法, 就是將原本的 domain-0 的根目錄複製到新的分割槽內就對了! 以鳥哥的例子來說,妳可以簡單的這樣做:

    [root@linux ~]# mount -o loop /disk2/xen/xen.img /mnt# 先將剛剛製作出來的資料給他掛載起來,這是特殊掛載法喔![root@linux ~]# cp -ax /{root,dev,var,etc,usr,bin,sbin,lib} /mnt# 這幾個目錄的資料是一定需要複製的!粉重要!。[root@linux ~]# mkdir /mnt/{proc,sys,home,tmp,selinux}# 這幾個目錄與虛擬檔案系統有關,包括程序、核心資料等目錄,所以要先建立[root@linux ~]# vi /mnt/etc/fstab/dev/sda1  /         ext3    defaults        1 1
    devpts     /dev/pts  devpts  gid=5,mode=620  0 0
    tmpfs      /dev/shm  tmpfs   defaults        0 0
    proc       /proc     proc    defaults        0 0
    sysfs      /sys      sysfs   defaults        0 0
    # 我這裡假設我的根目錄所在磁碟槽為 SATA 硬碟的第一個分割槽,# 所以是 /dev/sda1 。此外,其他的檔案系統如 proc, sysfs 都必須要寫入!# 至於原本在 domain-0 的其他裝置,就給他拿掉吧![root@linux ~]# vi /mnt/etc/sysconfig/network
    NETWORKING=yes
    NETWORKING_IPV6=no
    HOSTNAME=xen.test.hostname# 這裡設定一下妳的主機名稱啦![root@linux ~]# vi /mnt/etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0BOOTPROTO=noneIPADDR=192.168.0.123NETMASK=255.255.255.0ONBOOT=yes# 建議將 IP 也設好。但是要注意那個 HWADDR 最好能夠拿掉不設定![root@linux ~]# umount /mnt# 記得將掛載的資料給他卸載掉

    基本上,根目錄的設定到這裡就算結束了!不過,妳會發現由於 domain-U 的資料都是由 domain-0 來的, 而不同的主機其實設定不會相同,所以使用上述的作法妳會發現有幾個小問題:

    • 妳必須要手動處理一些小設定,包括主機名稱, /etc/fstab, IP 參數等等;

    • 即使手動處理過上述的資料,還是很可能會無法成功的啟動 domain-U ;

    • 由於 domain-0 可能會安裝比較多的套件,這些資料又在 domain-U 當中用不著,徒然造成硬碟容量的浪費。

所以,雖然這個方法最簡單,不過通常鳥哥不是很建議您使用啦! ^_^


  • 設定虛擬磁碟映象檔以及終端機介面

    由於預設的 CentOS 虛擬磁碟 (Initial Ram Disk) 並不包含一些 Xen 的相關驅動程式, 因此搞了老半天也是無法驅動 Xen 的 domain-U ,給他氣死! 所以,我們得先就 initrd 來進行一些額外的設定才行。 這個地方非常的重要!因為鳥哥卡在這裡好幾天~最後才發現原來是 initrd 的問題啊~

    [root@linux ~]# mount -o loop /disk2/xen/xen.img /mnt
    [root@linux ~]# cd /boot
    [root@linux boot]#  mkinitrd -v -f --fstab /mnt/etc/fstab --with xenblk \
    > --with xennet --preload xenblk --preload xennet \
    > initrd-2.6.18-8.1.14.el5xen.vbird.img `uname -r`
    [root@linux boot]# umount /mnt# 詳細的各項參數請 man mkinitrd ,上述的範例僅是利用 /etc/fstab 的裝置來設定,# 並且加上一些 xen 相關的驅動程式而已。這個過程非常的重要!# 最終會製作出一個 initrd-2.6.18-8.1.14.el5xen.vbird.img 檔案

    除了這個虛擬磁碟之外,為了要方便我們登入 domain-U 的環境,我們需要產生一個終端機介面才行。 因為每個 domain-U 會使用到終端介面,然而我們知道 tty1 ~ tty7 預設給 domain-0 使用掉了。 為此,我們必須得要製作出一個虛擬的終端介面,那就是 xvc0 這個終端介面囉。如何產生呢? 簡單的流程是這樣:

    [root@linux ~]# vi /etc/inittab# 大約在第 51 行的地方加入底下特殊字體的部分:
    5:2345:respawn:/sbin/mingetty tty5
    6:2345:respawn:/sbin/mingetty tty6
    co:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav# 意思是使用 agetty 建立 xvc0[root@linux ~]# init q# init q 這個指令可以讓 /etc/inittab  的設定立刻生效而不需要重新開機![root@linux ~]# ln -s /dev/console /dev/xvc0# 如果 xvc0 沒有主動建立的話,我們需要手動來建立連結才可以喔!

    做完這一步之後,接下來就是可怕的設定檔囉~


  • 編輯 xen 虛擬資料的設定檔

    接下來就是重頭戲啦!因為我們必須要指定 domain-U 的相關虛擬設定值,包括使用幾顆 CPU 、使用多少記憶體容量, 以及所使用的核心與根目錄的所在等等。如前所述,這些設定檔主要都在 /etc/xen 底下, 尤其裡面的 xmexample1, xmexample2 等檔案就是很好的說明文件檔,很有參考價值。 鳥哥先說一下我的設定是這樣的:

    [root@linux ~]# vi /etc/xen/centos5# 這個檔案的檔名可以隨便你取,不過設定檔最好是在 /etc/xen 這個目錄下才好!name    = "centos5"kernel  = "/boot/vmlinuz-2.6.18-8.1.14.el5xen"ramdisk = "/boot/initrd-2.6.18-8.1.14.el5xen.vbird.img"memory  = "128"vcpus   = 1vif     = [ '' ]disk    = [ 'tap:aio:/disk2/xen/xen.img,sda1,w' ]root    = "/dev/sda1 ro "# name:只是一個顯示的名稱,一般建議與檔名相同即可;# kernel:在 domain-0 上面的檔案,用來進行 domain-U 的開機!非常重要!# ramdisk:就是 initrd 那個檔案囉~剛剛我們才做出來的檔名# memory:分配給這個 domain-U 的記憶體有多少?如果沒有圖形,96 MB 也可以!# vcpus:使用多少顆 CPU 的意思;# vif:是否需要網路卡,如果需要網路卡,至少要有設定!但內容可用預設!# disk:用來作為根目錄的是那個磁碟,這個最重要啦!語法為:#tap:aio:/完整/路徑/檔名,設計為domain-U的磁碟代號,可否寫入#以我們這個例子來說,我將之前建立的大檔案模擬成為 domain-U 的#/dev/sda1 ,並且該 partition 為可寫入 (w)。

    特別特別留意的是,上面的設定檔當中的 kernel, ramdisk 以及 disk 都是以原本的主機 (domain-0) 的角度來思考的, 也就是說,實際上我們是以 domain-0 的核心檔案來進行 domain-U 的開機,因此妳會發現在 domain-U 當中並不存在 /boot 這個目錄喔!因為實際上用來開機的是 domain-0 的檔案嘛!

    至於另一個重點就是那個 disk 參數。我們可以使用模擬的方式也可以使用實際的 partition 來給予設定。 如果是『用檔案來模擬成為 partition』時,使用兩個逗號 (,) 隔開成為三個欄位,分別為:

    tap:aio:/完整路徑/檔案的名稱,裝置代號名稱,寫入與否

    • [tap:aio:]:為較新的檔案處理模式,舊的方式為使用:[file:]

    • [裝置代號名稱]:就是模擬的裝置,請與 domain-U 內的 fstab 對應起來喔!

    • [w]:就是設定可否寫入,若唯讀則為[r]

如果使用實體 partition 來模擬的話,那麼開頭的部分會以『phy:』來取代。舉例來說,如果我們以 /dev/hda5 來作為 domain-U 的 /dev/sda1 的話,那就會變成:
disk = [ 'phy:/dev/hda5,sda1,w' ]如果一切都搞定之後,接下來讓我們來啟動 Xen 的 domain-U 吧!


  • 利用 xm 指令啟動與管理 domain-1

    在 domain-0 可以使用 xm 這個指令來啟動、關閉、刪除某個 domain-U , xm 的指令用法是這樣的:

    [root@linux ~]# xm [動作] [設定檔名] [-c]參數:[動作]:要某個設定檔內的 domain-U 作何動作之意,常見的動作有:   create   :啟動這個 domain-U 的意思,例如啟動 centos5 這個設定檔時,使用:              xm create centos5   destroy  :立即由記憶體中,將這個 domain-U 給刪除,常用於 domain-U 出問題時   list     :將目前已經啟動的 domain 都列出來之意;   console  :若有已建立的 domain-U 時,可用 console 來取得 domain-U 的終端介面   shutdown :關閉某個已啟動的 domain。如果想要關閉全部的 domain-U ,可用              xm shutdown -a[設定檔名]:亦即在 /etc/xen/ 目錄下的檔名囉;-c :同時建立到該設定檔的終端介面 (console)

    如果想要啟動我們剛剛建立的 centos5 這個設定檔內的 domain 時,妳可以使用『xm create -c centos5 』即可。 那個 -c 的作用是可以讓妳直接取得 domain-U 的終端機介面。鳥哥在 pietty 上面連線到 domain-0 , 然後啟動 centos5 這個 domain 的情況如下所示:


    圖 2-2、啟動 xen domain-U 的示意圖

    在圖 2-2 當中,輸入指令後 domain-U 的開機流程就會依序的顯示在妳的終端機上, 感覺上就好像坐在電腦前面看 Linux 主機開機一樣!實在是很不賴!最後如果開機順利成功的話, 結果會像下圖所示這樣:


    圖 2-3、啟動 xen domain-U 的示意圖

    在圖 2-3 當中,最上方圈起來的開機訊息是錯誤訊息。由於我們是複製 domain-0 的所有資料, 因此連同原本寫在 /etc/rc.d/rc.local 檔案內的執行過程也會被執行。但是 domain-U 的狀況與 domain-0 並非完全相同,所以就會如上所述出現一些錯誤訊息啦!這也是我們需要額外處理的部分喔。

    當你以 root 的身份登入後 (這個真的是終端機,並非是 ssh 的畫面喔!),會發現多了一個 xvc0 的終端介面, 這個介面得先在 /etc/inittab 裡面設定好才行!如果一切都 OK 了!恭喜您,你已經登入 domain-U 囉! 接下來請妳自行根據妳的需要來設定好妳的 domain-U 吧!讓這兩個 domain 並行呢!

    好了,現在我如何登出 centos5 這個 domain-U 呢?妳可以這樣做的:

    • 直接在 domain-U 的環境中按下 [ctrl]-] 這個組合鍵來回到 domain-0 的環境;

    • 直接關閉 pietty 等連線的軟體;

    • 利用其他 bash 來結束 (kill) 掉使用 xm 所建立的連線程序

有趣的是,即使妳使用上述的方法來離開 domain-U 時, 也不會影響到 domain-U 的繼續運作!而且 root 也不會登出,等到妳下次再以『 xm console centos5 』時, 會繼續取得 root 的動作繼續處理剛剛未完成的工作呢!很神奇吧~

現在,請跳回 domain-0 的地方,或者是利用另外一條 pietty 的連線連入 domain-0 ,我們使用 xm list 來察看一下各個 domain 的狀況吧!

[root@linux ~]# xm list
Name             ID Mem(MiB) VCPUs State   Time(s)
Domain-0          0      366     1 r-----    735.2
centos5          42      127     1 ------     52.4
# 妳會發現多了一個 domain 出現!名稱為 centos5 啦!# 妳也會發現有個 State 吧!那個 State 的意義是這樣的:# r :該 domain 正在使用 CPU 資源在運作中;# b :這個 domain 目前被懸置(blockded),很可能由於這個 domain 在等待較長時間#     的輸入輸出 (I/O) 之故。# p :該 domain 處於暫停的狀態,通常由於管理員使用 xm pause 之故。#     當 domain 在此狀態時, Xen 的監督器將不會處理該 domain 的動作;# s :這個 domain 正在關機當中# c :這個 domain 已經 crash 了,但是卻沒有自動的關掉。通常是因為沒有設定#     on_crash 的相關動作所致。# d :該 domain 正在死亡中...因為該 domain 無法正確的 shutdown/crashed 之故。 

很簡單吧!這樣就完成你的 Xen domain 囉~開始將妳所想要的網路服務分門別類的放到不同的 domain-U 中吧! 加油!

转载于:https://blog.51cto.com/luyx30/1249562

XEN--转载自鸟哥的linux私房菜相关推荐

  1. 学习鸟哥的Linux私房菜笔记(1)——Linux系统入门

    转载自: 专栏:鸟哥的Linux私房菜笔记 - 博客频道 - CSDN.NET http://blog.csdn.net/column/details/dawanganban-linux-n.html ...

  2. 《鸟哥的linux私房菜-服务器篇 第三版》 RHCA亲授

    经典再现,<鸟哥的linux私房菜-服务 器篇(第三版)>远程班隆重推出! 鸟哥的linux的私房菜是linux教材中的 经典中的经典!是学习linux的绝佳资 料! 上课时间: 周一到周 ...

  3. 《鸟哥的Linux私房菜》Chapter11 20180726~20180806

    目录 1.认识Bash这个shell 1.1.硬件.核心与shell 1.2.系统的合法shell和/etc/shells功能 1.3.Bash shell的功能 1.3.1.命令修编功能 1.3.2 ...

  4. 鸟哥的Linux 私房菜 (1-12) + my

    <<Linux 鸟哥的私房菜>>  心得 : 实践与观察才是王道 第0章 : 计算机概论  计算机 : 接受用户输入的指令与数据,经过中央处理器的数据与逻辑单元运算处理后,以产 ...

  5. 鸟哥的Linux私房菜视频!

    本文转载于一牛网LINUX论坛,需要下载视频的请点击:http://bbs.16rd.com/thread-29646-1-1.html 说到Linux,估计有很多同学都有听过并且跃跃欲试地想学习一下 ...

  6. 网人-鸟哥的Linux私房菜简体中文

    2019独角兽企业重金招聘Python工程师标准>>> 经典了Linux入门教程:鸟哥的Linux私房菜网络中文版 http://vbird.dic.ksu.edu.tw/ 转载于: ...

  7. 鸟哥的linux私房菜-文件压缩于打包-2

    dump 备份命令: -S  :仅列出后面的待备份数据需要多少磁碟空间才能够备份完毕: -u  :将这次dump 的时间记录到/etc/dumpdates 文件中: -v  :将dump 的文件过程显 ...

  8. 拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录

    目录 目录 前言 关于这本书 必看知识点 最后 前言 相信部分刚进入这个行业的新同学会对一个问题感到疑惑,为什么从培训学校出来的学员不被欢迎? 这里记录下一些我个人的看法(博主也曾有面试新员工的经历) ...

  9. 鸟哥的Linux私房菜(基础学习,服务器架设)

    纪念下吧:2014年大连的第一场雪,12月1号,早上出门就看见漫天飘着雪花,其实,还是很漂亮的! 自学过Linux的同学应该对<鸟哥的Linux私房菜>不会陌生,鸟哥分成两个部分来写,第一 ...

  10. 开发日记-20190612 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》

    Preface 今天效率真的感觉还不错呢= =,读书进度一口气推进了两章半,说真的,感觉现在看的东西大多数都是讲怎么用的,写这些其实意义不是很大,而且一般写下来后我后续也不会特地来回顾.所以我决定了, ...

最新文章

  1. html 中表单元素input type=hidden的作用
  2. 空间金字塔Spatial Pyramid的BOW和Pyramid HOG的多核
  3. boost::hash_range相关的测试程序
  4. FFMPEG进阶系列01-ffplay命令详解
  5. html设置table表格的弧度,用CSS3和table标签实现一个圆形轨迹的动画的示例代码
  6. 自动填充html_第 11 篇:自动生成文章摘要
  7. 云顶之弈小程序 置顶工具(附源码)
  8. JDK动态代理实现原理详解(源码分析)
  9. Mysql命令行下实现数据的导入
  10. 微信处罚腾讯判定其滥用原创:不要惹我 我狠起来能铁锅炖自己!
  11. java 代码压缩javascript_通过Java压缩JavaScript代码实例分享
  12. Javascript 加载详解
  13. 拓扑图是用什么软件画的?
  14. 暗时间--BY刘未鹏
  15. 【Python】py3.6请求网站时报错:http.client.RemoteDisconnected: Remote end closed connection without response
  16. 仿秒秒测日历页面和部分功能
  17. OpenCV——图像细化算法
  18. Just Do IT. - 收藏集 - 掘金
  19. 在python中下列代码的运行结果是print abc_下列代码运行结果是?
  20. ViewPager简单介绍(二)ViewPager+Fragment

热门文章

  1. Qt控件大小自适应电脑分辨率问题
  2. mysql 学习笔记04 insert与update语句
  3. C++ 使用extern C简单使用
  4. 复习栈和队列,详解最小栈,栈的弹出压入序列,逆波兰表达式求值
  5. 第3章 文件IO | 001 文件描述符
  6. 【原理+实战+视频+源码】docker映射端口教程
  7. PHP----学生管理系统
  8. vue.js 安装
  9. 解决iphone填写表单时,表单项获取焦点时往下拉屏,导致顶部标题栏下滑错位...
  10. Xcode模拟器和真机生成的日志查看(ios必知必会)