KVM虛擬化技術之使用Qemu-kvm創建和管理虛擬機

.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鏡像的情況下同時運行多個虛擬機,(它的意思是多個虛擬機使用同一鏡像)併爲每一個虛擬機配置個性化硬件環境(網卡、磁盤、圖形適配器……)。
6).在主流的Linux內核,如2.6.20以上的內核均已包含了KVM核心。

         ————摘自WIKI百科

 

KVM  vbox的區別

vbox 是由 qemu 改寫而成,包含大量qemu 代碼。

1).可以使用於"不支持"虛擬化技術的cpu。
2).值得說的一點:vbox 在圖形方面比較好,能進行2D 3D加速;但cpu控制不理想(估計是因爲圖形支持的緣故);操作上有獨立的圖形界面,易於上手。


 

 

kvm linux內核包含的東西,使用qemu作爲上層管理(命令行)。 

1).要求cpu 必須支持虛擬化。
2).性能:作爲服務器很好,可是圖形能力十分的差。即使放電影,圖像也是像刷油漆一樣,一層一層的。
3).cpu使用率控制很好。
4).控制上比較簡潔,功能比較豐富:比如使用“無敵功能”所有更改指向內存,你的鏡像永遠保持乾淨。“母鏡像”功能讓你擁有n個獨立快照點。還有很多參數。另外,kvm作爲內核級的虛擬機,剛開始發展關注的公司比較多——但是還沒有達到商業應用的水平。


總體而言:在支持虛擬化的情況下,vbox  kvm 的性能差不多,主要是面向對象不同:kvm適用於服務器,vbox適用於桌面應用。

 

qemu 全稱Quick Emulator是獨立虛擬軟件,能獨立運行虛擬機(根本不需要kvm)。kqemu是該軟件的加速軟件。kvm並不需要qemu進行虛擬處理,只是需要它的上層管理界面進行虛擬機控制。虛擬機依舊是由kvm驅動。所以,大家不要把概念弄錯了,盲目的安裝qemukqemuqemu使用模擬器

 

KVM內存管理

        KVM繼承了Linux系統管理內存的諸多特性,比如,分配給虛擬使用的內存可以被交換至交換空間、能夠使用大內存頁以實現更好的性能,以及對NUMA的支持能夠讓虛擬機高效訪問更大的內存空間等。

        KVM基於IntelEPTExtendedPage Table)或AMDRVIRapid Virtualization Indexing)技術可以支持更新的內存虛擬功能,這可以降低CPU的佔用率,並提供較好的吞吐量。 

    此外,KVM還藉助於KSMKernel Same-pageMerging)這個內核特性實現了內存頁面共享KSM通過掃描每個虛擬機的內存查找各虛擬機間相同的內存頁,並將這些內存頁合併爲一個被各相關虛擬機共享的單獨頁面。在某虛擬機試圖修改此頁面中的數據時,KSM會重新爲其提供一個新的頁面副本。實踐中,運行於同一臺物理主機上的具有相同GuestOS的虛擬機之間出現相同內存頁面的概率是很的,比如共享庫、內核或其它內存對象等都有可能表現爲相同的內存頁,因此,KSM技術可以降低內存佔用進而提高整體性能。

 

相關連接:

KVM的官方地址:http://www.linux-kvm.org/page/Main_Page

KVMHowto文檔: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 的標識才行。總的說來,AMD在虛擬化方面作得更好一些。

2.我用的是虛擬機,我使用了VBOX,發現其不支持硬件虛擬化,啓動虛擬機後執行查看命令無法發現上述的選項;所以我就換成了VMware Workstation 10,並在虛擬機的設置中打開了CPU設置中的虛擬化引擎,選擇了Intel VT-x/EPTAMD-V/RVI(V)這個選項;具體設置如下圖:

wKioL1TYrFDDX02OAAIL-dpBNe8262.jpg


2.安裝KVM

由於Linux內核已經將KVM收錄了,在安裝系統時已經加入了KVM,我們只需要在命令行模式下啓用KVM即可:

啓用KVM模塊

#modprobe kvm

 

功能區分intel/amd的啓用:

#modprobe kvm-intel
# lsmod |grep kvm
kvm_intel              55496  0
kvm                   337772  1 kvm_intel

 

3.KVM虛擬機創建和管理所依賴的組件介紹

KVM虛擬機的創建依賴qemu-kvm

    雖然kvm的技術已經相當成熟而且可以對很多東西進行隔離,但是在某些方面還是無法虛擬出真實的機器。比如對網卡的虛擬,那這個時候就需要另外的技術來做補充,而qemu-kvm則是這樣一種技術。它補充了kvm技術的不足,而且在性能上對kvm進行了優化。

 

我們還可以使用virt-managervirt-viewer來管理虛擬機;

 

我們在創建和管理KVM虛擬機時還需要libvirt這個重要的組件:

    它是一系列提供出來的庫函數,用以其他技術調用,來管理機器上的虛擬機。包括各種虛擬機技術,kvmxenlxc等,都可以調用libvirt提供的api對虛擬機進行管理。有這麼多的虛擬機技術,它爲何能提供這麼多的管理功能那。是因爲它的設計理念,它是面向驅動的架構設計。對任何一種虛擬機技術都開發設計相對於該技術的驅動。這樣不同虛擬機技術就可以使用不同驅動,而且相互直接不會影響,方便擴展。而且libvirt提供了多種語言的編程接口,可以直接通過編程,調用libvirt提供的對外接口實現對虛擬機的操作。如今流行的雲計算中的IaaS是與該庫聯繫相當密切的。通過下圖可以看出它的架構設計思想。

wKiom1TYq3rgSgc9AAB5u36iayM195.jpg

    從該圖可以看出,在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中我們需要創建物理橋接設備,可以使用virsh創建橋設備關聯網卡到橋接設備上:

需要將NetworkManager服務關閉,開機啓動也關閉:

# chkconfig NetworkManager off
# service NetworkManager stop

然後在創建橋接設備及關聯網卡到橋接設備上:

# 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虛擬化平臺上創建和管理虛擬機,我們先使用qemu-kvm來創建和管理虛擬機。

 

.使用qemu-kvm管理KVM虛擬機

 

1.Qemu-kvm介紹 

Qemu是一個廣泛使用的開源計算機仿真器和虛擬機。當作爲仿真器時,可以在一種架構(PC)下運行另一種架構(ARM)下的操作系統和程序。而通過動態轉化,其可以獲得很高的運行效率。當作爲一個虛擬機時,qemu可以通過直接使用真機的系統資源,讓虛擬系統能夠獲得接近於物理機的性能表現。qemu支持xen或者kvm模式下的虛擬化。當用kvm時,qemu可以虛擬x86、服務器和嵌入式powerpc,以及s390的系統。

 

QEMU 當運行與主機架構相同的目標架構時可以使用KVM。例如,當在一個x86兼容處理器上運行 qemu-system-x86 時,可以利用 KVM 加速——爲宿主機和客戶機提供更好的性能。

 

Qemu有如下幾個部分組成:

         
         處理器模擬器(x86、PowerPC和Sparc);
         仿真設備(顯卡、網卡、硬盤、鼠標等);
         用於將仿真設備連接至主機設備(真實設備)的通用設備;
         模擬機的描述信息;
         調試器;
         與模擬器交互的用戶接口;

 

基於libvirt的工具如virt-managervirt-install提供了非常便捷的虛擬機管理接口,但它們事實上上經二次開發後又封裝了qemu-kvm的工具。因此,直接使用qemu-kvm命令也能夠完成此前的任務。

 

 

2.Qemu-kvm的使用幫助

RHEL6/CentOS6上,qemu-kvm位於/usr/libexec目錄中。由於此目錄不屬於PATH環境變量,故無法直接使用,這樣也阻止了可以直接使用qemu作爲創建並管理虛擬機。如若想使用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系統引導專用選項;
         調試/專家模式選項;
         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、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可分別用來禁止執行腳本;
-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

 

 

3.使用qemu-kvm安裝虛擬機Guest OS

測試安裝windows xp

1.下載系統鏡像文件,我這裏有個windows XPghost系統,我們來試着安裝。

winxp_ghost.iso

 

創建虛擬機的磁盤文件存放目錄:

# mkdir /kvm/images -pv

 

創建虛擬磁盤文件:

# 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-servertigervnc這個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地址:

 wKioL1TYtd_Clp4BAACZQ9QoE0c877.jpg

輸入VNC服務器的密碼:

wKiom1TYttSCsXvsAAB3PIhI25Q031.jpg

進入虛擬化平臺:

wKiom1TYrvjw8tPXAAJxXarJHIo500.jpg

等待後續操作。

 

 

3.安裝虛擬機

我們在命令行模式下安裝啓動虛擬機:

創建一個名爲winxp的虛擬機,其RAM大小爲512MB,有一顆CPUSMP架構,默認引導設備是硬盤,有一個光驅設備和硬盤設備,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

啓動後如圖:

 wKioL1TYt_GBQMYDAACDWyLAuUI629.jpg

我們到圖形界面上進行連接:

#vncviewer :5900

 wKiom1TYtwqjVPVQAAAjQ7X6rFM285.jpg

我這裏進入winpe安裝系統:

 wKiom1TYtybCKdSOAAZdYgoGxAM080.jpgwKioL1TYuC_xrTEXAAaPgPAH9oo930.jpg

選擇全自動恢復GHO鏡像到C盤,開始安裝:

wKiom1TYt1WAa2o7AAWv9q7VBH4094.jpg


安裝完畢後重啓就黑屏了。

進不去,算了,就這樣吧。

我們下面使用一個測試系統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

 

如果我們加入網卡設備,那麼必須要涉及到系統啓動後橋接網絡到br0上,我們通過腳本實現啓動和停止系統時橋接網絡和刪除橋接的自動執行操作:

啓動虛擬機將網卡橋接到橋接設備上:

# 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

 

給予腳本執行權限;

#chmod +x /etc/qemu-ifup
#chmod +x /etc/qemu-ifdown

 

啓動cirros虛擬機系統:

# 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

wKioL1TYsRuB_nyaAADBuDTUQ4Y280.jpg



啓動完成後,通過vncviewer連接我們啓動的虛擬機:

 wKioL1TYuHbDMgZ-AAZtPClyMag551.jpg

輸入用戶名和密碼進入系統並且切換到root用戶:

wKioL1TYuRHAyhmOAAMXLJ9T3gs713.jpg

查看虛擬機的網卡:

wKiom1TYuDXBVOkmAALx0GLSLeg952.jpg


使用ping測試,測試到達網關與否:

 wKioL1TYuUTzWfMkAAQVOyWl-Cg017.jpg

再到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監視器的使用

我們可以通過Qemu監視器來監測虛擬機的運行情況;

1.Qemu監視器打開的方式:

圖形窗口模式的打開方式:

CTRL+ALT+2 :通過輸入快捷鍵就能打開Qemu的監視器;

CTRL+ALT+1 :輸入快捷鍵即可返回虛擬化機界面;

 

文本窗口模式的打開方式:

CTRL+a c   :這組快捷鍵可以實現虛擬機界面和Qemu監視器之間的切換;

 

注意:如果需要讓虛擬機運行在文本窗口模式,我們需要在創建和啓動虛擬機時鍵入:-nographic的選項。

 

2.打開cirros虛擬機的Qemu監視器

 

CRTL+ALT+2組合鍵即可打開Qemu監視器;

如圖所示:

wKioL1TYuXHSCQ4mAACr1e8bCp8092.jpg 

 

3.Qemu監視器下的常用命令

help:顯示幫助
info:顯示一些虛擬機系統信息的
         如:infocpus,infotlb
savevm,loadvm,delvm:保存、裝載、刪除虛擬機快照
commit:提交虛擬機修改部分
change:改變虛擬機配置
         如:changevncpassword
device_add&device_del:實現動態添加和移除設備
usb_add&usb_del:添加和移除usb設備
migrate,migrate_cancel:遷移和取消遷移指令
cpu:設定默認CPU
log&logfile:記錄日誌和將日誌記錄到日誌文件中
sendkey:向虛擬機發送指令
system_powerdown:向客戶端發送關閉電源通知
system_reset:重啓虛擬機
system_wakeup:喚醒虛擬機
q or quit:退出qemu監視器,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次雲環境探測,我們可以忽略其錯誤;

wKiom1TYuKCiPUmOAAWOmPOrUsg123.jpg


啓動會在虛擬終端自動進行,啓動後如圖:

wKioL1TYua-j1UOhAAdNoj0FhEc090.jpg 

這裏會存在一個問題,就是我們未指定網卡的mac地址,會造成啓動的兩臺虛擬機的IP地址是一致的,mac地址都是52:54:00:12:34:56 ,如圖:

wKiom1TYuOCQZrTuAAK2vYTkE4k021.jpg


wKiom1TYsh7zTrrAAALSDy3aMdE234.jpg

 

我們必須指定虛擬機的mac地址來避免虛擬機IP地址一致性問題。

  

使用快捷鍵切換到qemu監視器,先按CTRL+a 後鬆手輸入“c”字母即可進入qemu的監視器:

 wKioL1TYufqSg3I9AAXgruq-7-U039.jpg

我們可以發現一個優點是文本窗口模式下的qemu監視器的命令行可以翻頁,是不是比圖形化的好啊! <^_^>!

  

下面我們停止文本窗口的虛擬機,指定好mac地址後再啓動虛擬機哦!

同樣按組合鍵CTRL+a 再按c切換到虛擬機界面輸入poweroff關閉虛擬機電源:

 wKiom1TYuSWhbhbLAAQVMwJMNPw760.jpg

再次啓動虛擬機:指定好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

 

啓動後如圖:

wKioL1TYuj3hxLY2AANTJ-S-IQ0769.jpg

地址分配的不一樣了。

我們來測試一下能否ping通第一臺虛擬機;

測試ping通,橋接網絡是互通的。

 wKiom1TYuVuSyDftAANR7S00MWo701.jpg

至此,基於Qemu-kvm創建和管理虛擬機的實驗就完成了,


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章