文章插圖

文章插圖
是時候聊一下虛擬機了,因為我們后面即將聊的 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-i386man 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 及其工具所使用的命令行參數,直接查看其文檔即可 。
下面開始體驗 。先看看 Ubuntu 軟件源中和 QEMU 有關的包有哪些:
更多linux內核視頻教程文本資料免費獲取后臺私信【內核】 。
上一節展示的 QEMU 是一個強大的虛擬機軟件,它可以完全以軟件的形式模擬出一臺完整的電腦所需的所有硬件,甚至是模擬出不同架構的硬件,在這些虛擬的硬件之上,可以安裝完整的操作系統 。QEMU 的運行模式如下圖:
其實 VirtualBox 也是采取的這種內核模塊加速的模式 。我之所以這么說,是因為在安裝 VirtualBox 時,它會要求安裝 DKMS 。如下圖:
KVM 和 QEMU 是相輔相成的,QEMU 可以使用 KVM 內核模塊加速,而 KVM 需要使用 QEMU 運行虛擬機 。從上圖可以看到,如果要使用 Ubuntu 的包管理軟件安裝 KVM,其實安裝的就是 qemu-kvm 。而 qemu-kvm 并不是一個什么很復雜的軟件包,它只包含很少量幾個文件,如下圖:
最后,虛擬機運行的效果圖如下:
可以這么說,如果沒有 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 后,可以考察一下它所遵守的我之前提到的“經典架構”,命令和運行結果如下圖:
啟動 VirtualBox,新建虛擬機和安裝操作系統的過程我就不多說了,圖形界面很強大,一步一步執行準沒錯 。安裝完 WinXP 后,運行效果如下圖:
VirtualBox 功能非常強大,單憑我這一篇博文是不可能學會的 。好在是我這一個系列一直都是秉承“授人以魚不如授人以漁”的原則,一直都是指導折騰 Linux 系統的方法論,并貼圖讓沒有親自動手機會的人也對 Linux 系統有一個直觀的感受,也一直指出從哪里可以找到相應的學習資料 。用 dpkg -L 命令,就可以找出我前面提到的 VirtualBox 自帶的長達369頁的文檔,使用 Ubuntu 自帶的 evince 閱讀器閱讀之,如下圖:
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的架構如下圖:
既然 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 xensudo aptitude install xen-hypervisor-4.4-amd64傳說在舊版本的 Xen Hypervisor 上只能運行經過修改過的 Linux 內核 。但是在目前的版本中不存在該問題 。我機器上的 Ubuntu 14.10 系統不經任何修改,就可以當成 Domain 0 中的系統運行 。至于是否讓該系統運行于 Xen Hypervisor 上,在啟動時可以選擇,如下圖:下面來測試一下 Xen 虛擬機的運行效果 。通過前文的探討,可以看出一個虛擬機的運行需要兩個要素:一是一套虛擬的硬件系統,二是一個包含了操作系統的磁盤鏡像 。QEMU 虛擬機關于硬件的配置全由命令行指定,VirtualBox 虛擬機的硬件配置存在于配置文件中,而 Xen 呢,它也存在于配置文件中,這個配置文件要我們自己寫 。至于磁盤鏡像,還是復用我之前創建的那個 WinXP.img 吧,記住,它是 qcow2 格式的 。
先進入我主目錄的 virtual-os 目錄,ls 看一下,里面有我之前創建的 WinXP.img 。然后,我們創建一個 WinXP_Xen.hvm 配置文件,其內容如下:
builder = "hvm"name = "WinXP_Xen.hvm"memory = 2048vcpus = 2disk = [ '/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 list 命令,可以看到除了Domain 0,還多了一個名稱為“WinXP_Xen.hvm”的虛擬機 。運行效果如下圖:
【怎樣使用虛擬打印機 虛擬機怎么打印】我覺得,Xen 虛擬機不應該是桌面用戶的首選,因為它架構比較奇異不容易理解,可能因內核升級而出現不穩定,不能充分發揮桌面硬件的性能,如不能使用 Nvidia 的顯卡;桌面用戶還是應該首選 VirtualBox 。企業及客戶可以考慮 Xen,因為它可以提供較好的性能和隔離性,企業級用戶不需要桌面用戶那么多的功能,所以可以把 Domain 0 做到很薄,可以完全不要圖形界面,也不用經常升級內核,甚至可以選擇一個經過修改優化的內核,這樣就可以在一套硬件上運行盡可能多的虛擬機 。
- 洗衣粉和消毒液能混著用嗎 如何正確使用消毒液
- .js是什么意思 JS是啥意思
- 怎樣在淘寶收藏店鋪 淘寶 怎么收藏店鋪
- kms激活工具怎么激活office2010 kms激活office使用教程
- reader使用教程 reader方法
- 怎樣撩妹成功率高,準確的和女生打情罵俏的方法
- 成人高考成績怎么查詢不了 成人高考成績怎么查詢
- 醬大骨怎么做
- codeblocks下載安裝教程 codeblocks安裝使用教程
- 夫妻感情不和怎么辦 夫妻感情不和怎樣辦
