KVM虛擬化原理與基礎應用示例
一、KVM簡介
Kernel-based Virtual Machine的簡稱,是一個開源的系統虛擬化模組,自Linux 2.6.20之後整合在Linux的各個主要發行版本中。它使用Linux自身的排程器進行管理,所以相對於Xen,其核心原始碼很少。KVM目前已成為學術界的主流VMM之一。
KVM架構圖:
KVM從本質上講其實就是一個核心模組而已,當KVM核心被載入後,原本的核心就被KVM取代了,也就是說原先的作業系統也是跑在虛擬機器上了。
KVM的核心元件:
kvm.ko:kvm模組,通過“腐化”核心來實現虛擬化。
qemu-kvm:使用者空間工具環境,命令列工具。
1.KVM虛擬機器圖形化使用示例
安裝KVM要確定CPU支援硬體虛擬化技術:
~]# grep -E -i "(svm|vmx)" /proc/cpuinfo #若可過濾出"svm或vmx"則說明支援虛擬化
裝載kvm,並檢視是否成功:
~]# modprobe kvm
~]# ls -hl /dev/kvm crw-rw-rw-+ 1 root kvm 10, 232 Nov 8 15:51 /dev/kvm
安裝元件:
yum install -y libvirt lib-daemon-kvm qemu-kvm virt-manager
啟動服務,啟動服務後會多出一個virbr0的網絡卡,它相以NAT模式將虛擬機器連線:
~]# systemctl start libvirtd
可啟動virt-maneger來建立管理虛擬機器,使用方法和VMware類似(需要圖形介面):
~]# virt-manager
這裡可以選擇要裝載的映象,建立磁碟分割槽、網絡卡屬性等,安裝使用起來非常方便。
2.kvm中的qemu管理工具
與virt-manager不同的是Qume是KVM命令列管理工具,主要管理命令有 qemu-kvm 和 qemu-img :
基本格式: qemu-kvm [options] [disk_image]
選項有很多類別:
1.標準選項:
-machine [type=]name:-machine help來獲取列表,用於指定模擬的主機型別;
-cpu cpu:-cpu help來獲取列表;用於指定要模擬的CPU型號;
-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]:指明虛擬機器上vcpu的數量及拓撲;
-boot [order=drives][,once=drives][,menu=on|off] [,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time][,strict=on|off]
order:各裝置的引導次序:c表示第一塊硬碟,d表示第一個光碟機裝置;-boot order=dc,once=d
-m megs:虛擬機器的記憶體大小;
-name NAME:當前虛擬機器的名稱,要惟一;
2.塊裝置相關的選項:
-hda/-hdb file:指明IDE匯流排型別的磁碟對映檔案路徑;第0和第1個;
-hdc/-hdd file:第2和第3個;
-cdrom file:指定要使用光碟映像檔案;
-drive [file=file][,if=type][,media=d][,index=i] [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]:
file=/PATH/TO/SOME_IMAGE_FILE:映像檔案路徑;
if=TYPE:塊裝置匯流排型別,ide, scsi, sd, floppy, virtio,...
media=TYPE:介質型別,cdrom和disk;
index=i:設定同一型別裝置多個裝置的編號;
cache=writethrough|writeback|none|directsync|unsafe:快取方式;
format=f:磁碟映像檔案的格式;
3.顯示選項:
-display type:顯示的型別,sdl, curses, none和vnc;
-nographic:不使用圖形介面;
-vga [std|cirrus|vmware|qxl|xenfb|none]:模擬出的顯示卡的型號;
-vnc display[,option[,option[,...]]]]:啟動一個vnc server來顯示虛擬機器介面; 讓qemu程序監聽一個vnc介面;
-monitor stdio:在標準輸出上顯示monitor介面;
網路選項:
-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
為虛擬機器建立一個網路介面,並將其新增至指定的VLAN;
model=type:指明模擬出的網絡卡的型號,ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio;
-net nic,model=?
macaddr=mac:指明mac地址;52:54:00:
-net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]:
通過物理的TAP網路介面連線至vlan n;
script=file:啟動虛擬機器時要執行的指令碼,預設為/etc/qemu-ifup
downscript=dfile:關閉虛擬機器時要執行的指令碼,/etc/qemu-ifdown
ifname=NAME:自定義介面名稱;