Linux 桌面玩家指南:07. Linux 中的 Qemu、KVM、VirtualBox、Xen 虛擬機器體驗
特別說明:要在我的隨筆後寫評論的小夥伴們請注意了,我的部落格開啟了 MathJax 數學公式支援,MathJax 使用 $
標記數學公式的開始和結束。如果某條評論中出現了兩個 $
,MathJax 會將兩個 $
之間的內容按照數學公式進行排版,從而導致評論區格式混亂。如果大家的評論中用到了 $
,但是又不是為了使用數學公式,就請使用 \$
轉義一下,謝謝。
想從頭閱讀該系列嗎?下面是傳送門:
- LinuxDesktop001.html" rel="nofollow,noindex" target="_blank">Linux 桌面玩家指南:01. 玩轉 Linux 系統的方法論 【約 1.1 萬字,22 張圖片】
- Linux 桌面玩家指南:02. 以最簡潔的方式打造實用的 Vim 環境 【約 0.97 萬字,7 張圖片】
- Linux 桌面玩家指南:03. 針對 Gnome 3 的 Linux 桌面進行美化 【約 0.58 萬字,32 張圖片】
- Linux 桌面玩家指南:04. Linux 桌面系統字型配置要略 【約 1.2 萬字,34 張圖片】
- Linux 桌面玩家指南:05. 發部落格必備的圖片處理和視訊錄製神器 【約 0.25 萬字,14 張圖片】
- Linux 桌面玩家指南:06. 優雅地使用命令列及 Bash 指令碼程式語言中的美學與哲學 【約 1.4 萬字,16 張圖片】
前言
是時候聊一下虛擬機器了,因為我後面即將聊的 Linux 玩法,包括硬碟分割槽以及在同一塊硬碟上安裝多個 Linux 發行版、在 X86 的真實模式下執行 16 位的程式、探索 Grub 和 Linux 純字元模式等等,要截圖和錄影的話,必須藉助於虛擬機器。
說起虛擬機器,大家都不陌生。需要使用虛擬機器的場景也非常的多,對於有志於寫作業系統的同志,往往需要一個虛擬機器來執行和除錯他寫的系統;對於喜歡研究網路體系結構的朋友,往往需要在自己的電腦上虛擬出 N 個系統組成各種各樣的網路。(這個需要電腦的配置夠強大才行,幸好本人的電腦夠。)還有些朋友用著 Windows 卻想玩 Linux,用著 Linux 卻想玩 Windows,這樣用虛擬機器玩起來也比較方便;最後對於在 Linux 環境下解決起來比較困難的一些需求,如迅雷、QQ、網銀、支付寶等,使用虛擬機器安裝一個 Windows 系統,也可以非常輕鬆地搞定。我自己也經常在 Windows 中用 VMWare,感覺它功能強大、使用方便,執行效率也非常高。我的部落格中有不少內容都是在虛擬機器中折騰出來的。在 Linux 系統下,我也用虛擬機器,這一篇隨筆就向大家展示一下 Linux 中的幾種常見的虛擬機器軟體。
虛擬機器的分類很複雜。什麼全虛擬、半虛擬什麼的搞得人頭暈。而且桌面使用者和企業級使用者對虛擬機器的期望值是不一樣的。比如說,我可能期望這樣一個虛擬機器:
1.它能模擬出一臺完整的個人電腦,我可以給它安裝任何我想安裝的作業系統;
2.它要有比較好用的圖形介面,模擬出的電腦也要能無障礙執行 Windows 或 Gnome 這樣的圖形系統,能打遊戲最好;
3.客戶作業系統所用的硬碟就是宿主作業系統中的一個映象檔案,隨時可複製貼上,隨時可打包帶走;
4.最好能模擬出一些本身不存在的硬體,像多個網絡卡什麼的。
很顯然,VMWare Workstation 就是這樣一個可以完美滿足我要求的桌面使用者最滿意的虛擬機器。我經常使用它來折騰各個 Linux 發行版,而且執行流暢。當然,在 Linux 這個開源的世界我們是不該去使用破解版這樣的東西的。不過不用擔心,在 Linux 江湖中,還有 VirtualBox、QEMU 這樣的虛擬機器軟體可用。
而企業級使用者呢,他們期望的虛擬機器可能是這樣的:
1.它不一定要能模擬出一臺完整的電腦,重點是 CPU、記憶體、磁碟和網絡卡,重點是能當伺服器使用;
2.它效能一定要好,虛擬的 CPU 效能一定要接近物理 CPU,一定要充分利用物理 CPU 的所有特性,為了效能,甚至只能安裝經過修改過核心的作業系統;(所謂的半虛擬化技術。)
3.它隔離性一定要好,它的目的是把一臺機器分成 N 臺機器用,而管理這 N 臺虛擬機器的宿主機要越不佔用資源越好,客戶機是主,宿主機是次;(正如 Xen 這樣。)
4.由於企業級使用者對效能的追求,所以客戶機所用的硬碟可能真是一個獨立的物理硬碟、磁碟陣列、網路檔案系統什麼的,而不僅僅只是宿主機上的一個映象檔案;
5.它不一定需要有圖形介面,因為使用命令列更容易管理,像自動化啊、遠端化啊、批量化啊什麼的;
6.更多的企業級高可用性需求,像什麼熱備份啊、動態遷移啊等等。
從上面這些期望值可以看出,虛擬機器領域水很深,市場前景也很廣闊。各個虛擬機器廠家把自家產品吹得天花亂墜那也是很常見的,因為每一個使用者期望的點都可以大做文章嘛。所謂臨淵羨魚,不如退而結網,各種虛擬機器看得再過癮,也不如自己嘗試一下。
能模擬不同硬體架構的虛擬機器 —— QEMU
還是老規矩,先給出參考資料,它的學習資料還在這裡: QEMU 的官方文件 。
或者,在自己的系統中輸入如下命令檢視手冊頁:
man qemu-system-i386 man qemu-img 等等...
QEMU 本身是一個非常強大的虛擬機器,甚至在 Xen、KVM 這些虛擬機器產品中都少不了 QEMU 的身影。在 QEMU 的官方文件中也提到,QEMU 可以利用 Xen、KVM 等技術來加速。為什麼需要加速呢,那是因為如果單純使用 QEMU 的時候,它裡面的 CPU 等硬體都是模擬出來的,也就是全虛擬化,所以執行速度是肯定趕不上物理硬體的。它甚至可以模擬不同架構的硬體,比如說在使用 Intel X86 的 CPU 的電腦中模擬出一個 ARM 體系的電腦或 MIPS 體系的電腦,這樣模擬出的 CPU,執行速度更加不可能趕上物理 CPU。使用加速以後呢,可以把客戶作業系統的 CPU 指令直接轉發到物理 CPU,自然執行效率大增。
QEMU 同時也是一個非常簡單的虛擬機器,給它一個硬碟映象就可以啟動一個虛擬機器,如果想定製這個虛擬機器的配置,用什麼樣的 CPU 啊、什麼樣的顯示卡啊、什麼樣的網路配置啊,只需要指定相應的命令列引數就可以了。它支援許多格式的磁碟映象,包括 VirtualBox 建立的磁碟映象檔案。它同時也提供一個建立和管理磁碟映象的工具 qemu-img。QEMU 及其工具所使用的命令列引數,直接檢視其文件即可。
我的電腦是 Intel 的 CPU,而我想虛擬的也是個人電腦,所以我安裝的自然是 qemu-system-x86,另外一個有用的是 qemu-utils。檢視 QEMU 軟體包中的工具及文件:

使用 qemu-img 建立磁碟映像檔案,使用 qemu-system-i386 啟動虛擬機器,並安裝作業系統:

WinXP 估計是目前全網路上最好下載的作業系統了。執行以上命令後,彈出熟悉的系統安裝介面。安裝過程我就不囉嗦了。下圖是安裝完 WinXP 作業系統之後的效果。可以給 qemu-system-i386 指定更多的引數,在再一次啟動 WinXP 的時候,我除了給它分配了 2G 記憶體,我還使用 -smp 2 引數為它分配了兩個 CPU,還使用 -vga vmware 為它指定和 VMWare 虛擬顯示卡一樣的顯示卡。雖然指定兩個 CPU,但是效能仍較差。隨便拖動一下視窗 CPU 使用率就飆升到 100%。

而且從上圖中可以看到,虛擬機器中的 CPU 雖然顯示為 3.5GHz,但是很顯然是 QEMU 模擬出來的,和物理 CPU 有顯著差別。事實上我的電腦配置相當強悍,Core i7-4770K 的四核八執行緒 CPU,請看 lshw 的輸出結果:

Intel Core i7-4770K 的 CPU,虛擬出的 XP 也分配了 2G 的記憶體和兩個 CPU,但是流暢度仍較差。說明單純使用 QEMU 還是不能滿足我們桌面使用者的需要。配合Xen 或者 KVM 呢?效能是否會有質的飛躍呢?
被加入 Linux 核心的虛擬機器 —— KVM
上一節展示的 QEMU 是一個強大的虛擬機器軟體,它可以完全以軟體的形式模擬出一臺完整的電腦所需的所有硬體,甚至是模擬出不同架構的硬體,在這些虛擬的硬體之上,可以安裝完整的作業系統。QEMU 的執行模式如下圖:

很顯然,這種完全以軟體模擬硬體的形式雖然功能強大,但是效能難以滿足使用者的需要。模擬出的硬體的效能和物理硬體的效能相比,必然會大打折扣。為了提高虛擬機器軟體的效能,開發者們各顯神通。其中,最常用的辦法就是在主作業系統中通過核心模組開一個洞,通過這個洞將虛擬機器中的操作直接對映到物理硬體上,從而提高虛擬機器中執行的作業系統的效能。如下圖:

其中 KVM 就是這種加速模式的典型代表。在社群中,大家常把 KVM 和 Xen 相提並論,但是它們其實完全不一樣。從上圖可以看出,使用核心模組加速這種模式,主作業系統仍然占主導地位,核心模組只是在主作業系統中開一個洞,用來連線虛擬機器和物理硬體,給虛擬機器加速,但是虛擬機器中的客戶作業系統仍然受到很大的限制。這種模式比較適合桌面使用者使用,主作業系統仍然是他們的主戰場,不管是辦公還是打遊戲,都通過主作業系統完成,客戶作業系統只是按需使用。至於 Xen,則完全使用不同的理念,比較適合企業級使用者使用,桌面使用者就不要輕易去碰了,具體內容我後面再講。
其實 VirtualBox 也是採取的這種核心模組加速的模式。我之所以這麼說,是因為在安裝 VirtualBox 時,它會要求安裝 DKMS。如下圖:

熟悉 Linux 的人知道,DKMS 就是為了方便使用者管理核心模組而存在的,不熟悉 DKMS 的人 Google 一下也可以瞭解個大概。關於 VirtualBox 的具體使用方面的內容,我下一節再講。這一篇主要講 KVM。
KVM 和 QEMU 是相輔相成的,QEMU 可以使用 KVM 核心模組加速,而 KVM 需要使用 QEMU 執行虛擬機器。從上圖可以看到,如果要使用 Ubuntu 的包管理軟體安裝 KVM,其實安裝的就是 qemu-kvm。而 qemu-kvm 並不是一個什麼很複雜的軟體包,它只包含很少量幾個檔案,如下圖:

用 man 命令檢視一下它的文件,發現 qemu-kvm 包不僅包含的檔案很少,而且它的可執行檔案 kvm 也只是對 qemu-system-x86_64 命令的一個簡單包裝,如下圖:

那麼問題來了,kvm 核心模組究竟是由哪個包提供的呢?其實,自從 Linux 2.6 開始,kvm 就已經被加入核心了。如果非要找出 kvm 核心模組 kvm.ko 是由哪個包提供的,可以用如下命令考察一下:

寫到這裡,已經可以看出 KVM 的使用是很簡單的了。下面,我使用 KVM 執行一下上一篇中安裝的 WinXP 作業系統,體驗一下 QEMU 經過 KVM 加速後的執行效率。使用如下命令執行使用 KVM 加速的 QEMU:

可以看出,使用 KVM 加速後,虛擬機器中的 WinXP 執行速度提升了不少,開機只用了 34 秒。我將解析度調整為 1366*768,圖形介面執行也很流暢,不管是開啟 IE 瀏覽器還是 Office 辦公軟體都沒有問題,再也沒有出現 CPU 使用率飆升到 100% 的情況。如果用 ps -ef | grep qemu
命令檢視一下,發現 kvm 命令執行的還是 qemu-system-x86_64 程式,只不過加上了 -enable-kvm 引數,如下圖:

另外,對於桌面使用者來說,有一個好用的圖形化介面也是很重要的。雖然 QEMU 和 KVM 自身不帶圖形介面的虛擬機器管理器,但是我們可以使用第 3 方軟體,比如 virt-manager。只需要使用 sudo apt-get install virt-manager
即可安裝該軟體。該軟體依賴於 libvirt,在安裝過程中也會自動安裝。執行 virt-manager 的效果如下圖,注意必須使用 sudo 執行,因為該軟體需要超級使用者許可權:

該軟體可自動識別系統中的虛擬機器環境是 QEMU+KVM 還是 Xen。新建一個虛擬機器,由於之前安裝過一個 WinXP 系統,所以選擇匯入現有硬碟映象。點下一步後,出現如下介面:

這一步沒什麼好說的,再點下一步,如下圖:

這裡可以設定網路選項。如果勾選“在安裝前自定義配置”的話,還可以對硬體進行進一步的自定義,如下圖:

在上圖中,我們可以看到虛擬機器支援的所有虛擬顯示卡的型別,在這裡,我當然選擇的是 VMVGA,因為我以前經常用 VMWare,知道這些作業系統在 VMWare 的虛擬顯示卡設定下執行得都沒有問題。當然,其它的選項都可以試一下,不過在虛擬的作業系統中需要安裝相應的驅動程式。
最後,虛擬機器執行的效果圖如下:

可以看到,該程式提供的介面有非常豐富的功能選單,功能是非常強大的,甚至可以向虛擬機器中的作業系統傳送組合按鍵。
可以這麼說,如果沒有 VirtualBox 的話,QEMU+KVM 的組合應該是桌面使用者的首選。
VirtualBox —— 效能強大的經典架構
VirtualBox 號稱是目前開源界最強大的虛擬機器產品,在 Linux 平臺上,基本上都被大家選擇為首選的虛擬機器軟體。VirtualBox 的強大不是蓋的,畢竟其後臺是超有錢的 Oracle 公司。VirtualBox 的任性也不是蓋的,它硬是沒有使用我前文所述的那些 qemu、kvm、libvirt 等被各個虛擬機器使用的開源元件,它的前端、後端以及核心加速模組都是自己開發的,唯有遠端桌面所需要的 VNC 大約使用了 libvncserver。
我在標題中說到 VirutalBox 是使用的經典架構。所謂經典,主要體現在以下幾個方面:
1.虛擬機器及虛擬機器中的系統(Guest System)仍運行於主作業系統(Host System)之上,只是通過主作業系統的核心模組進行加速;
2.Unix 系統中 Front-End 模式的經典架構,在 VirtualBox 中,VirtualBox 的圖形介面只不過是命令列介面的虛擬機器軟體 VBoxManage 的圖形包裝而已,同時,它還提供 VBoxSDL、VBoxHeadless 等命令列工具。VBoxHeadless 就可以執行一個不顯示虛擬機器桌面的虛擬機器,如果要顯示桌面,可以執行一個遠端桌面連線它。前後端分離有一個好處,就是對於桌面使用者,可以使用前端的圖形介面簡化操作,而對於企業級使用者,可以使用命令列工具構建自動化指令碼,甚至在系統啟動時自動執行虛擬機器。
我並不是一開始就喜歡上 VirtualBox 的,一點小小的插曲差點就讓我錯過了這麼好的虛擬機器軟體。本來我剛開始看到在各個 Linux 論壇都將 VirtualBox 放到首位,而不是在新聞中鋪天蓋地的 KVM、Xen,我就覺得 VirutalBox 可能有點不夠專業,再加上第一次使用 VirtualBox 時,發現它不能完美轉發 Ctrl+Alt+Fx(x=1~12),發現它的有些配置不能完全在圖形介面中設定,需要手動更改配置檔案,然後我就放棄了。直到我掌握的正確的折騰 Linux 的方法論,看完了它長達 369 頁的使用者手冊,我才真正瞭解了它的強大,並深深愛上了它。VirtualBox 把右邊的 Ctrl 定義為 Host 鍵,要向客戶機發送 Ctrl+Alt+Fx,只需要按 Host+Fx 就行了。
首先,在 Ubuntu 中安裝 VirutalBox 是非常容易的,只需要一個 sudo apt-get install virtualbox
即可。
安裝完 VirtualBox 後,可以考察一下它所遵守的我之前提到的“經典架構”,命令和執行結果如下圖:

lsmod 命令可以看到 VirtualBox 安裝後,在主作業系統中安裝了好幾個核心模組,用來對虛擬機器進行加速。至於使用核心模組對虛擬機器加速的圖片我這裡就不再貼了,請大家參考我的上一篇。通過 dpkg -L 命令可以考察 VirtualBox 提供了哪些命令列工具。最後,通過 dpkg -S 命令可以看到,VirtualBox這個可執行程式其實是屬於 virtualbox-qt 軟體包的,它只是一個圖形介面的封裝。
啟動 VirtualBox,新建虛擬機器和安裝作業系統的過程我就不多說了,圖形介面很強大,一步一步執行準沒錯。安裝完 WinXP 後,執行效果如下圖:

從該圖中可以看出,WinXP 系統認出的 CPU 是準確的 Intel Core i7-4770K,雖然我只給它分配了兩個核心。但是顯示卡不能準確識別。之所以是這樣,是因為 WinXP 系統中沒有相應的驅動,所以,需要安裝 VirtualBox 的客戶系統增強工具。在選單欄選擇安裝增強功能,如下圖:

然後 VirtualBox 就會給 WinXP 安裝一個虛擬光碟,雙擊該光碟,就可以在 WinXP 系統中安裝客戶系統增強工具,如下圖:

客戶系統增強工具是安裝在 Guest System 中的,可以認為客戶系統增強工具主要是包含了客戶作業系統中所需要驅動,因為沒有這些驅動,客戶作業系統可能無法認識那些虛擬出來的硬體,比如虛擬顯示卡什麼的。當然,客戶系統增強工具的功能遠遠不止這些,比如顯示卡 3D 加速啊、主作業系統和客戶作業系統共享資料夾啊什麼的,還有一個最牛 B 的,那就是讓客戶作業系統進入無縫模式。比如安裝完使用者增強工具後,可以識別出顯示卡型別,並且有不同的解析度選項,如下圖:

按 Host+L 鍵,可以鍵入無縫模式,如下圖,可以看到在 Ubuntu 系統中,Ubuntu 風格的視窗和 WinXP 風格的視窗共存:

再玩大一點,使用 IE 瀏覽器訪問部落格園,如下圖:

由此可見,在 Linux 系統中使用 Windows 的軟體進行辦公不再是夢,什麼網銀、什麼 QQ,一樣毫無障礙。再按 Host+L 鍵,虛擬機器會回到視窗模式。
VirtualBox 功能非常強大,單憑我這一篇博文是不可能學會的。好在是我這一個系列一直都是秉承“授人以魚不如授人以漁”的原則,一直都是指導折騰 Linux 系統的方法論,並貼圖讓沒有親自動手機會的人也對 Linux 系統有一個直觀的感受,也一直指出從哪裡可以找到相應的學習資料。用 dpkg -L 命令,就可以找出我前面提到的 VirtualBox 自帶的長達369頁的文件,使用 Ubuntu 自帶的 evince 閱讀器閱讀之,如下圖:

當然,也可以從官網下載 VirtualBox 官方文件 pdf 版 ,放到手機上有空的時候慢慢閱讀。至於我前面說的 VirtualBox 這不能那不能什麼的,完全都是我自己不切實際的瞎說,等你看完它的文件,你就會發現它沒有什麼是不能的。就 VirtualBox 在我機器上的執行效果看,流暢度要超過前面的 QEMU+KVM組合,圖形效能也要更加強大。它的文件中還有更多更高階的玩法,仔細閱讀吧,精通命令列和配置檔案不是夢,而且 VirtualBox 並不僅僅適用於桌面使用者,對於企業級的應用,它也是可以的。
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 的官網 上。
使用 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 lis
t 命令,可以看到除了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 它真的能絲毫不受影響嗎?
我覺得,Xen 虛擬機器不應該是桌面使用者的首選,因為它架構比較奇異不容易理解,可能因核心升級而出現不穩定,不能充分發揮桌面硬體的效能,如不能使用 Nvidia 的顯示卡;桌面使用者還是應該首選 VirtualBox。企業及客戶可以考慮 Xen,因為它可以提供較好的效能和隔離性,企業級使用者不需要桌面使用者那麼多的功能,所以可以把 Domain 0 做到很薄,可以完全不要圖形介面,也不用經常升級核心,甚至可以選擇一個經過修改優化的核心,這樣就可以在一套硬體上執行儘可能多的虛擬機器。
關於 Linux 下虛擬機器相關的內容,就寫到這裡吧。歡迎大家批評指正。
求打賞
我對這次寫的這個系列要求是非常高的:首先內容要有意義、夠充實,資訊量要足夠豐富;其次是每一個知識點要講透徹,不能模稜兩可含糊不清;最後是包含豐富的截圖,讓那些不想裝 Linux 系統的朋友們也可以領略到 Linux 桌面的風采。如果我的努力得到大家的認可,可以掃下面的二維碼打賞一下:

版權申明
該隨筆由京山遊俠在2018年10月08日釋出於部落格園,引用請註明出處,轉載或出版請聯絡博主。QQ郵箱:[email protected]