所以,首先,我們必須知道手上的電腦 / 伺服器的 CPU 是否可執行 KVM,也就是是否支援 lntel VT 或 AMD-V ,不過,如果沒有 CPU 的相關資訊(如型號或是說明文件),該如何知道 CPU 有沒有 lntel VT 或 AMD-V 呢?有以下幾種方式可以知道:
# 備註1:這邊所謂的〝可否執行 KVM〞,並不代表,若 CPU 不支援 Intel VT 或 AMD-V 就不可以使用 KVM,這邊指的是有沒有核心模組可以來釋放 KVM 全部的效能,若 CPU 不支援虛擬化技術,還是可以安裝與使用 KVM,不過,這時實際在運作的,就不是 KVM 了,而是 QEMU。
開始檢查
方法一:若電腦 / 伺服器已經安裝 Linux 系統,在此以 Ubuntu 10.04 LTS 版本為例,只要開啟終端機,直接輸入以下指令:
$ kvm-ok
按下 Enter 鍵之後,若看到〝INFO: Your CPU supports KVM extensions〞的字串,這就表示 CPU 支援虛擬化技術。
# 備註2:若系統為 RedHat 或是 CentOS ,必須注意 SELinux 是開啟的狀態,否則之後一些動作(vitr-install)將不會正常運作,請利用〝system-config-securitylevel〞指令來確認 SELinux 的狀態,確認之後,將指令置換為〝egrep '(vmx | svm)' --color=always /proc/cpuinfo〞,或簡單一點〝egrep '(vmx | svm)' /proc/cpuinfo〞,來查看 CPU 相關訊息,如果什麼資訊都沒有,那就表示此電腦的 CPU 不支援虛擬化技術了。
方法二:取得 Ubuntu LiveCD ,以此光碟開機,進入系統之後,再由終端機輸入〝kvm-ok〞,就可以得知 CPU 是否支援虛擬化技術。
# 備註3:再次強調,若 CPU 沒有支援虛擬化技術, 還是可以安裝 KVM 套件, 只是系統會以 QEMU 來執行虛擬主機 (速度很慢)。
方法三:直接上 CPU 硬體廠商的官方網站,查詢 CPU 相關訊息即可得知。
# 備註4: Intel:http://www.intel.com/products/processor_number/
AMD:http://www.amd.com/tw/products/Pages/processors.aspx
安裝 Linux KVM
確認 CPU 是否支援虛擬化技術之後,接著就是要安裝 KVM 套件,請開啟終端機並輸入:
$ sudo apt-get install kvm
(按下 enter 鍵之後,若系統提示需要輸入密碼,請輸入管理者密碼,系統提示是否安裝套件時,請輸入〝y〞)
而 KVM 相關的安裝套件所下圖所示:
不過,一股腦的裝了一堆套件之後,怎知道 KVM 是否有在運作?其實,只要輸入以下指令,就可以知道了:
$ lsmod | grep kvm
只要看到以下的輸出結果,就可以確認 KVM 有正常在運作:
kvm_intel 44896 2
kvm 159656 1 kvm_intel
# 備註5:〝kvm_intel〞,表示 CPU 的廠商為 Intel ,若是 AMD ,則會顯示〝kvm_amd〞
還記得,前面有提到,KVM 是以模組化的方式,讓系統核心可以執行虛擬化,那到底是哪些模組呢?讓我們關心一下吧;在終端機輸入以下指令:
$ modprobe -l | grep kvm
按下 Enter 鍵之後,畫面會顯示以下訊息:
kernel/arch/x86/kvm/kvm.ko
kernel/arch/x86/kvm/kvm-intel.ko
kernel/arch/x86/kvm/kvm-amd.ko
沒錯,這三個 .ko 的檔案,就是 KVM 相關的核心模組。
# 備註6:筆者在撰寫此文章時,所接觸的 Linux 核心版本為 2.6.28 ~ 2.6.32 ,由於 KVM 是 Linux 核心支援的原生虛擬化技術,所以上述所查看到的三個 .ko 的檔案,並非因為安裝 kvm 之後才一併安裝近來的模組,而是一開始就存在於系統之內的核心模組!
KVM 安裝完成之後,與一般虛擬系統(如 VMware )最大的不同,在於套件本身並沒有包含 GUI 套件,也就是沒有視窗介面的操作環境,必須完全在終端機下,以指令與相關參數的配合,來建置與運行虛擬電腦,我想,看到這段說明,大概會使得許多人對於 KVM 退避三舍吧,但別擔心,自由軟體的好處,就是擁有無限的可能性,原生套件所沒有的東西,在許多人的努力之下,總是會慢慢成形的,也就是說, KVM 還是有相關的 GUI 套件可以安裝使用。不過,GUI 介面的相關操作,背後還是憑藉相關指令與參數的組合,來達到虛擬電腦的創建與操作,所以在使用 GUI 套件之前,還是先來熟悉一下指令的操作與參數的運用吧。
既然,需要使用指令來操作虛擬電腦的建立與運作,那 KVM 到底提供了哪些指令呢?用以下的指令,就可以查詢到 KVM 的相關操作指令:
$ ls -la / usr/bin | grep kvm
查詢之後的結果如下圖:
$ lsmod | grep kvm
只要看到以下的輸出結果,就可以確認 KVM 有正常在運作:
kvm_intel 44896 2
kvm 159656 1 kvm_intel
# 備註5:〝kvm_intel〞,表示 CPU 的廠商為 Intel ,若是 AMD ,則會顯示〝kvm_amd〞
還記得,前面有提到,KVM 是以模組化的方式,讓系統核心可以執行虛擬化,那到底是哪些模組呢?讓我們關心一下吧;在終端機輸入以下指令:
$ modprobe -l | grep kvm
按下 Enter 鍵之後,畫面會顯示以下訊息:
kernel/arch/x86/kvm/kvm.ko
kernel/arch/x86/kvm/kvm-intel.ko
kernel/arch/x86/kvm/kvm-amd.ko
沒錯,這三個 .ko 的檔案,就是 KVM 相關的核心模組。
# 備註6:筆者在撰寫此文章時,所接觸的 Linux 核心版本為 2.6.28 ~ 2.6.32 ,由於 KVM 是 Linux 核心支援的原生虛擬化技術,所以上述所查看到的三個 .ko 的檔案,並非因為安裝 kvm 之後才一併安裝近來的模組,而是一開始就存在於系統之內的核心模組!
KVM 安裝完成之後,與一般虛擬系統(如 VMware )最大的不同,在於套件本身並沒有包含 GUI 套件,也就是沒有視窗介面的操作環境,必須完全在終端機下,以指令與相關參數的配合,來建置與運行虛擬電腦,我想,看到這段說明,大概會使得許多人對於 KVM 退避三舍吧,但別擔心,自由軟體的好處,就是擁有無限的可能性,原生套件所沒有的東西,在許多人的努力之下,總是會慢慢成形的,也就是說, KVM 還是有相關的 GUI 套件可以安裝使用。不過,GUI 介面的相關操作,背後還是憑藉相關指令與參數的組合,來達到虛擬電腦的創建與操作,所以在使用 GUI 套件之前,還是先來熟悉一下指令的操作與參數的運用吧。
既然,需要使用指令來操作虛擬電腦的建立與運作,那 KVM 到底提供了哪些指令呢?用以下的指令,就可以查詢到 KVM 的相關操作指令:
$ ls -la / usr/bin | grep kvm
查詢之後的結果如下圖:
而這六個指令,就是之後操作 KVM 所會用的到的相關操作指令了。
你的第一個虛擬電腦
基本上,要建立一個虛擬電腦,有以下的基本順序:
第一,要分割(建立)一個硬碟空間來安裝作業系統,不過,在虛擬環境下,所謂的硬碟空間,其實只是一個檔案,安裝的作業系統與所有的資料,都存在這一個檔案裡面。
第二、以光碟開機,安裝作業系統,當然,也可以用掛載映像檔(ISO 檔案)的方式,來安裝。
第三、安裝完成,啟動作業系統,開始使用虛擬電腦。
這看起來似乎很簡單,沒錯,就是這麼簡單,要架構一個基本的虛擬電腦,差不多三個步驟就可以完成,只是需要在終端機下,以指令的方式來完成上述的三大步驟,不過別擔心,照著以下的步驟,就會發現,其實,使用基本的 KVM ,並沒有很困難。
建立硬碟檔案(或硬碟映像檔)
回到終端機畫面,在游標提示列輸入以下指令:
$ kvm-img create -f qcow2 us1042.qcow 4G
按下 Enter 鍵之後,若看到以下回應訊息,則代表硬碟檔案建立成功:
Formatting 'factory.img', fmt=qcow2 size=4294967296 encryption=off cluster_size=0
安裝作業系統
接著就要在虛擬電腦內安裝作業系統了,接著輸入以下指令:
$ kvm -m 512 -localtime -hda us1042.qcow -cdrom ubuntu-10.04-desktop-i386.iso -boot d
按下 Enter 鍵之後,就會看到跳出一個黑色視窗,不一會就會進入作業系統的安裝畫面,接著按照此作業系統的安裝步驟,一部一部的依序設定安裝,就可以啦~
大 部分的作業系統,安裝完成之後,都會要求重新開機,所安裝的虛擬電腦也不例外,不過,重新開機之後,大家應該都會傻眼,重新開機之後的視窗,怎會顯示找不 到開機檔案呢?剛剛不是才把作業系統安裝完成嗎?怎麼馬上就不能使用呢?別擔心,讓我們回想一下,剛剛在虛擬電腦內安裝作業系統時,不是指定以光碟開機 嗎?重新開機之後,光碟檔案就卸載,沒有了光碟,當然開不了機,虛擬電腦也就會跟使用者反應,無法開機嘛~
啟動虛擬電腦
讓我們先關掉虛擬電腦的運作視窗,再回到終端機畫面,並輸入以下指令:
$ kvm -m 512 -localtime -hda us1042.qcow -boot c
再按下 enter 鍵之後,虛擬電腦的運作視窗會重新開啟,就會發現,已經可以正常開啟,並登入剛剛安裝好的虛擬電腦了~
KVM 運作架構
操作了一堆指令,雖然已經學會利用 KVM 的相關指令,來架構與安裝虛擬電腦,不過,到底 KVM 是怎樣運作的呢?由以下的架構圖,可以略窺一二:
你的第一個虛擬電腦
基本上,要建立一個虛擬電腦,有以下的基本順序:
第一,要分割(建立)一個硬碟空間來安裝作業系統,不過,在虛擬環境下,所謂的硬碟空間,其實只是一個檔案,安裝的作業系統與所有的資料,都存在這一個檔案裡面。
第二、以光碟開機,安裝作業系統,當然,也可以用掛載映像檔(ISO 檔案)的方式,來安裝。
第三、安裝完成,啟動作業系統,開始使用虛擬電腦。
這看起來似乎很簡單,沒錯,就是這麼簡單,要架構一個基本的虛擬電腦,差不多三個步驟就可以完成,只是需要在終端機下,以指令的方式來完成上述的三大步驟,不過別擔心,照著以下的步驟,就會發現,其實,使用基本的 KVM ,並沒有很困難。
建立硬碟檔案(或硬碟映像檔)
回到終端機畫面,在游標提示列輸入以下指令:
$ kvm-img create -f qcow2 us1042.qcow 4G
- kvm-img:KVM 建立硬碟檔案的指令
- create:建立的參數
- -f qcow2 :指定硬碟檔案的格式(以此為例, qcow2 為 QEMU 第二版的檔案格式,且是採用〝隨需擴增〞的模式)
- us1042.qcow:硬碟檔案名稱,其中,〝.qcow〞的副檔名,只是方便辨識,也可以任意設定
- 4G:指定硬碟檔案的大小,這樣設定,表示最終硬碟檔案的大小最大只到 4G,且預設採用的是動態增加使用空間,直到 4G ,而不是一次劃分出 4G 來使用。
按下 Enter 鍵之後,若看到以下回應訊息,則代表硬碟檔案建立成功:
Formatting 'factory.img', fmt=qcow2 size=4294967296 encryption=off cluster_size=0
安裝作業系統
接著就要在虛擬電腦內安裝作業系統了,接著輸入以下指令:
$ kvm -m 512 -localtime -hda us1042.qcow -cdrom ubuntu-10.04-desktop-i386.iso -boot d
- kvm:執行 KVM
- -m 512 :指定虛擬電腦的記憶體為 512 MB
- -localtime:指定以實體電腦的時間為虛擬電腦的時間
- -hda us1042.qcow:指定硬碟檔案,也就是前一步驟所建立的檔案,若檔案不在當前的執行目錄內,記得要給完整的檔案所在路徑。
- -cdrom ubuntu-10.04.2-desktop-i386.iso:指定要安裝的光碟(或映像檔)
- -boot d :指定以光碟開機
按下 Enter 鍵之後,就會看到跳出一個黑色視窗,不一會就會進入作業系統的安裝畫面,接著按照此作業系統的安裝步驟,一部一部的依序設定安裝,就可以啦~
大 部分的作業系統,安裝完成之後,都會要求重新開機,所安裝的虛擬電腦也不例外,不過,重新開機之後,大家應該都會傻眼,重新開機之後的視窗,怎會顯示找不 到開機檔案呢?剛剛不是才把作業系統安裝完成嗎?怎麼馬上就不能使用呢?別擔心,讓我們回想一下,剛剛在虛擬電腦內安裝作業系統時,不是指定以光碟開機 嗎?重新開機之後,光碟檔案就卸載,沒有了光碟,當然開不了機,虛擬電腦也就會跟使用者反應,無法開機嘛~
啟動虛擬電腦
讓我們先關掉虛擬電腦的運作視窗,再回到終端機畫面,並輸入以下指令:
$ kvm -m 512 -localtime -hda us1042.qcow -boot c
- -boot c:指定硬碟(硬碟檔案)開機
再按下 enter 鍵之後,虛擬電腦的運作視窗會重新開啟,就會發現,已經可以正常開啟,並登入剛剛安裝好的虛擬電腦了~
KVM 運作架構
操作了一堆指令,雖然已經學會利用 KVM 的相關指令,來架構與安裝虛擬電腦,不過,到底 KVM 是怎樣運作的呢?由以下的架構圖,可以略窺一二:
先簡單說明一下圖中相關名稱的意思:
- Hardware:這邊指的是實體電腦的硬體架構, CPU 有支援虛擬化技術( Inter VT-x or AMD V Pacifica )
- OS / VM:代表虛擬電腦
- Memory & CPU Paravirtualized(橘線): 這邊,主要要強調,由於 KVM 的虛擬化技術是 Linux 核心所支援的,所以虛擬電腦的 CPU 核心指令與記憶體的使用,可以直接通透到實體電腦的 CPU 之內,並直接進行解析與動作,不需要再透過一個轉譯的動作來傳達虛擬電腦與實體電腦之間的 CPU 核心命令
- Emulated Storage & Network(紅線、 QEMU ):這邊指的是虛擬電腦的週邊裝置,如硬碟、網路卡、顯示卡等,都是透過 QEMU 來模擬並與實體電腦進行溝通
所 以由上圖所示,可以得知 KVM 內的虛擬電腦,主要有兩大部分,第一是 CPU 與記憶體的運作,第二則是週邊裝置的連結,其中 CPU 與記憶體的部份,因為 Linux 的核心支援虛擬化技術,所以虛擬電腦 CPU 的核心指令,可以直接進入實體 CPU 來進行運作,以提高運算效能與速度,而另一的重要的環節,就是 QEMU,也就是控制所有週邊裝置的套件。
QEMU 本身就是一套虛擬系統,也可以獨力建立與安裝虛擬電腦,而 KVM ,就是以 QEMU 為基礎,搭配 CPU 虛擬化技術而創建的虛擬系統,而最初利用指令所安裝的 KVM 套件 ,實際上安裝的是 qemu-kvm ,兩者差別在於,當使用 kvm 指令來操作時,若 CPU 有支援虛擬化技術時,用的是 kvm ,反之則是 qemu。
回 頭看看操作步驟,以 KVM 來建立虛擬電腦,似乎很簡單,也好像有這麼一回事,不過,若是仔細回頭想想,似乎少了些什麼,譬如,網路卡與網路組態的設定,而在前述的指令中,好像也沒 有看到與網路相關設定的參數,沒錯,上述的三大步驟,只是建立虛擬電腦的基本動作,若要讓整個虛擬電腦運作更完善,則需要更多的參數來輔助,尤其是網路架 構, KVM 的運作模式有別於一般的虛擬系統,有點特別,不過,就目前單一虛擬電腦來說,是可以對外連線上網的,至於原理與設定步驟,這就留到下一章節再來討論吧~
请教,如何为每一个kvm 的 domainU 设置 CPU frequency?
回覆刪除kvm-ok沒過
回覆刪除然後lsmod | grep kvm
跑不出東西
不支援就無法了嗎?
fmt=qcow2 size=4294967296 encryption=off cluster_size=0
回覆刪除我是
fmt=qcow2 size=4294967296 encryption=off cluster_size=65536
???
不好意思,建立硬碟檔案應該是用qemu-img,我沒有找到kvm-img這個指令
回覆刪除