本文主要介紹 Xen:一種使用在 Linux/Unix 系統下「虛擬機器(Virtual Machine)軟體」。
虛擬機器(Virtual Machine):將實體機器作虛擬化的動作,藉由軟體的模擬,使得一台實體機器能夠運行起來像是好多台電腦一樣,而「虛擬出來的機器」對於一般使用者來說,除非特別去調查,與「一般其他的實體機器」並不會感受到太大的差別。
底下列出一般常見的虛擬機器與其用途,提供參考:
| 功能 | 範例 |
| 模擬早期電動玩具機台 | 任天堂、PlayStation、大型電玩 等等電玩模擬器 |
| 用來執行跨平台應用程式 | Java 與 .NET 虛擬機器 |
| 模擬 x86 主機 | VMware 與 Xen 虛擬機器軟體 |
了解虛擬機器概念後,接著來談到我們的主角:『Xen』
現階段主要運行於 Linux/Unix 系統的 Xen 虛擬機器,是一個注重效能的平行虛擬化(Paravirtualization)系統,雖然說 Xen 能夠運行在許多 Unix/Linux 系統,但因為考量介紹 Xen 系統的方便性,以下主要以當紅的 Linux 作業系統來探討 Xen。
要使得 Linux 支援 Xen 必須從 Linux Kernel 來做改造,也就是要重新編譯 Linux Kernel,重新編譯 Linux Kernel 聽起來似乎不是一件簡單的事情,所幸許多 Linux Distribution 已經將支援 Xen 的 Linux Kernel 編譯好囉,所以我們只要直接使用 Xen 的 Kernel 來開機即可,另外要特別聲明 Xen Kernel 有兩種『Xen0』(Domain-0)與『XenU』(Guest 系統)。
要跑 Xen 的實體電腦需先跑 Xen0 的 Kernel 以後,再以 Xen0 為基礎來執行多個 XenU Guest 系統於 Xen0 系統上,簡單說 Xen0 是全部 XenU 的母系統。
您可以同時運行『多個』XenU Guest 系統在一個 Xen0 的實體電腦上,且各個 XenU 系統是獨立並且不互相影響,意思是若其中一個 XenU 故障損壞亦不會影響到其他 Xen 系統。

相對其他的虛擬機器軟體來說,Xen 最大優勢在於『高效能』(High Performance),因為 Xen 採用 Paravirtualization 而不是使用模擬(Emulation)、全系統模擬(full system simulation)方式,所以能夠使得 Xen 系統效能優於其他虛擬機器軟體。
XenU Guest 系統之間除了正常管道外(例如:ssh、vnc 或 NFS 這些網路服務等等),是無法互相影響彼此安全性,若是 Xen0 有著多張網路介面卡,Xen 系統甚至能夠使得 XenU 使用獨立網路卡(限制 XenU 無法使用所有的網路卡),而且某個 XenU 若是故障損壞了,也不會使得其他的 XenU 或 Xen0 故障。
說到 Xen 缺點應該算以『不能執行 Windows 作業系統』這個問題最大,原因還是在於講求效能的 Xen 採用 Paravirtualization 虛擬技術必須更改 Windows Kernel 才能執行 Windows Guest 系統,當然 Windows 並沒有提供我們來更改。
不過另外有個好消息,由 CPU 大廠 Intel 提供 VT 技術(Virtualization Technology),使得虛擬機器軟體(例如 Xen、VMware)透過「全虛擬」動作來運行許多不同的 x86 作業系統,使得 Xen 藉由 Intel VT 作『全虛擬』在不修改 Windows 核心下,也能跑 Windows Guest 系統。
使用 Intel VT 技術的另一個重點是:以往在沒有 Intel VT 技術時,全虛擬 Guest 系統效能低落,藉由 Intel VT 技術,可使 Guest 系統存取硬體效能更加快速與直接,大大增進 Guest 系統效能與可用度。
與『Xen』類似的虛擬機器軟體較知名有「VMware」、「微軟 Virtual PC 與 Virtual Server」與「Parallels Workstation」
Xen 採用 Paravirtualization 方式,主要是她主推效能至上,也就是以效能見長。而其他採用全虛擬方式(例如 VMware、Parallels Workstation)虛擬機器,主要是可以執行任何 x86 作業系統,所以是以相容性見長。而微軟 Virtual PC 官方網站說明只支援 Windows 系列 Guest 系統,故比較封閉。
一台個人電腦,搭配最少需『超過』512 MB 記憶體(256 MB 給 Domain-0 的 Xen0 使用、256 MB 給 test 的 XenU 使用),特別注意因為 Linux Kernel 啟動時會使用部份記憶體,導致若剛好 512 MB 記憶體會無法安裝 XenU Guest 系統(記憶體不足 256 MB)建議記憶體 768 MB 以上。
磁碟空間建議使用 20GB 以上硬碟。測試期間最大磁碟用量為:「2 個 Fedora core 5 完整安裝」+「Fedora Core 5 安裝來源檔案」(2 x 9G + 3G = 21G 左右)
「Fedora Core 5 安裝來源檔案」是使用於網路安裝 XenU Guest 系統。
下表為筆者此次測使所使用硬體規格表:(可以同時啟動一個 Xen0 與兩個 XenU)
| CPU | Pentium 4 1.6 GHz |
| 記憶體 | 1024 MB |
| 硬碟 | 40G |
| 網路介面 | 一般網路卡 |
| Xen | 主機名稱 | IP/Mask |
| Xen0 | r7-101.ol | 172.16.7.101/16 |
| XenU | r5-148.ol | 172.16.5.148/16 |
| XenU | r6-135.ol | 172.16.6.135/16 |
Fedora Core 5 安裝光碟共五片,DVD 版本也可以。
第一步:以標準步驟安裝 Fedora Core 5
使用光碟開機後開始安裝 Fedora Core 5,大多使用預設值按下『下一步』,在軟體選擇方面可省略「Office and Productivity」(辦公與出版)軟體,以此方式安裝好 Fedora Core 5 大約使用 2GB 左右磁碟空間。

第二步:安裝 Xen 相關軟體
Xen 相關軟體有三個,列表如下:
| 軟體名稱 | 主要功能 | 測試版本號碼 |
| xen | Xen 工具套件 | xen-3.0.1-4.i386.rpm |
| kernel-xen0 | Xen Domain-0 核心 | kernel-xen0-2.6.15-1.2054_FC5.i686.rpm |
| kernel-xenU | Xen Guest System 核心 | kernel-xenU-2.6.15-1.2054_FC5.i686.rpm |
以上雖然列出三個與 Xen 相關的套件,事實上若作為 Xen0 系統只需安裝 xen 與 kernel-xen0 套件,操作如下:
在 Xen0 主機(筆者的為 r7-101.ol 主機)使用指令「rpm -ivh xen-3.0.1-4.i386.rpm bridge-utils-1.0.6-1.2.i386.rpm sysfsutils-1.3.0-1.2.1.i386.rpm」來安裝 xen 套件。
接下來使用指令「rpm -ivh kernel-xen0-2.6.15-1.2054_FC5.i686.rpm」來安裝 kernel-xen0 套件。

第三步:使用 Xen0 核心開機
重開機於 GRUB 選單下,於秒數尚未讀完前,按方向鍵『上下鍵』,會發現多一個選擇,即『Xen0 核心開機』選項。接下來選擇『Xen0』核心開機。

第四步:設定開機預設使用 Xen0 核心(建議)
已經使用 Xen0 核心正常開機成功後,建議您將開機預設值改成使用『Xen0 核心』。使用指令「vim /boot/grub/menu.lst」修改 GRUB 設定檔案,將「default=1」改成「default=0」。

Fedora Core 5 安裝 XenU Guest 系統已支援從 anaconda 安裝(「anaconda」是 RedHat、Fedora 預設使用的圖形安裝程式),接下來使用網路安裝(透過 NFS、HTTP、FTP)我們會先將安裝來源(也就是光碟片內容)放在 Xen0 主機,透過網路來安裝 XenU Guest 系統,以下為準備網路安裝伺服器步驟。
第一步:將安裝光碟內容拷貝至主機硬碟
筆者的作法是將光碟內容放至 Xen0 主機硬碟「/FC5src」目錄下
使用指令「mount /dev/cdrom /mnt」掛載光碟片至 /mnt 目錄下
使用指令「mkdir /FC5src」製作目錄
使用指令「cp -r /mnt/* /FC5src」將資料拷貝過去
使用指令「eject」將光碟退出

第二步: 修改 NFS 設定檔 /etc/exports,啟動 NFS 服務,關閉防火牆
修改「/etc/exports」加入一行「/FC5src」
使用指令「/etc/init.d/nfs start」來啟動 NFS 服務。
使用指令「/etc/init.d/iptables stop」來關閉防火牆服務。

在 Fedora Core 5 安裝 XenU Guest 系統採「直覺化」設計,幾乎可以 Step By Step 完成安裝,並且不像以前(例 Fedora Core 4)需要透過 Internet 來安裝,Fedora Core 5 只需要自行準備安裝伺服器即可(也就是先前步驟所建立之安裝伺服器)。
第一步:使用指令「xenguest-install.py」開始安裝 XenU Guest 系統
問題一 What is the name of your virtual machine?(您的虛擬機器名稱)
回答一 test
問題二 How much RAM should be allocated (in megabytes)?(此虛擬機器使用多少記憶體,使用 MB 作單位)
回答二 256
問題三 What would you like to use as the disk (path)?(虛擬機器所使用磁碟位於那裡)
回答三 /root/test.iso
問題四 How large would you like the disk to be (in gigabytes)?(虛擬機器磁碟大小,以 GB 為單位)
回答四 9
問題五 What is the install location?(安裝來源位於那裡)
回答五 nfs:172.16.7.101:/FC5src
| NFS | nfs:my.nfs.domain.com:/path/to/src/ |
| HTTP | http://my.http.domain.com/path/to/src/ |
| FTP | ftp://my.ftp.domain.com/path/to/src |

第二步:選單模式基礎設定
此時 test 已經由 XenU Kernel 開機
選擇「English」或「Chinese(Traditional)」語系(Language)
選擇「us」(美式)鍵盤
設定好 IP 位址(筆者使用 DHCP 來設定網路,讀者請依照您測試環境來作調整)
選擇「Start VNC」啟用 vnc 安裝模式,接著選擇「No password」
會看到如下一段文字:
The VNC server is now running. Please connect to 「IP 或是主機名稱」:1 to begin the install... Starting graphical installation...

第三步:使用 vncviewer 來執行 anaconda 程式
在 Xen0 主機圖形介面下,使用指令「vncviewer 172.16.5.148:1」來繼續 anaconda 程式。
之後安裝方式大致上與一般 Fedora Core 5 無異,只是會遇到切割「xvda」磁碟時,需回答『Yes』(是)才能繼續安裝。

在安裝完成 XenU 後,接下來需要學會一些基本控制,一般來說是在 Xen0 主機使用 xm 相關指令來操控。
使用指令「xm help」來觀看 xm 有那些參數
使用指令「xm list」列出正在執行的 Xen0 與 XenU
使用指令「xm console test」連接到 test 的 XenU 終端機
使用指令「xm shutdown test」使 test 的 XenU 關機
使用指令「xm create -c test」使 test 的 XenU 開機
(-c 順便連接到 test 的 console)
使用指令「xm mem-set 4 266」來調整 test 的 XenU 記憶體設定成 266 MB
使用指令「xm top」來觀察 Xen0 與 XenU 程序管理

若只是使用 xm 工具則只能使用 Command 模式來使用 XenU Guest 系統,若要使用圖形模式來使用 XenU Guest 系統的話,可以應用 X11 forwarding 功能,這種方法比較適合用於 Linux/Unix 這些使用 X Window 的作業系統操控,使用「ssh -X user@hostname」來連結到 XenU Guest 系統,之後就可以執行圖形程式顯示到您的圖形介面上。

方才使用「X11 forwarding」方式較適合用於 Linux/Unix 的 X Window 系統,若是使用 Windows 系統,使用 vnc 方式來連線居多。
vnc 採用 Client/Server 架構,所以兩台主機分別要安裝 vnc Server 與 vnc Viewer 程式,若要啟動 XenU Guest 系統上的 vnc Server,請先在 XenU Guest 系統執行 vncpasswd 設定好 vnc 通行密碼後(六碼以上),再使用指令「vncserver」來啟動 vnc Server。
至於 vnc Client 端這邊,使用指令「vncviewer ServerIP或主機名稱:1」連線上去並輸入 vnc 通行密碼來連線到 XenU Guest 系統。
vncserver 與 vncviewer 皆可跑在 Linux、Windows、MAC OS X 與 FreeBSD 這些常見作業系統。
| twm | Tab Window Manager |
| startkde | K Desktop Environment(KDE) |
| gnome-session | GNOME Desktop Environment |


除了 Fedora Core 5 之外,許多 Distribution 都支援 Xen 系統,只是 Fedora Core 5 使用 anaconda 安裝 XenU 更加直覺化架設 Xen 系統,其他像是 Unbuntu、Novell SuSE、Gentoo 與 Debian 也都支援 Xen 系統架設。
以往在同一台電腦安裝兩個以上的 Linux 都只能同時間運作一個,藉由 Xen 技術,我們能夠同時運作兩個以上的 Linux 於同一台實體電腦,若是硬體規格較高還可以一台電腦當做好幾台用,商用上可以節省不少硬體費用。
之前我們使用單一檔案 /root/test.iso 來當作 XenU 的硬碟,若是讀者有多顆硬碟,也可以使用單獨的磁碟(或磁區)來當作 XenU 的硬碟,只要在當初建置時的問題三回答方式不一樣即可,例如:
問題三 What would you like to use as the disk (path)?(虛擬機器所使用磁碟位於那裡)
回答三 /dev/sdb
這樣 /dev/sdb 裝置就成為 XenU 所使用的磁碟了。

XenU 設定檔預設放在 /etc/xen/ 目錄下,通常使用 Domain 名稱來當作檔名,例如我們之前使用 xenguest-install.py 建立 test 的 XenU Guest 系統,所以 test 的設定檔就是 /etc/xen/test ,內容簡介如下:
# Automatically generated xen config file name = "test" memory = "256" disk = [ 'file:/root/test.iso,xvda,w' ] vif = [ 'mac=00:16:3e:2d:d1:89' ] bootloader="/usr/bin/pygrub" on_reboot = 'restart' on_crash = 'restart'
| 參數名稱 | 中文解釋 |
| name | XenU Domain 名稱 |
| memory | 使用記憶體數量(MB) |
| disk | 使用硬碟 |
| vif | 網路卡 MAC 地址 |
若是您將設定檔案放到『/etc/xen/auto』目錄下,這樣子就可以使用指令「/etc/init.d/xendomains start」來啟動位於 /etc/xen/auto 目錄下的 XenU Guest 系統。若再配合指令「chkconfig xendomains on」就可以使得位於 /etc/xen/auto 目錄下的 XenU Guest 系統於開機時自動啟動。

在先前的測試中,我們使用同一版本 Xen0 Kernel 與 XenU Kernel 能夠運作 Xen 系統,至於是否能夠使用不同版本的 Xen0 與 XenU 呢?筆者的測試結果是失敗了,這只是筆者簡單的測試,至於真實可行性還未知。
筆者簡述測試過程如下:使用 FC5 Xen0 Kernel 配合 FC4 XenU Kernel 開機失敗,但使用 FC5 Xen0 Kernel 配合 FC5 XenU Kernel 卻使用 Fedora Core 4 應用程式(也就是 Fedora Core 4 安裝好只是將 Kernel 換成 FC5 XenU)能夠啟動,所以猜測 Xen 主要與 Kernel 較息息相關。圖為同時啟動兩個 XenU 一個是 Fedora Core 5 應用程式、一個是 Fedora Core 4 應用程式的情形。

Xen 又是一個從大型系統技術轉戰到 Linux 的一個案例,以往只能在大型主機見到的虛擬機器系統,拜硬體技術日新月異所賜,使得 x86 PC 也有機會實際成為商用虛擬機器系統,說到商業用途,以下列舉一些可以將虛擬機器技術實際應用的案例。
許多軟體開發公司及人員,經常會需要許多不同作業系統或不同軟體版本,來測試他們開發的軟體,此時很有可能使用「多重開機」的作業方式來完成,像是切換到不同的 Windows 例如 Windows 2000、Windows XP 或 Windows 2003,若是切換不同 Linux Distribution 版本更是多到不勝枚舉,以前需要切換的多重開機系統,透過虛擬機器技術,搖身一變成「同時開機」系統,可簡化測試流程與時間。
有些時候因為應用程式需求,而必須使用不同作業系統,此時若單一系統上的應用程式必須執行但是卻不需要大量系統資源時, 使用虛擬機器來運行此應用程式不僅可以省下一台電腦硬體費用,還可以節省伺服主機擺放空間,亦可節省電費,尤其當伺服主機是放在寸土寸金的都市精華地帶或 ISP 業者 Co-Location 時,節省出來的經濟效益會是相當可觀。
重新安裝一個 Guest 系統(或是一般的作業系統)其實是蠻浪費時間的,藉由虛擬機器技術,我們可以很快速的備份 Guest 系統,只要在離線(Guest 系統關機)時備份所使用的磁碟檔案(例如 test.iso)即可,不論是依照既有 Guest 系統快速複製另一個 Guest 系統,或是還原之前備份的 Guest 系統,都會比重灌快多了,這樣一來就不會常常花時間在重灌作業系統上。