KVM虛擬化技術之使用Qemu-kvm創(chuàng)建和管理虛擬機的方法
一.KVM簡介
KVM(名稱來自英語:Kernel-basedVirtual Machine的縮寫,即基于內核的虛擬機),是一種用于Linux內核中的虛擬化基礎設施,可以將Linux內核轉化為一個hypervisor。KVM在2007年2月被導入Linux 2.6.20核心中,以可加載核心模塊的方式被移植到FreeBSD及illumos上。
KVM在具備Intel VT或AMD-V功能的x86平臺上運行。它也被移植到S/390,PowerPC與IA-64平臺上。在Linux內核3.9版中,加入ARM架構的支持。
關于KVM:
1).KVM是開源軟件,全稱是kernel-based virtual machine(基于內核的虛擬機)。 2).是x86架構且硬件支持虛擬化技術(如 intel VT 或 AMD-V)的Linux全虛擬化解決方案。 3).它包含一個為處理器提供底層虛擬化 可加載的核心模塊kvm.ko(kvm-intel.ko或kvm-AMD.ko)。 4).KVM還需要一個經過修改的QEMU軟件(qemu-kvm),作為虛擬機上層控制和界面。 5).KVM能在不改變linux或windows鏡像的情況下同時運行多個虛擬機,(它的意思是多個虛擬機使用同一鏡像)并為每一個虛擬機配置個性化硬件環(huán)境(網卡、磁盤、圖形適配器……)。 6).在主流的Linux內核,如2.6.20以上的內核均已包含了KVM核心。
————摘自WIKI百科
KVM 與 vbox的區(qū)別
vbox 是由 qemu 改寫而成,包含大量qemu 代碼。
1).可以使用于"不支持"虛擬化技術的cpu。
2).值得說的一點:vbox 在圖形方面比較好,能進行2D 3D加速;但cpu控制不理想(估計是因為圖形支持的緣故);操作上有獨立的圖形界面,易于上手。
kvm 是linux內核包含的東西,使用qemu作為上層管理(命令行)。
1).要求cpu 必須支持虛擬化。
2).性能:作為服務器很好,可是圖形能力十分的差。即使放電影,圖像也是像刷油漆一樣,一層一層的。
3).cpu使用率控制很好。
4).控制上比較簡潔,功能比較豐富:比如使用“無敵功能”所有更改指向內存,你的鏡像永遠保持干凈?!澳哥R像”功能讓你擁有n個獨立快照點。還有很多參數。另外,kvm作為內核級的虛擬機,剛開始發(fā)展關注的公司比較多——但是還沒有達到商業(yè)應用的水平。
總體而言:在支持虛擬化的情況下,vbox 和 kvm 的性能差不多,主要是面向對象不同:kvm適用于服務器,vbox適用于桌面應用。
qemu 全稱Quick Emulator。是獨立虛擬軟件,能獨立運行虛擬機(根本不需要kvm)。kqemu是該軟件的加速軟件。kvm并不需要qemu進行虛擬處理,只是需要它的上層管理界面進行虛擬機控制。虛擬機依舊是由kvm驅動。所以,大家不要把概念弄錯了,盲目的安裝qemu和kqemu。qemu使用模擬器
KVM內存管理
KVM繼承了Linux系統(tǒng)管理內存的諸多特性,比如,分配給虛擬使用的內存可以被交換至交換空間、能夠使用大內存頁以實現更好的性能,以及對NUMA的支持能夠讓虛擬機高效訪問更大的內存空間等。
KVM基于Intel的EPT(ExtendedPage Table)或AMD的RVI(Rapid Virtualization Indexing)技術可以支持更新的內存虛擬功能,這可以降低CPU的占用率,并提供較好的吞吐量。
此外,KVM還借助于KSM(Kernel Same-pageMerging)這個內核特性實現了內存頁面共享。KSM通過掃描每個虛擬機的內存查找各虛擬機間相同的內存頁,并將這些內存頁合并為一個被各相關虛擬機共享的單獨頁面。在某虛擬機試圖修改此頁面中的數據時,KSM會重新為其提供一個新的頁面副本。實踐中,運行于同一臺物理主機上的具有相同GuestOS的虛擬機之間出現相同內存頁面的概率是很的,比如共享庫、內核或其它內存對象等都有可能表現為相同的內存頁,因此,KSM技術可以降低內存占用進而提高整體性能。
相關連接:
KVM的官方地址:http://www.linux-kvm.org/page/Main_Page
KVM的Howto文檔:http://www.linux-kvm.org/page/HOWTO
Kqemu源碼地址:http://sourceforge.net/projects/kqemu/
Qemu下載地址:http://wiki.qemu.org/Main_Page
二.KVM虛擬化平臺構建
1.安裝準備
查看你的硬件是否支持虛擬化。命令:
#egrep '(vmx|svm)' /proc/cpuinfo
注意:
1).要有 vmx 或 svm 的標識才行??偟恼f來,AMD在虛擬化方面作得更好一些。
2).我用的是虛擬機,我使用了VBOX,發(fā)現其不支持硬件虛擬化,啟動虛擬機后執(zhí)行查看命令無法發(fā)現上述的選項;所以我就換成了VMware Workstation 10,并在虛擬機的設置中打開了CPU設置中的虛擬化引擎,選擇了Intel VT-x/EPT或AMD-V/RVI(V)這個選項;具體設置如下圖:
2.安裝KVM
由于Linux內核已經將KVM收錄了,在安裝系統(tǒng)時已經加入了KVM,我們只需要在命令行模式下啟用KVM即可:
啟用KVM模塊
#modprobe kvm
功能區(qū)分intel/amd的啟用:
#modprobe kvm-intel # lsmod |grep kvm kvm_intel 55496 0 kvm 337772 1 kvm_intel
3.KVM虛擬機創(chuàng)建和管理所依賴的組件介紹
KVM虛擬機的創(chuàng)建依賴qemu-kvm:
雖然kvm的技術已經相當成熟而且可以對很多東西進行隔離,但是在某些方面還是無法虛擬出真實的機器。比如對網卡的虛擬,那這個時候就需要另外的技術來做補充,而qemu-kvm則是這樣一種技術。它補充了kvm技術的不足,而且在性能上對kvm進行了優(yōu)化。
我們還可以使用virt-manager,virt-viewer來管理虛擬機;
我們在創(chuàng)建和管理KVM虛擬機時還需要libvirt這個重要的組件:
它是一系列提供出來的庫函數,用以其他技術調用,來管理機器上的虛擬機。包括各種虛擬機技術,kvm、xen與lxc等,都可以調用libvirt提供的api對虛擬機進行管理。有這么多的虛擬機技術,它為何能提供這么多的管理功能那。是因為它的設計理念,它是面向驅動的架構設計。對任何一種虛擬機技術都開發(fā)設計相對于該技術的驅動。這樣不同虛擬機技術就可以使用不同驅動,而且相互直接不會影響,方便擴展。而且libvirt提供了多種語言的編程接口,可以直接通過編程,調用libvirt提供的對外接口實現對虛擬機的操作。如今流行的云計算中的IaaS是與該庫聯(lián)系相當密切的。通過下圖可以看出它的架構設計思想。
從該圖可以看出,在libvirtapi之上會有很多個driver,對于每一種虛擬機技術都會有一種driver,用來充當該虛擬機技術與libvirt之間的包裝接口。如此設計就可以避免libvirt需要設計各種針對不同虛擬機技術的接口,它主要關注底層的實現,提供對外接口調用,而不同的虛擬機技術通過調用libvirt提供的接口來完成自己所需要的功能。
4.安裝KVM所需組件
yum源提供了,直接安裝:
#yum install -y qemu-kvm libvirt virt-manager
安裝完成后啟動libvirtd服務:
#service libvirtd start
會自動啟動一個橋設備,這相當于VMware Workstation中的host-only僅主機的網絡設備;
# ifconfig eth0 Link encap:Ethernet HWaddr00:0C:29:3E:63:26 inet addr:172.16.31.7 Bcast:172.16.255.255 Mask:255.255.0.0 inet6 addr: fe80::20c:29ff:fe3e:6326/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:25460 errors:0 dropped:0overruns:0 frame:0 TX packets:9728 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:35156437 (33.5 MiB) TXbytes:800196 (781.4 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:12 errors:0 dropped:0 overruns:0 frame:0 TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1024 (1024.0 b) TXbytes:1024 (1024.0 b) virbr0 Link encap:Ethernet HWaddr52:54:00:30:54:41 inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0(0.0 b)
使用網橋管理命令查看:
# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.525400305441 yes virbr0-nic
像VMware Workstation中我們需要創(chuàng)建物理橋接設備,可以使用virsh創(chuàng)建橋設備關聯(lián)網卡到橋接設備上:
需要將NetworkManager服務關閉,開機啟動也關閉:
# chkconfig NetworkManager off # service NetworkManager stop
然后在創(chuàng)建橋接設備及關聯(lián)網卡到橋接設備上:
# virsh iface-bridge eth0 br0
查看橋接設備及其他網絡設備運行情況:
# ifconfig br0 Link encap:Ethernet HWaddr00:0C:29:3E:63:26 inet addr:172.16.31.7 Bcast:172.16.255.255 Mask:255.255.0.0 inet6 addr: fe80::20c:29ff:fe3e:6326/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:76 errors:0 dropped:0 overruns:0 frame:0 TX packets:60 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:9781 (9.5 KiB) TXbytes:8957 (8.7 KiB) eth0 Link encap:Ethernet HWaddr00:0C:29:3E:63:26 inet6 addr: fe80::20c:29ff:fe3e:6326/64 Scope:Link UP BROADCAST RUNNINGMULTICAST MTU:1500 Metric:1 RX packets:176 errors:0 dropped:0 overruns:0 frame:0 TX packets:97 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:26793 (26.1 KiB) TXbytes:11385 (11.1 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:4 errors:0 dropped:0 overruns:0 frame:0 TX packets:4 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:344 (344.0 b) TXbytes:344 (344.0 b) virbr0 Link encap:Ethernet HWaddr52:54:00:30:54:41 inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0(0.0 b)
查看橋接設備:
# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c293e6326 yes eth0 virbr0 8000.525400305441 yes virbr0-nic
至此,我們的虛擬化平臺就構建完畢,下面就開始在KVM虛擬化平臺上創(chuàng)建和管理虛擬機,我們先使用qemu-kvm來創(chuàng)建和管理虛擬機。
三.使用qemu-kvm管理KVM虛擬機
1.Qemu-kvm介紹
Qemu是一個廣泛使用的開源計算機仿真器和虛擬機。當作為仿真器時,可以在一種架構(如PC機)下運行另一種架構(如ARM)下的操作系統(tǒng)和程序。而通過動態(tài)轉化,其可以獲得很高的運行效率。當作為一個虛擬機時,qemu可以通過直接使用真機的系統(tǒng)資源,讓虛擬系統(tǒng)能夠獲得接近于物理機的性能表現。qemu支持xen或者kvm模式下的虛擬化。當用kvm時,qemu可以虛擬x86、服務器和嵌入式powerpc,以及s390的系統(tǒng)。
QEMU 當運行與主機架構相同的目標架構時可以使用KVM。例如,當在一個x86兼容處理器上運行 qemu-system-x86 時,可以利用 KVM 加速——為宿主機和客戶機提供更好的性能。
Qemu有如下幾個部分組成:
處理器模擬器(x86、PowerPC和Sparc);
仿真設備(顯卡、網卡、硬盤、鼠標等);
用于將仿真設備連接至主機設備(真實設備)的通用設備;
模擬機的描述信息;
調試器;
與模擬器交互的用戶接口;
基于libvirt的工具如virt-manager和virt-install提供了非常便捷的虛擬機管理接口,但它們事實上上經二次開發(fā)后又封裝了qemu-kvm的工具。因此,直接使用qemu-kvm命令也能夠完成此前的任務。
2.Qemu-kvm的使用幫助
在RHEL6/CentOS6上,qemu-kvm位于/usr/libexec目錄中。由于此目錄不屬于PATH環(huán)境變量,故無法直接使用,這樣也阻止了可以直接使用qemu作為創(chuàng)建并管理虛擬機。如若想使用qemu虛擬機,可以通過將/usr/libexec/qemu-kvm鏈接為/usr/bin/qemu實現。
# ln -sv /usr/libexec/qemu-kvm /usr/bin/qemu-kvm
qemu-kvm命令使用格式為“qemu-kvm [options] [disk_image]”,其選項非常多,不過,大致可分為如下幾類。
標準選項;
USB選項;
顯示選項;
i386平臺專用選項;
網絡選項;
字符設備選項;
藍牙相關選項;
Linux系統(tǒng)引導專用選項;
調試/專家模式選項;
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:指定模擬多節(jié)點的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遠程桌面協(xié)議;其有許多子選項,具體請參照qemu-kvm的手冊; -vga type:指定要仿真的VGA接口類型,常見類型有: cirrus:Cirrus Logic GD5446顯示卡; std:帶有Bochs VBI擴展的標準VGA顯示卡; vmware:VMWare SVGA-II兼容的顯示適配器; qxl:QXL半虛擬化顯示卡;與VGA兼容;在Guest中安裝qxl驅動后能以很好的方式工作,在使用spice協(xié)議時推薦使用此類型; none:禁用VGA卡; -vnc display[,option[,option[,...]]]:默認情況下,qemu使用SDL顯示VGA輸出;使用-vnc選項,可以讓qemu監(jiān)聽在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]:創(chuàng)建一個新的網卡設備并連接至vlan n中;PC架構上默認的NIC為e1000,macaddr用于為其指定MAC地址,name用于指定一個在監(jiān)控時顯示的網上設備名稱;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)來配置當前網絡接口,并使用downscript=file指定的腳本(默認為/etc/qemu-ifdown)來撤消接口配置;使用script=no和downscript=no可分別用來禁止執(zhí)行腳本; -net user[,option][,option][,...]:在用戶模式配置網絡棧,其不依賴于管理權限;有效選項有: vlan=n:連接至vlan n,默認n=0; name=name:指定接口的顯示名稱,常用于監(jiān)控模式中; 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
3.使用qemu-kvm安裝虛擬機Guest OS
測試安裝windows xp
1).下載系統(tǒng)鏡像文件,我這里有個windows XP的ghost系統(tǒng),我們來試著安裝。
winxp_ghost.iso
創(chuàng)建虛擬機的磁盤文件存放目錄:
# mkdir /kvm/images -pv
創(chuàng)建虛擬磁盤文件:
# qemu-img create -o preallocation=metadata -f qcow2 /kvm/images/winxp.qcow2 60G # ll -h /kvm/images/ total 9.6M -rw-r--r-- 1 root root 61G Feb 7 23:50 winxp.qcow2
2).在kvm平臺安裝vnc-server和tigervnc這個vncviewer
# yum install vnc-server tigervnc -y 設置vncserver的密碼; # vncpasswd Password: Verify: 啟動vncserver # vncserver New 'createOS:1 (root)' desktop iscreateOS:1 Creating default startup script/root/.vnc/xstartup Starting applications specified in/root/.vnc/xstartup Log file is /root/.vnc/createOS:1.log
我們通過windows客戶端的vncviewer連接到虛擬機上進行操作;
輸入虛擬化平臺ip地址:
輸入VNC服務器的密碼:
進入虛擬化平臺:
等待后續(xù)操作。
3).安裝虛擬機
我們在命令行模式下安裝啟動虛擬機:
創(chuàng)建一個名為winxp的虛擬機,其RAM大小為512MB,有一顆CPU的SMP架構,默認引導設備是硬盤,有一個光驅設備和硬盤設備,usb設備為tablet;
#qemu-kvm -cpu host -smp 1 -name winxp -m 512 -drive file=/kvm/images/winxp.qcow2,if=ide,meida=disk,format=qcow2 -drive file=/root/winxp_ghost.iso,media=cdrom -boot dc -usbdevice tablet
啟動后如圖:
我們到圖形界面上進行連接:
#vncviewer :5900
我這里進入winpe安裝系統(tǒng):
選擇全自動恢復GHO鏡像到C盤,開始安裝:
安裝完畢后重啟就黑屏了。
進不去,算了,就這樣吧。
我們下面使用一個測試系統(tǒng)cirros來測試KVM的虛擬化平臺;
4.安裝cirros虛擬機
1).cirros鏡像文件下載
鏡像下載
32位鏡像下載地址:https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-i386-disk.img
64位鏡像的下載地址:https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-disk.img
我這里使用的是cirros-0.3.0-x86_64-disk.img
我們查看一些鏡像文件信息:
# qemu-imginfocirros-0.3.0-x86_64-disk.img image: cirros-0.3.0-x86_64-disk.img file format: qcow2 virtual size: 39M (41126400 bytes) disk size: 9.3M cluster_size: 65536
2).安裝啟動cirros虛擬機
我們在啟動虛擬機時加入網卡設備。
# mv cirros-0.3.0-x86_64-disk.img /kvm/images
如果我們加入網卡設備,那么必須要涉及到系統(tǒng)啟動后橋接網絡到br0上,我們通過腳本實現啟動和停止系統(tǒng)時橋接網絡和刪除橋接的自動執(zhí)行操作:
啟動虛擬機將網卡橋接到橋接設備上:
# cat /etc/qemu-ifup #!/bin/bash # bridge=br0 if [ -n "$1" ]; then ip link set $1 up sleep 1 brctl addif $bridge $1 [ $? -eq 0 ] && exit 0 || exit 1 else echo "Error: no interfacespecified." exit 1 fi
關閉虛擬機后自動將網卡從橋接設備上移除:
# cat/etc/qemu-ifdown #!/bin/bash # bridge=br0 if [ -n "$1" ];then brctl delif $bridge $1 ip link set $1 down exit 0 else echo "Error: no interfacespecified." exit 1 fi
給予腳本執(zhí)行權限;
#chmod +x /etc/qemu-ifup #chmod +x /etc/qemu-ifdown
啟動cirros虛擬機系統(tǒng):
# qemu-kvm -m 128 -name cirros -drive file=/kvm/images/cirros-0.3.0-x86_64-disk.img,media=disk,format=qcow2,if=ide-net nic -net tap,ifname=vnet0,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown -boot c
啟動完成后,通過vncviewer連接我們啟動的虛擬機:
輸入用戶名和密碼進入系統(tǒng)并且切換到root用戶:
查看虛擬機的網卡:
使用ping測試,測試到達網關與否:
再到KVM虛擬化平臺上查看一下vnet0是否生成:
[root@createOS ~]#ifconfig br0 Link encap:Ethernet HWaddr00:0C:29:3E:63:26 inetaddr:172.16.31.7 Bcast:172.16.255.255 Mask:255.255.0.0 inet6 addr:fe80::20c:29ff:fe3e:6326/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:380906errors:0 dropped:0 overruns:0 frame:0 TX packets:165151errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:748466471 (713.7MiB) TXbytes:78691011 (75.0 MiB) eth0 Link encap:Ethernet HWaddr00:0C:29:3E:63:26 inet6 addr:fe80::20c:29ff:fe3e:6326/64 Scope:Link UP BROADCAST RUNNINGMULTICAST MTU:1500 Metric:1 RX packets:838156errors:0 dropped:0 overruns:0 frame:0 TX packets:206259errors:0 dropped:0 overruns:0 carrier:0 collisions:0txqueuelen:1000 RX bytes:864246873 (824.2MiB) TXbytes:80899673 (77.1 MiB) lo Link encap:Local Loopback inetaddr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:91986 errors:0dropped:0 overruns:0 frame:0 TX packets:91986 errors:0dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:85874602 (81.8MiB) TXbytes:85874602 (81.8 MiB) virbr0 Link encap:Ethernet HWaddr52:54:00:30:54:41 inetaddr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UP BROADCAST RUNNINGMULTICAST MTU:1500 Metric:1 RX packets:0 errors:0dropped:0 overruns:0 frame:0 TX packets:0 errors:0dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0(0.0 b) vnet0 Link encap:Ethernet HWaddrC6:E4:5A:0D:A1:1C inet6 addr:fe80::c4e4:5aff:fe0d:a11c/64 Scope:Link UP BROADCAST RUNNINGMULTICAST MTU:1500 Metric:1 RX packets:85 errors:0dropped:0 overruns:0 frame:0 TX packets:33815 errors:0dropped:0 overruns:0 carrier:0 collisions:0txqueuelen:500 RX bytes:6866 (6.7KiB) TXbytes:9643416 (9.1 MiB)
至此,一個完整的cirros虛擬機就完成安裝了。
5.Qemu監(jiān)視器的使用
我們可以通過Qemu監(jiān)視器來監(jiān)測虛擬機的運行情況;
1).Qemu監(jiān)視器打開的方式:
圖形窗口模式的打開方式:
CTRL+ALT+2 :通過輸入快捷鍵就能打開Qemu的監(jiān)視器;
CTRL+ALT+1 :輸入快捷鍵即可返回虛擬化機界面;
文本窗口模式的打開方式:
CTRL+a c :這組快捷鍵可以實現虛擬機界面和Qemu監(jiān)視器之間的切換;
注意:如果需要讓虛擬機運行在文本窗口模式,我們需要在創(chuàng)建和啟動虛擬機時鍵入:-nographic的選項。
2).打開cirros虛擬機的Qemu監(jiān)視器
按CRTL+ALT+2組合鍵即可打開Qemu監(jiān)視器;
如圖所示:
3).Qemu監(jiān)視器下的常用命令
help:顯示幫助 info:顯示一些虛擬機系統(tǒng)信息的 如:infocpus,infotlb savevm,loadvm,delvm:保存、裝載、刪除虛擬機快照 commit:提交虛擬機修改部分 change:改變虛擬機配置 如:changevncpassword device_add&device_del:實現動態(tài)添加和移除設備 usb_add&usb_del:添加和移除usb設備 migrate,migrate_cancel:遷移和取消遷移指令 cpu:設定默認CPU log&logfile:記錄日志和將日志記錄到日志文件中 sendkey:向虛擬機發(fā)送指令 system_powerdown:向客戶端發(fā)送關閉電源通知 system_reset:重啟虛擬機 system_wakeup:喚醒虛擬機 q or quit:退出qemu監(jiān)視器,qemu進程會終止;
6.我們啟動一個在文本窗口模式下的虛擬機
我們再次下載一個cirros虛擬機磁盤鏡像文件,將其名稱更改后啟動:
# cp cirros-0.3.0-x86_64-disk.img /kvm/images/cirros-0.3.0-x86_64-disk2.img
啟動cirros虛擬機:
# qemu-kvm -m 128 -name cirros2 -drive file=/kvm/images/cirros-0.3.0-x86_64-disk2.img,media=disk,format=qcow2,if=ide -net nic tap,ifname=vnet1,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown -boot c -nographic
啟動會進行30次云環(huán)境探測,我們可以忽略其錯誤;
啟動會在虛擬終端自動進行,啟動后如圖:
這里會存在一個問題,就是我們未指定網卡的mac地址,會造成啟動的兩臺虛擬機的IP地址是一致的,mac地址都是52:54:00:12:34:56 ,如圖:
我們必須指定虛擬機的mac地址來避免虛擬機IP地址一致性問題。
使用快捷鍵切換到qemu監(jiān)視器,先按CTRL+a 后松手輸入“c”字母即可進入qemu的監(jiān)視器:
我們可以發(fā)現一個優(yōu)點是文本窗口模式下的qemu監(jiān)視器的命令行可以翻頁,是不是比圖形化的好啊! <^_^>!
下面我們停止文本窗口的虛擬機,指定好mac地址后再啟動虛擬機哦!
同樣按組合鍵CTRL+a 再按c切換到虛擬機界面輸入poweroff關閉虛擬機電源:
再次啟動虛擬機:指定好mac地址哦!
# qemu-kvm -m 128 -name cirros2 -drive file=/kvm/images/cirros-0.3.0-x86_64-disk2.img,media=disk,format=qcow2,if=ide-net nic,macaddr=52:54:00:65:43:21 -net tap,ifname=vnet1,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown -boot c -nographic
啟動后如圖:
地址分配的不一樣了。
我們來測試一下能否ping通第一臺虛擬機;
測試ping通,橋接網絡是互通的。
至此,基于Qemu-kvm創(chuàng)建和管理虛擬機的實驗就完成了
相關文章
KVM虛擬化技術之使用Qemu-kvm創(chuàng)建和管理虛擬機的方法
這篇文章主要介紹了KVM虛擬化技術之使用Qemu-kvm創(chuàng)建和管理虛擬機的方法,需要的朋友可以參考下2016-10-10javascript拓展DOM操作 prependChild insertAfert
Javascript dom操作中有appendChild 和insertBefore 卻沒有prependChild 和insertAfter2010-11-11什么是DOM(Document Object Model)文檔對象模型
文檔對象模型(Document Object Model,DOM)是一種用于HTML和XML文檔的編程接口。它給文檔提供了一種結構化的表示方法,可以改變文檔的內容和呈現方式2012-03-03