虛擬化四、KVM虛擬化技術
一、KVM概述
1、KVM
Kernel-based Virtual Machine 基於核心的虛擬機器
以色列Qumranet公司研發,是核心的一個模組
2006年研發,2008被RedHat收購了
依賴於HVM技術:Intel VT-X,AMD AMD-V
2、KVM模組載入後的系統執行模式
核心模式:GuestOS執行I/O類操作,或其它的特殊指令的操作
使用者模式:代表GuestOS代為請求I/O類操作,
來賓(guest)模式:GuestOS的非I/O類操作,事實上,它被稱作虛擬機器的使用者模式
3、KVM的元件
兩類元件:
/dev/kvm:工作於hypervisor,在使用者空間可透過ioctl()系統呼叫來完成VM建立,啟動等管理功能,它是一個字元裝置,
功能:建立VM,為VM分配記憶體,讀寫VCPU的暫存器,向CPU注入中斷,執行VCPU等
qemu程式:工作於使用者空間,主要用於實現模擬PC機的I/O裝置
4、KVM特性
1)記憶體管理
將分配給VM的記憶體交換至SWAP
支援使用Huge Page(大記憶體頁);
支援使用Intel EPT或AMD RVI技術完成記憶體地址對映:GVA-->GPA-->HPA簡化為GVA-->HPA
支援KSM (Kernel Same-page Merging)
這個核心特性實現了記憶體頁面共享。KSM透過掃描每個虛擬機器的記憶體查詢各虛擬機器間相同的記憶體頁,並將這些記憶體頁合併為一個被各相關虛擬機器共享的單獨頁面。在某虛擬機器試圖修改此頁面中的資料時,KSM會重新為其提供一個新的頁面副本。實踐中,執行於同一臺物理主機上的具有相同GuestOS的虛擬機器之間出現相同記憶體頁面的機率是很的,比如共享庫、核心或其它記憶體物件等都有可能表現為相同的記憶體頁,因此,KSM技術可以降低記憶體佔用進而提高整體效能。
2)硬體支援
取決於Linux核心;
3)儲存:
本地儲存:
網路附加儲存:
儲存區域網路:
分散式儲存:例如GlustFS
4)實時遷移:
支援的GuestOS:
Linux, Windows, OpenBSD, FreeBSD, OpenSolaris;
5)裝置驅動:
IO裝置的完全虛擬化:模擬硬體
IO裝置的半虛擬化:在GuestOS中安裝驅動;virtio
virtio-blk, virtio-net, virtio-pci, virtio-console, virtio-ballon
5、KVM侷限性
一般侷限性:
CPU overcommit
時間記錄難以精確,依賴於時間同步機制
MAC地址:
VM量特別大時,存在衝突的可能性;
實時遷移:
效能侷限性:
6、KVM的工具棧介紹
分為2大類:
qemu:
qemu-kvm
qemu-img
libvirt
GUI: virt-manager, virt-viewer
CLI: virt-install, virsh
QEMU主要提供了以下幾個部分:
處理器模擬器
模擬IO裝置
關聯模擬的裝置至真實裝置;
偵錯程式
與模擬器互動的使用者介面
補充資料:
VMM:對IO的驅動有三種模式:
自主VMM:VMM自行提供驅動和控制檯;
混合VMM:藉助於OS提供驅動;
依賴於外部OS實現特權域
自我提供特權域
寄宿式VMM:
二、KVM安裝
1、安裝kvm
1) 確保CPU支援HVM
# grep -E --color=auto "(vmx|svm)" /proc/cpuinfo
2) 裝載模組
# modprobe kvm
# modprobe kvm-intel
3) 驗正:
/dev/kvm
三、kvm管理工具棧使用
1、使用qemu-kvm管理工具
基於libvirt的工具如virt-manager和virt-install提供了非常便捷的虛擬機器管理介面,但它們事實上上經二次開發後又封裝了qemu-kvm的工具。因此,直接使用qemu-kvm命令也能夠完成此前的任務。
在RHEL6上,qemu-kvm位於/usr/libexec目錄中。由於此目錄不屬於PATH環境變數,故無法直接使用,這樣也阻止了可以直接使用qemu作為建立並管理虛擬機器。如若想使用qemu虛擬機器,可以透過將/usr/libexec/qemu-kvm連結為/usr/bin/qemu實現。
1) 安裝 qemu-kvm
#yum install qemu-kvm
# ln -sv /usr/libexec/qemu-kvm /usr/bin/qemu-kvm
2)qemu-kvm的使用
qemu-kvm命令使用格式為:
“qemu-kvm [options] [disk_p_w_picpath]”
其選項非常多,不過,大致可分為如下幾類。
命令選項:
標準選項:
顯示選項:
i386平臺專用選項
字元裝置選項
藍芽裝置選項
Linux啟動專用選項
除錯/專家模式選項
cirros project:為cloud環境測試vm提供的微縮版Linux的磁碟映像檔案
官網下載地址:
建立並啟動虛擬機器:
qemu-kvm -m 128 -smp 2 -name test -hda /p_w_picpaths/kvm/cirros-0.3.4-i386.disk.img
用-drive指定磁碟映像檔案:
qemu-kvm -m 128 -name test -smp 2 -drive file=/p_w_picpaths/kvm/cirros-0.3.4-i386-disk.img,if=virtio,media=disk,cache=writeback,format=qcow2
按ctrl+alt+2可以跳轉到控制頁面,可以檢視虛擬機器的資訊,再按ctrl+alt+1可以跳轉回來
qemu-kvm的標準選項:
主要涉及指定
主機型別、CPU模式、NUMA、軟碟機裝置、光碟機裝置及硬體裝置等。
◇ -name name:設定虛擬機器名稱;
◇ -M machine:指定要模擬的主機型別,如Standard PC、ISA-only PC或Intel-Mac等,可以使用“qemu-kvm -M ?”獲取所支援的所有型別;
◇ -m megs:設定虛擬機器的RAM大小;
◇ -cpu model:設定CPU模型,如coreduo、qemu64等,可以使用“qemu-kvm -cpu ?”獲取所支援的所有模型;
◇ -smp n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus]: 設定模擬的SMP架構中CPU的個數等、每個CPU的核心數及CPU的socket數目等;PC機上最多可以模擬255顆CPU;maxcpus用於指定熱插入的CPU個數上限;
◇ -numa opts:指定模擬多節點的numa裝置;
◇ -fda file
◇ -fdb file:使用指定檔案(file)作為軟盤映象,file為/dev/fd0表示使用物理軟碟機;
◇ -hda file
◇ -hdb file
◇ -hdc file
◇ -hdd file:使用指定file作為硬碟映象;
◇ -cdrom file: 使用指定file作為CD-ROM映象,需要注意的是-cdrom和-hdc不能同時使用;將file指定為/dev/cdrom可以直接使用物理光碟機; #這個選項不知道怎麼用,
◇ -drive option[,option[,option[,...]]] :定義一個硬碟裝置;可用子選項有很多。
file=/path/to/somefile:硬體映像檔案路徑;
if=interface:指定硬碟裝置所連線的介面型別,即控制器型別,如ide、scsi、sd、mtd、floppy、pflash及virtio等;
index=index:設定同一種控制器型別中不同裝置的索引號,即標識號;
media=media:定義介質型別為硬碟(disk)還是光碟(cdrom);
snapshot=snapshot:指定當前硬碟裝置是否支援快照功能:on或off;
cache=cache:定義如何使用物理機快取來訪問塊資料,其可用值有none、writeback、unsafe和writethrough四個;
format=format:指定映像檔案的格式,具體格式可參見qemu-img命令;
◇ -boot [order=drives][,once=drives][,menu=on|off] : 定義啟動裝置的引導次序,每種裝置使用一個字元表示;不同的架構所支援的裝置及其表示字元不盡相同,在x86 PC架構上,a、b表示軟碟機、c表示第一塊硬碟,d表示第一個光碟機裝置,n-p表示網路介面卡;預設為硬碟裝置;
例如: -boot order(引導順序)=dc,once(第一次啟動時才使用)=d
我們用-drive選項來重新建立虛擬機器:
透過cdrom啟動win7的安裝
qemu-kvm -name winxp -smp 4,sockets=1,cores=2,threads=2 -m 512 -drive file=/p_w_picpaths/kvm/winxp.img,if=ide,media=disk,cache=writeback,format=qcow2 -drive file=/root/winxp_ghost.iso,media=cdrom
(1)準備磁碟映像檔案
(2)上傳win7的安裝檔案
(3)建立並啟動win7
qemu-kvm的顯示選項:
顯示選項用於定義虛擬機器啟動後的顯示介面相關型別及屬性等。
◇ -nographic:預設情況下,qemu使用SDL來顯示VGA輸出;而此選項用於禁止圖形介面,此時,
qemu類似一個簡單的命令列程式,其模擬串列埠裝置將被重定向到控制檯
此時可以使用的命令:
SDL: Simple DirectMedia Layer:簡單直接介質層 C語言開發,跨平臺且開源多媒體程式庫檔案;
在qemu中使用“-sdl”即可; #centos預設不支援
VNC: Virtual Network Computing:虛擬網路計算 使用RFB(Remote FrameBuffer遠端幀緩衝)協議遠端控制另外的主機;
CentOS 6.6啟用vnc
(1) yum install tigervnc-server
(2) vncpasswd
(3) vncserver :N #啟動某一桌面
qemu-kvm
-vnc display(地址+某個桌面),option,option
示例:-vnc :N[,password]
啟動qemu-kvm時,額外使用-monitor stdio選項,並使用
QEMU模式下使用change vnc password命令設定密碼;
qemu-kvm的 網路屬性相關選項
網路屬性相關選項用於定義網路裝置介面型別及其相關的各屬性等資訊。
這裡只介紹nic、tap和user三種型別網路介面的屬性,其它型別請參照qemu-kvm手冊。
◇ -net nic[,vlan=n][,macaddr=mac][,model=type][,name=name][,addr=addr][,vectors=v]:
建立一個新的網路卡裝置並連線至vlan n中 ;PC架構上預設的NIC為e1000,macaddr用於為其指定MAC地址, name用於指定一個在監控時顯示的網上裝置名稱 ;emu可以模擬多個型別的網路卡裝置,如virtio、i82551、i82557b、i82559er、ne2k_isa、pcnet、rtl8139、e1000、smc91c111、lance及mcf_fec等;不過,不同平臺架構上,其支援的型別可能只包含前述列表的一部分,可以使用“qemu-kvm -net nic,model=?”來獲取當前平臺支援的型別;
◇ -net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][,downscript=dfile]:
透過物理機的TAP網路介面連線至vlan n中 ,使用script=file指定的指令碼(預設為/etc/qemu-ifup)來配置當前網路介面,ifname用於指定網路卡名稱,並使用downscript=file指定的指令碼(預設為/etc/qemu-ifdown)來撤消介面配置;使用script=no和downscript=no可分別用來禁止執行指令碼;
如果建立虛擬機器時沒有指定-net選項也會預設建立一個-net user型別的網路卡
◇ -net user[,option][,option][,...]:在使用者模式配置網路棧,其不依賴於管理許可權;
有效選項有:
vlan=n:連線至vlan n,預設n=0;
name=name:指定介面的顯示名稱,常用於監控模式中;
net=addr[/mask]:設定GuestOS可見的IP網路,掩碼可選,預設為10.0.2.0/8;
host=addr:指定GuestOS中看到的物理機的IP地址,預設為指定網路中的第二個,即x.x.x.2;
dhcpstart=addr:指定DHCP服務地址池中16個地址的起始IP,預設為第16個至第31個,即x.x.x.16-x.x.x.31;
dns=addr:指定GuestOS可見的dns伺服器地址;預設為GuestOS網路中的第三個地址,即x.x.x.3;
tftp=dir:啟用內建的tftp伺服器,並使用指定的dir作為tftp伺服器的預設根目錄;
bootfile=file:BOOTP檔名稱,用於實現網路引導GuestOS;如:qemu -hda linux.img -boot n -net user,tftp=/tftpserver/pub,bootfile=/pxelinux.0
qemu-ifup和qemu-ifdown指令碼:
指定使用橋接網路介面:
qemu-kvm -m 128 -name test -smp 2 -drive file=/p_w_picpaths/kvm/cirros-0.3.4-i386-disk.img,if=virtio,media=disk,cache=writeback,format=qcow2 -net nic -net tap,script=/etc/if-up,downscript=no -nographic
四、總結一下這篇博文的內容
1、kvm組成部分:
/dev/kvm
qemu
2、安裝KVM需要裝載的模組:
modprobe kvm
modprobe kvm-intel|kvm-amd
3、KVM工具棧:
qemu-kvm, /usr/libexec
libvirt:
GUI: virt-manager
CLI: virt-install, virsh
qemu-kvm
-name 'NAME'
-m megs
-cpu ?
-smp n[,sockets=N][,cores=N][,threads=N][,maxcpus=N]
-hda|-hdb|-hdc|-hdd
-cdrom
-drive
file=, media=, if=, cache=, format=, index=, readonly #只讀方式開啟,後面不用接引數
-boot [order=drives][,once=drives][,menu=on|off]
-sdl
-vnc :0,password
-nographic
-monitor stdio # 不開啟視窗, 在本地顯示監視器的畫面,
-usbdevice tablet #解決虛擬機器中滑鼠不同步問題
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31516067/viewspace-2639825/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 虛擬化技術之kvm虛擬機器建立工具qemu-kvm虛擬機
- 虛擬化技術之kvm基礎
- 淺談GPU虛擬化技術(四)- GPU分片虛擬化GPU
- 淺談GPU虛擬化技術(四)-GPU分片虛擬化GPU
- 虛擬化技術之kvm虛擬機器建立工具virt-install虛擬機
- 玩玩虛擬化-KVM
- 【原創】Linux虛擬化KVM-Qemu分析(四)之CPU虛擬化(2)Linux
- 在Centos6.5上部署kvm虛擬化技術CentOS
- 部署KVM虛擬化平臺
- KVM虛擬化平臺管理
- KVM虛擬化環境搭建
- 虛擬化技術之kvm WEB管理工具kimchiWeb
- KVM虛擬化新型漏洞CVE-2015-6815技術分析
- 淺談GPU虛擬化技術:GPU圖形渲染虛擬化GPU
- 【原創】Linux虛擬化KVM-Qemu分析(六)之中斷虛擬化Linux
- 【原創】Linux虛擬化KVM-Qemu分析(七)之timer虛擬化Linux
- 虛擬化技術概述(一)
- Docker技術( 容器虛擬化技術 )Docker
- 吃透什麼是KVM虛擬化
- 網路虛擬化技術棧
- 【原創】Linux虛擬化KVM-Qemu分析(二)之ARMv8虛擬化Linux
- 【原創】Linux虛擬化KVM-Qemu分析(五)之記憶體虛擬化Linux記憶體
- 虛擬化技術之kvm磁碟管理工具qemu-img
- 實操:KVM虛擬化管理平臺操作
- 虛擬化技術之kvm管理工具virsh常用基礎命令(二)
- 虛擬化技術之kvm管理工具virsh常用基礎命令(一)
- 在Linux中,什麼是虛擬化?並且列出常見的虛擬化技術。Linux
- 伺服器虛擬化技術深度科普伺服器
- 【原創】Linux虛擬化KVM-Qemu分析(一)Linux
- 在 fnOS上安裝 KVM 虛擬化,並使用 Cockpit 網頁管理虛擬機器KPI網頁虛擬機
- win10虛擬化技術怎麼開啟_win10系統cpu虛擬化技術如何開啟Win10
- 伺服器虛擬化技術的優點伺服器
- NFV關鍵技術:儲存虛擬化概述
- 【虛擬化資料恢復】KVM虛擬機器誤刪除資料恢復案例資料恢復虛擬機
- 後端技術雜談6:白話虛擬化技術後端
- 啥是伺服器虛擬化,虛擬化的優勢伺服器
- 伺服器虛擬化基礎知識:如何虛擬化?伺服器
- 【原創】Linux虛擬化KVM-Qemu分析(三)之KVM原始碼(1)Linux原始碼