您好,登錄后才能下訂單哦!
一、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) 裝載模塊
[root@BAIYU_180 ~]# lsmodModule Size Used by ppdev 8537 0 vmware_balloon 7199 0 parport_pc 22690 0 parport 36209 2 ppdev,parport_pc microcode 112685 0 snd_ens1371 21587 0 snd_rawmidi 23017 1 snd_ens1371
# modprobe kvm
# modprobe kvm-intel
[root@BAIYU_173 kvm]# lsmodModule Size Used by nls_utf8 1455 1 ipv6 335589 142 vhost_net 29185 0 macvtap 10551 1 vhost_net macvlan 10324 1 macvtap tun 16934 1 vhost_net kvm_intel 55624 0 kvm 341551 1 kvm_intel ppdev 8217 0 parport_pc 22658 0 parport 36209 2 ppdev,parport_pc
3) 驗正:
/dev/kvm
三、kvm管理工具棧使用
# yum grouplist | grep -i "virtualization" #查看和虛擬化相關的所有包組 Virtualization: qemu-kvm Virtualization Client: python-virtinst, virt-manager, virt-viewer Virtualization Platform: libvirt, libvirt-client Virtualization Tools #可以不用 libguestfs
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
[root@BAIYU_173 ~]# yum install qemu-kvmDependencies Resolved======================================================================================================== Package Arch Version Repository Size========================================================================================================Installing: qemu-kvm x86_64 2:0.12.1.2-2.491.el6_8.1 updates 1.6 M Installing for dependencies: celt051 x86_64 0.5.1.3-0.el6 base 50 k glusterfs x86_64 3.7.5-19.el6 base 392 k glusterfs-api x86_64 3.7.5-19.el6 base 56 k glusterfs-client-xlators x86_64 3.7.5-19.el6 base 942 k glusterfs-libs x86_64 3.7.5-19.el6 base 303 k gpxe-roms-qemu noarch 0.9.7-6.15.el6 base 220 k qemu-img x86_64 2:0.12.1.2-2.491.el6_8.1 updates 837 k seabios x86_64 0.6.1.2-30.el6 base 93 k sgabios-bin noarch 0-0.3.20110621svn.el6 base 6.6 k spice-server x86_64 0.12.4-13.el6.1 updates 346 k usbredir x86_64 0.5.1-3.el6 base 41 k vgabios noarch 0.6b-3.7.el6 base 42 k Transaction Summary========================================================================================================Install 13 Package(s)[root@BAIYU_173 ~]# rpm -ql qemu-kvm/etc/ksmtuned.conf /etc/modprobe.d/blacklist-kvm.conf /etc/rc.d/init.d/ksm /etc/rc.d/init.d/ksmtuned /etc/sasl2/qemu-kvm.conf /etc/sysconfig/ksm /etc/sysconfig/modules/kvm.modules /etc/udev/rules.d/80-kvm.rules /usr/libexec/qemu-kvm /usr/sbin/ksmtuned /usr/share/doc/qemu-kvm-0.12.1.2/COPYING
2)qemu-kvm的使用
qemu-kvm命令使用格式為:
“qemu-kvm [options] [disk_p_w_picpath]”
其選項非常多,不過,大致可分為如下幾類。
命令選項:
標準選項:
顯示選項:
i386平臺專用選項
字符設備選項
藍牙設備選項
Linux啟動專用選項
調試/專家模式選項
cirros project:為cloud環境測試vm提供的微縮版Linux的磁盤映像文件
官網下載地址:http://download.cirros-cloud.net/
創建并啟動虛擬機:
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
[root@BAIYU_173 ~]# cd /p_w_picpaths/kvm/[root@BAIYU_173 kvm]# lscirros-0.3.4-x86_64-disk.img[root@BAIYU_173 kvm]# qemu-kvm -m 128 -smp 2 -name test -hda /p_w_picpaths/kvm/cirros-0.3.4-x86_64-disk.img VNC server running on `::1:5900' #這里啟動了VNC server可以查看到:[root@BAIYU_173 ~]# netstat -nlptu|grep 5900tcp 0 0 ::1:5900 :::* LISTEN 3191/qemu-kvm [root@BAIYU_173 ~]# ps aux|grep qemu-kvmroot 3191 15.0 8.1 492796 82944 pts/3 Sl+ 22:39 0:14 qemu-kvm -m 128 -smp 2 -name test -hda /p_w_picpaths/kvm/cirros-0.3.4-x86_64-disk.img root 3242 0.0 0.0 103324 860 pts/0 S+ 22:41 0:00 grep qemu-kvm[root@BAIYU_73 ~]# yum install tigervnc #安裝vnc客戶端[root@BAIYU_173 ~]# rpm -ql tigervnc/usr/bin/vncviewer /usr/share/applications/vncviewer.desktop /usr/share/doc/tigervnc-1.1.0[root@BAIYU_173 ~]# vncviewer localhost #連上看看
按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選項來重新創建虛擬機:
[root@BAIYU_173 kvm]# qemu-img info cirros-0.3.4-x86_64-disk.img #查看磁盤映像文件的格式p_w_picpath: cirros-0.3.4-x86_64-disk.imgfile format: qcow2 virtual size: 39M (41126400 bytes)disk size: 14M cluster_size: 65536
通過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)準備磁盤映像文件
[root@BAIYU_173 ~]# qemu-img create -f qcow2 -o size=60G /p_w_picpaths/kvm/win7.imgFormatting '/p_w_picpaths/kvm/win7.img', fmt=qcow2 size=64424509440 encryption=off cluster_size=65536
(2)上傳win7的安裝文件
(3)創建并啟動win7
[root@BAIYU_173 kvm]# qemu-kvm -name win7 -smp 2 -m 1024 -drive file=/p_w_picpaths/kvm/win7.img,if=ide,media=disk,cache=writeback,format=qcow2 -drive file=/root/cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso,media=cdrom -boot order=dc,once=d
qemu-kvm的顯示選項:
顯示選項用于定義虛擬機啟動后的顯示接口相關類型及屬性等。
◇ -nographic:默認情況下,qemu使用SDL來顯示VGA輸出;而此選項用于禁止圖形接口,此時,
qemu類似一個簡單的命令行程序,其仿真串口設備將被重定向到控制臺
此時可以使用的命令:
C-a h print this helpC-a x exit emulator C-a s save disk data back to file (if -snapshot)C-a t toggle console timestamps C-a b send break (magic sysrq)C-a c switch between console and monitor C-a C-a sends C-a
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腳本:
# cat /etc/qemu-ifup #!/bin/bash#bridge=br0 #bro要事先創建好if [ -n "$1" ]; thenip link set $1 upsleep 1 brctl addif $bridge $1[ $? -eq 0 ] && exit 0 || exit 1elseecho "Error: no interface specified." #執行時后面接網卡接口exit 1fi
# cat /etc/qemu-ifdown #!/bin/bash#bridge=br0if [ -n "$1" ];thenbrctl delif $bridge $1ip link set $1 downexit 0else echo "Error: no interface specified." #執行時后面接網卡接口exit 1fi
指定使用橋接網絡接口:
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 #解決虛擬機中鼠標不同步問題
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。