[ kvm ] 學習筆記 5:QEMU-KVM 命令詳解


1. QEMU、KVM 、QEMU-KVM

QEMU 提供了一系列的硬件模擬設備(cpu、網卡、磁盤等),客戶機指令都需要QEMU翻譯,因此性能較差。KVM 是Linux 內核提供的虛擬化模塊,負責CPU和內存的虛擬化,但是缺少I/O設備的虛擬化。QEMU-KVM 就是 KVM 與 QEMU 的結合,KVM 負責CPU虛擬化+內存虛擬化,QEMU 模擬其他I/O設備。

 

2. QEMU-KVM 命令詳解

2.1 qemu-kvm 命令基本格式

qemu-kvm 工具命令格式如下:

qemu-kvm [options] [disk_image]

其中,opions 是各種選項、參數,disk_image 是客戶機的磁盤鏡像文件(默認被掛載為第一個 IDE 磁盤設備)。

 

2.2 CPU 相關的參數

(1)-cpu 參數

指定CPU模型,默認的 CPU 模型為 qemu64,"-cpu ?" 可以查詢當前 qemu-kvm 支持哪些 cpu 模型。

[root@192.168.118.14 ~]#qemu-kvm -cpu ?
x86           qemu64  QEMU Virtual CPU version 1.5.3                  
x86           phenom  AMD Phenom(tm) 9550 Quad-Core Processor         
x86         core2duo  Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz 
x86            kvm64  Common KVM processor                            
x86           qemu32  QEMU Virtual CPU version 1.5.3                  
x86            kvm32  Common 32-bit KVM processor                     
x86          coreduo  Genuine Intel(R) CPU           T2600  @ 2.16GHz 
x86              486                                                  
x86          pentium                                                  
x86         pentium2                                                  
x86         pentium3                                                  
x86           athlon  QEMU Virtual CPU version 1.5.3                  
x86             n270  Intel(R) Atom(TM) CPU N270   @ 1.60GHz          
x86      cpu64-rhel6  QEMU Virtual CPU version (cpu64-rhel6)          
x86           Conroe  Intel Celeron_4x0 (Conroe/Merom Class Core 2)   
x86           Penryn  Intel Core 2 Duo P9xxx (Penryn Class Core 2)    
x86          Nehalem  Intel Core i7 9xx (Nehalem Class Core i7)       
x86         Westmere  Westmere E56xx/L56xx/X56xx (Nehalem-C)          
x86      SandyBridge  Intel Xeon E312xx (Sandy Bridge)                
x86          Haswell  Intel Core Processor (Haswell)                  
x86        Broadwell  Intel Core Processor (Broadwell)                
x86       Opteron_G1  AMD Opteron 240 (Gen 1 Class Opteron)           
x86       Opteron_G2  AMD Opteron 22xx (Gen 2 Class Opteron)          
x86       Opteron_G3  AMD Opteron 23xx (Gen 3 Class Opteron)          
x86       Opteron_G4  AMD Opteron 62xx class CPU                      
x86       Opteron_G5  AMD Opteron 63xx class CPU                      
x86             host  KVM processor with all supported host features (only available in KVM mode)

 

如果想盡可能多的將宿主機的 CPU 特性暴露給客戶機使用,則可以使用 "-cpu host" 參數。使用 "-cpu host" 參數會帶來動態遷移的限制,不讓客戶機在不同的cpu硬件上遷移。

 

(2)-smp 參數

-smp n[,scores=scores][,threads=threads][,sockets=sockets]

 設置客戶機總共有 n 個邏輯CPU,並設置了其中 CPU socket 的數量、每個socket 上核心(core)的數量、每個核心上的線程(thread)數量。其中:n = sockets x cores x threads

 

2.3 內存相關的參數

(1) -m megs 參數

設置客戶機內存大小為 megs MB。默認單位:MB,可設置 GB

(2)--mem-path path參數

從path路徑表示的臨時文件中為客戶機分配內存,主要是分配大頁內存(如2 MB 大頁),如 "--mem-path /dev/hugepages"

(3)--mem-prealloc 參數

啟動時即分配全部的內存,而不是根據客戶機請求而動態分配,必須與 "--mem-path" 參數一起使用

(4)-balloon 開啟內存氣球的設置

"-balloon virtio" 為客戶機提供 virtio_balloon 設備,從而通過內存氣球balloon,可以在 QEMU monitor 中用 "balloon"命令來調節客戶機占用內存的大小。

 

2.4 磁盤相關的參數

Block device options:
-fda/-fdb file  use 'file' as floppy disk 0/1 image
-hda/-hdb file  use 'file' as IDE hard disk 0/1 image
-hdc/-hdd file  use 'file' as IDE hard disk 2/3 image
-cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master)
-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
       [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]
       [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]
       [,serial=s][,addr=A][,id=name][,aio=threads|native]
       [,readonly=on|off][,copy-on-read=on|off]
       [[,bps=b]|[[,bps_rd=r][,bps_wr=w]]][[,iops=i]|[[,iops_rd=r][,iops_wr=w]]
                use 'file' as a drive image
-mtdblock file  use 'file' as on-board Flash memory image
-sd file        use 'file' as SecureDigital card image
-pflash file    use 'file' as a parallel flash image
-snapshot       write to temporary files instead of disk image files
-hdachs c,h,s[,t]
                force hard disk 0 physical geometry and the optional BIOS
                translation (t=none or lba) (usually QEMU can guess them)
-fsdev fsdriver,id=id[,path=path,][security_model={mapped-xattr|mapped-file|passthrough|none}]
[,writeout=immediate][,readonly][,socket=socket|sock_fd=sock_fd]
-virtfs local,path=path,mount_tag=tag,security_model=[mapped-xattr|mapped-file|passthrough|none]
        [,writeout=immediate][,readonly][,socket=socket|sock_fd=sock_fd]
-virtfs_synth Create synthetic file system image

 

(1)-hda、-hdb 和 -cdrom 等參數

  設置客戶機的 IDE 磁盤和光盤設備。如 "-hda centos7.img" 將 centos7.img 鏡像文件作為客戶機的第一個 IDE 磁盤。

(2)-drive 參數

  詳細的配置一個驅動。

例如: -drive file=/images/centos7.img,if=virtio,cache=writeback 使用 virtio_blk 驅動 和 磁盤回寫機制 來支持該磁盤文件

(3)-boot 參數

-boot [order=drives][,once=drives][,menu=on|off]

設置客戶機啟動的各種選項(包括啟動順序等),如:在安裝客戶機操作系統時,使用 "-boot order=dc -hda centos7.img -cdrom centos7.iso",讓 centos.img 文件作為IDE磁盤,安裝光盤 centos7.iso 作為 IDE 光驅,並且從光盤啟動客戶機,從而讓客戶機進入到系統安裝的流程中。

 

2.5 網絡相關參數

(1) -net nic 參數

為客戶機創建一個網卡,凡是使用 qemu-kvm 模擬的網卡作為客戶機網絡設備的情況都應該使用該參數,通常該參數與 -net tap 連用。

例如:-net nic model=virtio, macaddr=52:54:00:ac:0f:11 使用 -net nic 命令時,一定要手動指定mac地址,否則客戶機的mac地址會與宿主機mac一致。

 

(2)-net user參數

讓客戶機使用不需要管理員權限的用戶模式網絡

例如:-net nic -net user

 

(3)-net tap參數

使用宿主機的TAP網絡接口來幫助客戶機建立網絡。使用網橋連接和NAT模式網絡的客戶機都會使用到 "-net tap" 參數。

例如:-net nic -net tap,ifname=vnet0,script=/etc/qeum-ifup,downscript=no  ifname 指定在宿主機空間的網卡名稱,script 和 downscript 為配置網絡腳本。

 

2.6 顯示相關的參數

(1)vnc參數

默認使用 vnc 方式顯示客戶機。

例如手動指定:-vnc localhost:2

 

(2)-nographic參數

讓客戶機以命令行的方式在當前終端啟動顯示。

例如:

[root@192.168.118.14 ~]#qemu-kvm -smp 2 -m 512m /images/cirros-0.3.5-i386-disk.img -nographic
...
[系統啟動信息]
...

login as 'cirros' user. default password: 'cubswin:)'. use 'sudo' for root.
<!DOCTYPE login:    # Ctrl+A H 獲取幫助信息
C-a h    print this help
C-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

[00:00:33.833] login as 'cirros' user. default password: 'cubswin:)'. use 'sudo' for root.
<!DOCTYPE login:    # Ctrl+A C 切換到 qemu-monitor 模式
[00:00:37.237] (qemu)

[00:00:37.237] (qemu)   # Ctrl+A C 切換為命令行模式
[00:01:13.592] login as 'cirros' user. default password: 'cubswin:)'. use 'sudo' for root.
<!DOCTYPE login: 

 

(3)-daemonize 參數

在啟動時讓 qemu-kvm 作為守護進程在后台運行。如果沒有該參數,默認 qemu-kvm 在啟動客戶機后就會占用標准輸入輸出,直到客戶機退出。

 

2.7 其他參數

(1)-name 參數

-name 指定客戶機名稱可用於宿主機上唯一標識該客戶機。

 

2.8 總結

總結實際場景中經常用到的一些關於 qeum-kvm 的命令組合:

 

(1)直接通過鏡像文件啟動客戶機方式:

[root@192.168.118.14 ~]#qemu-img -name 'test' -smp 1 -m 512m /images/cirros-0.3.5-i386-disk.img [-daemonize | -nographic]
# -daemonize 守護進程方式啟動
# -nographic 占用終端輸出輸入直接顯示
二者選其一。

 

(2)創建鏡像文件並通過 iso 安裝 客戶機操作系統:

關於 qemu-img 的使用查看:KVM 基礎功能詳解 倒數第二部分。

[root@192.168.118.14 ~]#qemu-kvm -name "centos7" -smp 2 -m 1024m -drive file=/images/centos_7.qcow2,if=virtio,cache=writeback -cdrom /usr/local/src/CentOS-7-x86_64-Minimal-1511.iso -daemonize
VNC server running on `::1:5900'

 

上面兩種方式都沒有應用網絡方式,如果需要使用網絡服務請參考:

[kvm] 四種簡單網絡模型

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM