這一篇我要體驗的虛擬機系統是 Xen。在虛擬機領域,Xen 具有非常高的知名度,其名字經常在各類文章中出現。同時 Xen 也具有非常高的難度,別說玩轉,就算僅僅只是理解它,都不是那么容易。之所以如此,那是因為 Xen 采用了和我前面介紹的那幾個虛擬機完全不同的架構。在這里,我稱之為令人腦洞大開的奇異架構。
比如說在經典的虛擬機架構中,虛擬機軟件運行於 Host System 之中,而 Guest System 運行於虛擬機軟件之中。為了提高 Guest System 的運行速度,虛擬機軟件一般會在 Host System 中使用內核模塊開一個洞,將 Guest System 的運行指令直接映射到物理硬件上。但是在 Xen 中,則根本沒有 Host System 的概念,傳說它所有的虛擬機都直接運行於硬件之上,虛擬機運行的效率非常的高,虛擬機之間的隔離性非常的好。
當然,傳說只是傳說。我剛開始也是很納悶,怎么可能讓所有的虛擬機都直接運行於硬件之上。后來我終於知道,這只是一個噱頭。虛擬機和硬件之間,還是有一個管理層的,那就是 Xen Hypervisor。當然 Xen Hypervisor 的功能畢竟是有限的,怎么樣它也比不上一個操作系統,因此,在 Xen Hypervisor 上運行的虛擬機中,有一個虛擬機是具有特權的,它稱之為 Domain 0,而其它的虛擬機都稱之為 Domain U。
Xen的架構如下圖:
從圖中可以看出,Xen 虛擬機架構中沒有 Host System,在硬件層之上是薄薄的一層 Xen Hypervisor,在這之上就是各個虛擬機了,沒有 Host System,只有 Domain 0,而 Guest System 都是 Domain U,不管是 Domain 0 還是 Domain U,都是虛擬機,都是被虛擬機軟件管理的對象。
既然 Domain 0 也是一個虛擬機,也是被管理的對象,所以可以給它分配很少的資源,然后將其余的資源公平地分配到其它的 Domain。但是很奇怪的是,所有的虛擬機管理軟件其實都是運行在這個 Domain 0 中的。同時,如果要連接到其它 Guest System 的控制台,而又不是使用遠程桌面(VNC)的話,這些控制台也是顯示在 Domian 0 中的。所以說,這是一個奇異的架構,是一個讓人很不容易理解的架構。
這種架構桌面用戶不喜歡,因為 Host System 變成了 Domain 0,本來應該掌控所有資源的主操作系統變成了一個受管理的虛擬機,本來用來打游戲、編程、聊天的主戰場受到限制了,可能不能完全發揮硬件的性能了,還有可能運行不穩定了,自然會心里不爽。(Domain 0確實不能安裝專用顯卡驅動,確實會運行不穩定,這個后面會講。)但是企業級用戶喜歡,因為所有的 Domain 都是虛擬機,所以可以更加公平地分配資源,而且由於 Domain U 不再是運行於 Domian 0 里面的軟件,而是和 Domain 0 平級的系統,這樣即使 Domain 0 崩潰了,也不會影響到正在運行的 Domain U。(真的不會有絲毫影響嗎?我表示懷疑。)
下面開始在 Ubuntu 系統中體驗 Xen。使用如下命令可以在 Ubuntu 的軟件源中搜索和 Xen 相關的軟件包以及安裝 Xen Hypervisor:
sudo aptitude search xen sudo aptitude install xen-hypervisor-4.4-amd64
傳說在舊版本的 Xen Hypervisor 上只能運行經過修改過的 Linux 內核。但是在目前的版本中不存在該問題。我機器上的 Ubuntu 14.10 系統不經任何修改,就可以當成 Domain 0 中的系統運行。至於是否讓該系統運行於 Xen Hypervisor 上,在啟動時可以選擇,如下圖:
通過查看 Grub 的配置文件,可以看到通過 Xen 虛擬機啟動 Ubuntu 系統時,Grub 先啟動的是 /boot/xen-4.4-amd64.gz,然后才把 Linux 內核以及 initrd 文件作為模塊載入內存。也就是說,Grub 啟動 Xen Hypervisor,然后 Xen Hypervisor 運行 Domian 0。
前面提到 Host System 一下子變成了 Domain 0 中的操作系統是讓桌面用戶比較不爽的事,這里詳細論述。雖然說目前的 Xen 同時支持全虛擬化和半虛擬化,支持操作系統不經任何修改就運行於 Xen 虛擬機上(全虛擬),但是系統是否穩定還是和內核有很大關系的。比如說我在 Ubuntu 14.04 剛推出的那段時間,在 Ubuntu 14.04 中使用 Xen 是沒有什么問題的,但是經過幾次系統升級后,Xen 就出問題了,沒辦法成功進入 Domain 0 中的 Ubuntu 14.04。現在我用的是 Ubuntu 14.10,已經升過好幾次級了,目前使用Xen還是很穩定的。其次就是顯卡驅動的問題,我的 Ubuntu 當主系統用時,使用的是 NVIDIA 的顯卡驅動,但是當 Ubuntu 運行於 Domain 0 中時,就不能使用 NVIDIA 的顯卡驅動了,否則無法進入圖形界面。
下面來測試一下 Xen 虛擬機的運行效果。通過前文的探討,可以看出一個虛擬機的運行需要兩個要素:一是一套虛擬的硬件系統,二是一個包含了操作系統的磁盤鏡像。QEMU 虛擬機關於硬件的配置全由命令行指定,VirtualBox 虛擬機的硬件配置存在於配置文件中,而 Xen 呢,它也存在於配置文件中,這個配置文件要我們自己寫。至於磁盤鏡像,還是復用我之前創建的那個 WinXP.img 吧,記住,它是 qcow2 格式的。
先進入我主目錄的 virtual-os 目錄,ls 看一下,里面有我之前創建的 WinXP.img。然后,我們創建一個 WinXP_Xen.hvm 配置文件,其內容如下:
builder = "hvm" name = "WinXP_Xen.hvm" memory = 2048 vcpus = 2 disk = [ '/home/youxia/virtual-os/WinXP.img, qcow2, hda, rw' ] sdl = 1
這段配置文件很簡單,也很容易懂。 hvm 代表這是一個全虛擬化的虛擬機,和全虛擬化相對的是半虛擬化,半虛擬化只能運行經過修改的內核,但是可以獲得更高的性能。為該虛擬機分配 2 個 CPU 和 2G 內存,並指定硬盤鏡像文件。最后一個 sdl=1 表示使用 SDL 圖形庫顯示虛擬操作系統的界面,如果不想用 SDL,也可以寫成 vnc=1,這樣需要使用 vncviewer 才能連接到虛擬機操作系統的桌面。
至於 Xen 的配置文件怎么寫,管理命令怎么用,這個必須得有學習資料。通過 man xl 和 man xl.cfg 查看手冊頁是可以的,但是最全面的資料還是在Xen的官網 http://www.xenproject.org 上。
使用 sudo xl list 命令可以看到系統中只有一個Domain 0在運行,然后使用 sudo xl create -c WinXP_Xen.hvm 即可運行一個 Domian U 虛擬機,該虛擬機使用 WinXP_Xen.hvm 配置文件。 xl 命令的 -c 選項表示把 Domain U 的控制台顯示在 Domain 0 中,如果不用 -c 選項而使用 -V 選項,則創建虛擬機后使用 vncviewer 進行連接。新建的虛擬機運行起來后,再次使用 sudo xl list 命令,可以看到除了Domain 0,還多了一個名稱為“WinXP_Xen.hvm”的虛擬機。運行效果如下圖:
關於 Xen 更多更高級的功能,比如動態遷移什么的,我這里就不試了。至於說到 Xen 虛擬機的隔離性,如果一個 Domain U 崩潰了,肯定是不會影響到 Domain 0和其它 Domain U 的,但是如果 Domain 0 崩潰了,Domain U 真的不會受到任何影響嗎?Domain 0 崩潰了怎么重啟它呢?這都是我沒想明白的問題。在折騰 Xen 的過程中,我曾多次重啟過機器,重啟后一看,WinXP_Xen.hvm 還在繼續運行,似乎是沒有受到 Domain 0 的影響,但是我就想,我機器都重啟了,電源都斷了,Domain U 它真的能絲毫不受影響嗎?
總結:
1.Xen 虛擬機不應該是桌面用戶的首選,因為它架構比較奇異不容易理解,可能因內核升級而出現不穩定,不能充分發揮桌面硬件的性能,比如顯卡;桌面用戶還是應該首選 VirtualBox。
2.企業及客戶可以考慮 Xen,因為它可以提供較好的性能和隔離性,企業級用戶不需要桌面用戶那么多的功能,所以可以把 Domain 0 做到很薄,可以完全不要圖形界面,也不用經常升級內核,甚至可以選擇一個經過修改優化的內核,這樣就可以在一套硬件上運行盡可能多的虛擬機。
關於 Linux 下虛擬機相關的內容,就寫到這里吧。歡迎大家批評指正。
(京山游俠於2015-03-08發布於博客園,轉載請注明出處。)