1、KVM虛擬機簡介
linux
Kernel-based Virtual Machine的簡稱,是一個開源的系統虛擬化模塊,自Linux2.6.20以後繼承Linux的主要發行版本中。它使用Linux自身的調度器進行管理,因此相對於Xen,其核心源碼不多。KVM目前已成爲學術界的VMM之一。ubuntu
Kvm僅僅是一個linux內核的模塊,當在linux中安裝了kvm後,linux會變成了hypervisor,即VMM,進行CPU和內存的虛擬管理,而qemu工具,實現虛擬機的建立管理,monitor管理各個IO設備,redhat在購買掉kvm後,專門定製了適合於redhat系統的qemu-kvm管理工具。vim
Kvm只能運行在支持硬件虛擬化的CPU上,而且只支持64bits系統。kvm屬於徹底虛擬化的實現軟件。api
2、KVM架構緩存
如上kvm架構圖 安裝了kvm後的內核變得很詭異,其模式分爲了三部分:內核模式,用戶模式,來賓模式 VCPU:用線程模擬實現的CPU KVM的主要兩類組件: 一、/dev/kvm:管理虛擬機的設備文件,用戶空間的程序可經過調用其ioctl()來完成虛擬機的建立啓動等管理工做,它是一個字符設備;其主要完成的操做包括: 建立虛擬機; 爲虛擬機分配內存; 讀、寫VCPU的寄存器; 向VCPU注入中斷請求; 運行VCPU; 二、qemu進程:工做於用戶空間的組件,用於方針PC機的I/0類硬件設備。
3、KVM內存管理bash
KVM繼承了Linux系統管理內存的諸多特性,好比分配給虛擬使用的內存能夠被交換至交換空間、可以使用大內存頁以實現更好的性能,以及對NUMA的 的支持可以讓虛擬機高效訪問更大的內存空間等。服務器
KVM基於Intel的EPT(Extended Page Table)或AMD的RVI(Rapid Virtualization Indexing)技術能夠支持更新的內存虛擬功能,這能夠下降CPU的佔用率,並提升較好的吞吐量。網絡
此外,KVM還藉助於KSM(Kernel Same-page Merging)這個內核特性實現了內存頁面恭喜那個。KSM 經過掃描每一個虛擬機的內存查找各虛擬機間相同的內存頁,並將這些內存合併爲一個被各類相關虛擬機共享的單獨頁面。在某虛擬機試圖修改此頁面中的數據時,KSM會從新爲其提供一個新的頁面副本。實踐中,運行於同一臺物理主機上的具備相同GuestOS的虛擬機之間出現相同內存頁面的機率是很大的,好比共享庫,內核或其餘內存對象等都有可能表現爲相同的內存頁,所以KSM技術能夠下降內存佔用而提升總體性能。架構
4、KVM的管理工具socket
下面咱們重點講解qemu-kvm工具
5、使用qemu-kvm管理KVM虛擬機
Qemu是一個普遍使用的開源計算機仿真器和虛擬機。看成爲仿真器時,能夠在一種架構(如PC機)下運行另外一種架構如(ARM)的操做系統和程序。而經過動態轉換,其能夠得到很高的運行效率,看成爲一個虛擬機時,qemu能夠經過直接使用真機的系統資源,讓虛擬系統可以得到接近於物理機的性能表現。qemu支持xen或者kvm模式下的虛擬化。當用kvm時,qemu能夠虛擬x8六、服務器和嵌入式powerpc,以及s390的系統
Qemu當運行與主機架構相同的目標架構時可使用KVM。例如當在一個x86兼容處理器上運行qemu-system-x86時,能夠利用kvm加速——爲宿主機和客戶機提供更好的性能
Qemu的組成部分:
處理器模擬器(x8六、PowerPC和Sparc)
仿真設備(顯卡、網卡、硬盤、鼠標等)
用於將仿真設備鏈接至主機設備(真實設備)的通用設備;
模擬機的描述信息;
調試器;
與模擬器交互的用戶接口;
6、使用qemu-kvm安裝Guest虛擬機
qemu-kvm相似於基於libvirt的工具如virt-manager和virt-install。直接使用qemu-kvm命令一樣能夠完成虛擬機的建立於管理
qemu-kvm命令
在RHEL6中,qemu-kvm位於/usr/libexec目錄中。因爲此目錄不屬於PATH環境變量,故沒法直接使用,這樣也組織了能夠直接使用qemu做爲建立並管理虛擬機。若是想使用qemu虛擬機,能夠經過將?usr/libexe/qemu-kvm連接爲/usr/bin/qemu實現
#ln -sv /usr/lib/exec/qemu-kvm /usr/bin/qemu-kvm
qemu-kvm命令格式
qemu-kvm [options] [disk_p_w_picpath] ,其選項很是多,不過大體能夠分爲以下幾類
標準選項;
USB選項;
顯示選項;
i386平臺專用選項;
網絡選項;
字符設備選項;
藍牙相關選項;
Linux系統引導專用選項;
調試/專家模式選項;
PowerPC專用選項;
Sparc32專用選項;
一、qemu-kvm的標準選項
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
二、qemu-kvm的顯示選項
顯示選項用於定義虛擬機啓動後的顯示接口相關類型及屬性等。 -nographic:默認狀況下,qemu使用SDL來顯示VGA輸出;而此選項用於禁止圖形接口,此時,qemu相似一個簡單的命令行程序,其仿真串口設備將被重定向到控制檯; -curses:禁止圖形接口,並使用curses/ncurses做爲交互接口; -alt-grab:使用Ctrl+Alt+Shift組合鍵釋放鼠標; -ctrl-grab:使用右Ctrl鍵釋放鼠標; -sdl:啓用SDL; -spice option[,option[,...]]:啓用spice遠程桌面協議;其有許多子選項,具體請參照qemu-kvm的手冊; -vga type:指定要仿真的VGA接口類型,常見類型有: cirrus:Cirrus Logic GD5446顯示卡; std:帶有Bochs VBI擴展的標準VGA顯示卡; vmware:VMWare SVGA-II兼容的顯示適配器; qxl:QXL半虛擬化顯示卡;與VGA兼容;在Guest中安裝qxl驅動後能以很好的方式工做,在使用spice協議時推薦使用此類型; none:禁用VGA卡; -vnc display[,option[,option[,...]]]:默認狀況下,qemu使用SDL顯示VGA輸出;使用-vnc選項,可讓qemu監聽在VNC上,並將VGA輸出重定向至VNC會話;使用此選項時,必須使用-k選項指定鍵盤佈局類型;其有許多子選項,具體請參照qemu-kvm的手冊;
三、i386平臺專用選項
-no-acpi:禁用ACPI功能,GuestOS與ACPI出現兼容問題時使用此選項; -balloon none:禁用balloon設備; -balloon virtio[,addr=addr]:啓用virtio balloon設備;
四、網絡屬性相關選項
網絡屬性相關選項用於定義網絡設備接口類型及其相關的各屬性等信息。這裏只介紹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、i8255一、i82557b、i82559er、ne2k_isa、pcnet、rtl813九、e1000、smc91c1十一、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)來配置當前網絡接口,並使用downscript=file指定的腳本(默認爲/etc/qemu-ifdown)來撤消接口配置;使用script=no和downscript=no可分別用來禁止執行腳本; -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
7、使用qemu-kvm安裝ubuntu虛擬機
1. 使用vmware虛擬機,須要確保硬件輔助實現CPU徹底虛擬化
二、查看hypervisor是否支持虛擬化
# grep -Ei "vmx|svm" /proc/cpuinfo --color=auto 其中vmx表明intel的cpu支持虛擬化,svm表明AMD的cpu支持虛擬化
三、查看當前系統中關於kvm模塊
# grep -i "kvm" /boot/config-2.6.32-431.el6.x86_64 CONFIG_KVM_CLOCK=y CONFIG_KVM_GUEST=y CONFIG_HAVE_KVM=y CONFIG_HAVE_KVM_IRQCHIP=y CONFIG_HAVE_KVM_EVENTFD=y CONFIG_KVM_APIC_ARCHITECTURE=y CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y CONFIG_KVM=m CONFIG_KVM_INTEL=m CONFIG_KVM_AMD=m
四、裝載kvm和kvm_intal模塊
# modprobe kvm # modprobe kvm_intel # lsmod | grep kvm kvm_intel 54285 0 kvm 333172 1 kvm_intel
五、安裝qemu-kvm qemu-kvm-tools虛擬機管理工具
# yum -y isntall qemu-kvm qemu-kvm-tools
六、配置qemu-kvm程序的環境變量
# ln -sv /usr/libexec/qemu-kvm /usr/sbin
七、建立磁盤鏡像文件
# mkdir /p_w_picpaths/vm1 -pv # qemu-img create -f qcow2 -o size=100G /p_w_picpaths/vm1/ubuntu.qcow2 qemu-img命令解析 qemu-img是qemu用來實現磁盤映像管理的工具組件,其有不少子命令,分別用於實現不一樣的管理功能,而每個子命令也都有一系列不一樣的選項。語法格式爲「qemu-img subcommand [options]」,其支持的子命令以下 create:建立一個新的磁盤映像文件 check:檢查磁盤映像文件中的錯誤 convert:轉換磁盤映像的格式 info:顯示指定磁盤映像的信息 snapshot:管理磁盤映像的快照 commit:提交磁盤映像的全部改變 rbase:基於某磁盤映像建立新的映像文件 resize:增大或縮減磁盤映像文件的大小
八、得到ubuntu鏡像文件存放於/root目錄
# ls /root ubuntu-12.04.1-desktop-i386.iso
九、安裝vnc服務器端與客戶端
# yum -y install tigervnc-server tigervnc
十、建立橋設備
# brctl addbr br0 # ifconfig eth0 0 up # brctl addif br0 eth0 # ifconfig br0 172.16.13.2/16 up # route add default gw 172.16.0.1 # brctl stp br0 on
十一、建立/etc/qemu-ifup腳本
#vim /etc/qemu-ifup 內容以下 #!/bin/bash # switch=br0 if [ -n "$1" ];then ifconfig $1 up sleep 0.5s brctl addif $switch $1 exit 0 else echo "Error: no specifed interface" exit1 fi
十二、建立虛擬機
# qemu-kvm -name "ubuntu" -m 768 -smp 4 -drive file=/p_w_picpaths/vm1/ubuntu.qcow2,if=ide,index=0,media=disk,format=qcow2 -drive file=/root/ubuntu-12.04.1-desktop-i386.iso,media=cdrom,index=1 -boot order=dc -net nic -net tap,name=vnet0,downscript=no VNC server running on `::1:5900'
1三、經過vnc客戶端鏈接至虛擬機安裝
# vncviewer :5900
接下來就是系統安裝的過程
經過使用qemu-kvm工具建立虛擬機實例成功!