首頁 > 軟體

Linux入門學習教學:虛擬機器體驗之Xen篇

2020-06-16 18:05:02

  這一篇我要體驗的虛擬機器系統是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下虛擬機器相關的內容,就寫到這裡吧。歡迎大家批評指正。

Debian系統安裝Xen並建立Win2003虛擬機器  http://www.linuxidc.com/Linux/2014-11/109072.htm

XenServer VM物理CPU使用策略  http://www.linuxidc.com/Linux/2013-08/88698.htm

CloudStack編譯環境XenServer啟動系統虛擬機器失敗 http://www.linuxidc.com/Linux/2013-08/88694.htm

禁止CloudStack刪除XenServer原有虛擬機器 http://www.linuxidc.com/Linux/2013-08/88693.htm

XenServer中設定Linux VM從光碟機引導 http://www.linuxidc.com/Linux/2013-07/87699.htm

開啟並設定Citrix XenServer的SNMP服務 http://www.linuxidc.com/Linux/2013-01/78487.htm

重置XenServer本地磁碟LVM為EXT3格式 http://www.linuxidc.com/Linux/2013-11/92282.htm

在 Debian 上安裝和設定 Xen  http://www.linuxidc.com/Linux/2010-04/25351.htm


IT145.com E-mail:sddin#qq.com