QEMU 安裝與使用
創(chuàng)建虛擬機(jī)[^6][^7][^8]
命令選項(xiàng)
qemu的標(biāo)準(zhǔn)選項(xiàng)
qemu顯示選項(xiàng)
網(wǎng)絡(luò)屬性相關(guān)選項(xiàng)
kvm的網(wǎng)絡(luò)模型
手動創(chuàng)建bridge
i386平臺專用選項(xiàng)
硬件準(zhǔn)備
安裝KVM
安裝qemu
源碼安裝
安裝工具安裝
安裝qemu
QEMU使用
參考
如果需要構(gòu)建KVM環(huán)境,首先需要硬件支持。
首先處理器(CPU)要在硬件上支持VT技術(shù),還要在BIOS中將其功能打開,KVM才能使用到。目前,多數(shù)流行的服務(wù)器和部分桌面處理器的BIOS都默認(rèn)將VT打開了。
在BIOS中,VT的選項(xiàng)通過“Advanced→Processor Configuration”來查看和設(shè)置,它的標(biāo)識通常為“Intel?Virtualization Technology”或“Intel VT”等類似的文字說明。
設(shè)置好了VT和VT-d的相關(guān)選項(xiàng),保存BIOS的設(shè)置并退出,系統(tǒng)重啟后生效。在Linux系統(tǒng)中,可以通過檢查/proc/cpuinfo文件中的CPU特性標(biāo)志(flags)來查看CPU目前是否支持硬件虛擬化。在x86和x86-64平臺中,Intel系列CPU支持虛擬化的標(biāo)志為“vmx”,AMD系列CPU的標(biāo)志為“svm”。所以可以用以下命令行查看“vmx”或者“svm”標(biāo)志:
[marvin@localhost ~]$ grep -E "svm|vmx" /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg cx16 xtpr pdcm sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave rdrand lahf_lm 3dnowprefetch cpuid_fault cat_l2 pti cdp_l2 ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust smep erms mpx rdt_a rdseed smap clflushopt intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts umip rdpid md_clear arch_capabilities
KVM作為Linux kernel中的一個module而存在,是從Linux 2.6.20版本開始被完全正式加入內(nèi)核的主干開發(fā)和正式發(fā)布代碼中。所以,只需要下載2.6.20版本,Linux kernel代碼即可編譯和使用KVM。
總的來說,下載最新KVM源代碼,主要有以下3種方式:
1)下載KVM項(xiàng)目開發(fā)中的代碼倉庫kvm.git。
2)下載Linux內(nèi)核的代碼倉庫linux.git。
3)打包下載Linux內(nèi)核的源代碼(Tarball 格式)。
首先查看系統(tǒng)是否加載了kvm模塊
使用命令:lsmod | grep kvm
[marvin@localhost ~]$ lsmod | grep kvm
kvm_intel 299008 0
kvm 753664 1 kvm_intel
irqbypass 16384 1 kvm
如果沒有安裝KVM模塊,需要安裝,具體安裝過程可google/百度1。
安裝qemu有兩種方式,一種為源碼安裝,一種直接apt/yum/dnf
安裝。
參考官方步驟:https://www.qemu.org/download/
下載QEMU源碼
解壓
configure
# 加入KVM
./configure --prefix=XXX --enable-debug --target-list=x86_64-softmmu --enable-kvm
# --prefix 選項(xiàng)設(shè)置qemu的安裝位置,之后若要卸載刪除qemu只要刪除該文件夾即可
# config完,可以在指定的qemu安裝文件夾下面找到config-host.mak文件,
# 該文件記錄著qemu配置的選項(xiàng),可以和自己設(shè)置的進(jìn)行對比,確保配置和自己已知
make和安裝
make時如果缺少相關(guān)的庫或者軟件,make會退出并提示缺少的東西,按照提示安裝即可。
sudo yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python python-virtinst libvirt-client virt-install virt-viewer
qemu-kvm:qemu模擬器
qemu-img:qemu磁盤image管理器
virt-install:用來創(chuàng)建虛擬機(jī)的命令行工具
libvirt:提供libvirtd daemon來管理虛擬機(jī)和控制hypervisor
libvirt-client:提供客戶端API用來訪問server和提供管理虛擬機(jī)命令行工具的virsh實(shí)體
virt-viewer:圖形控制臺
其中最重要的是qemu-kvm、qemu-img,同時為了方便管理虛擬機(jī),最好安裝上libvirt2。
安裝完qemu后,在/usr/bin/目錄下會有qemu開頭的若干可執(zhí)行程序, 類似qemu-x86_64這種命令是運(yùn)行某種架構(gòu)的程序的,qemu-system-x86_64是運(yùn)行某種架構(gòu)系統(tǒng)的(虛擬機(jī)),如果需要kvm支持,需要加上參數(shù) -enable-kvm, 如果使用libvirt可以配置相應(yīng)的xml來實(shí)現(xiàn)kvm支持。
更多關(guān)于這些程序的一些區(qū)別和聯(lián)系,可以參考以下文獻(xiàn)345
創(chuàng)建鏡像
[marvin@localhost Worksapce]$ qemu-img create -f qcow2 XXX.qcow2 10G
創(chuàng)建虛擬機(jī)
qemu-system-x86_64 -enable-kvm -name "XXX" -m 1024 -smp 2 -boot d -drive file=XXX.qcow2,if=virtio,index=0,media=disk,format=qcow2 -drive file=YYY.iso,index=1,media=cdrom
創(chuàng)建之后通過vnc連接到安裝界面,之后便可進(jìn)行安裝
啟動虛擬機(jī)
# 未開啟kvm支持,使用標(biāo)準(zhǔn)輸入作為 QEMU monitor 命令源
./qemu-system-x86_64 -m 1024 -hda XXX.qcow2 -usb -usbdevice tablet -vnc :51 -monitor stdio
# 開啟kvm支持,使用標(biāo)準(zhǔn)輸入作為 QEMU monitor 命令源
./qemu-system-x86_64 --enable-kvm -m 1024 -hda XXX.qcow2 -usb -usbdevice tablet -vnc :51 -monitor stdio
# gdb調(diào)試
gdb --args ./qemu-system-x86_64 -m 1024 -hda XXX.qcow2 -usb -usbdevice tablet -vnc :51
# qemu的標(biāo)準(zhǔn)選項(xiàng)主要涉及指定主機(jī)類型、CPU模式、NUMA、軟驅(qū)設(shè)備、光驅(qū)設(shè)備及硬件設(shè)備等。
-name name # 虛擬機(jī)名稱
-M machine # 指定要模擬的主機(jī)類型,如standard PC,ISA-only PC或Intel-Mac等,可以使用“qemu-kvm -M ?”獲取所支持的所有類型
-m megs # 設(shè)定虛擬機(jī)的RAM大小
-cpu model # 設(shè)定CPU模型,如coreduo、qemu64等,可以使用"qemu-kvm -cpu ?"獲取所支持的所有模型
-smp n # 設(shè)定模擬的SMP架構(gòu)中CPU的個數(shù)
[,cores=cores] # 每個CPU的核心數(shù)
[,threads=threads] # 線程數(shù)
[,sockets=sockets] # CPU的socket數(shù)目
[,maxcpus=maxcpus] # 用于指定熱插入的CPU個數(shù)上限
-numa 非一致內(nèi)存訪問
-numa opts:指定模擬多節(jié)點(diǎn)的numa設(shè)備
-fda file:
-fdb file:使用指定文件(file)作為軟盤鏡像,file為/dev/fd0表示使用物理軟驅(qū)
-hda file:
-hdb file:
-hdc file:
-hdd file:使用指定file作為硬盤鏡像
-cdrom file:使用指定file作為CD-ROM鏡像,需要注意的是-cdrom和-hdc不能同時使用:將file指定為/dev/cdrom可以直接使用物理光驅(qū)
-drive # 定義一個硬盤設(shè)備:可用子選項(xiàng)有很多
file=/path/to/somefile # 硬盤映像文件
if=interface # 硬盤設(shè)備接口類型 ide、scsi、sd、virtio(半虛擬化)
index=index # 設(shè)定同一種控制器類型中不同設(shè)備的索引號,即標(biāo)識號
media=media # 定義介質(zhì)類型為硬盤還是光盤disk、cdrom
snapshot=snapshot # 指定當(dāng)前硬盤設(shè)備是否支持快照功能:on或off
cache=cache # 定義如何使用物理機(jī)緩存來訪問塊數(shù)據(jù),其可用值有none、writeback、unsafe和writethrough四個
format=format # 指定映像文件的格式,具體格式可參見qemu-img命令
-boot [order=drives][,once=drives][,menu=on|off] # 定義啟動設(shè)備的引導(dǎo)次序,每種設(shè)備使用一個字符表示:不同的架構(gòu)所支持的設(shè)備及其表示字符不盡相同,在x86 PC架構(gòu)上,a、b表示軟驅(qū),c表示第一個光驅(qū)設(shè)備,n-p表示網(wǎng)絡(luò)適配器,默認(rèn)為硬盤設(shè)備。例如:-boot order=dc,once=d
示例
qemu-system-x86_64 --name censtos -smp 2 -m 2048 -cpu host -drive file=/data/iso/CentOS-7-x86_64-Minimal-1804.iso,media=cdrom -drive file=centos.qcow2,media=disk -boot order=dc,once=d
顯示選項(xiàng)用于定義虛擬機(jī)啟動后的顯示接口相關(guān)類型及屬性等。
SDL
-sdl # 啟用SDL
VNC
-vnc display [option,option] # 默認(rèn)情況下,qemu使用SDL顯示VGA輸出;使用-vnc選項(xiàng),可以讓qemu監(jiān)聽在vnc上,并將VGA輸出重定向至vnc會話,使用此選項(xiàng)時,必須使用-k選項(xiàng)指定鍵盤布局類型;其中有許多子選項(xiàng),具體請參考qemu的手冊
display
1、host:N # N為控制臺號
192.168.1.1:1 # 5900為起始端口
2、unix:/path/to/socket_file # 監(jiān)聽在套接字
3、none # 不顯示
option
password # 連接時需要驗(yàn)證密碼,設(shè)定密碼通過monitor接口使用change
reverse # “反向”連接至某處于監(jiān)聽狀態(tài)的vncview上
-vga type # 指定要仿真的VGA接口類型,常見的類型有:
cirrus: Cirrus Logic GD5446顯示卡
std:帶有Bochs VBI擴(kuò)展的標(biāo)準(zhǔn)VGA顯示卡
vmware:VMware SVGA-II兼容的顯示適配器
qxl:QXL半虛擬化顯示卡:與VGA兼容,在Guest中安裝qxl驅(qū)動后能以很好的方式工作,在使用spice協(xié)議時推薦使用此類型
none:禁用VGA卡
-monitor stdio # 在標(biāo)準(zhǔn)輸入輸出上顯示monitor界面
-nographic # 默認(rèn)情況下,qemu使用SDL來顯示VGA輸出,而此選項(xiàng)用于禁止圖形接口,此時,qemu類似一個簡單的命令行程序,其仿真串口設(shè)備將被重定向到控制臺
-curses # 禁止圖形接口,并使用curses/ncurses作為交互接口
-alt-grab # 使用Ctrl+Alt+Shift組合鍵釋放鼠標(biāo)
-ctrl-grab # 使用右Ctrl鍵釋放鼠標(biāo)
-spice option[,option[,...]] # 啟用spice遠(yuǎn)程桌面協(xié)議:其中有許多子選項(xiàng),具體請參照qemu-kvm手冊。
網(wǎng)絡(luò)屬性相關(guān)選項(xiàng)用于定義網(wǎng)絡(luò)設(shè)備接口類型及其相關(guān)的各屬性等信息。這里只介紹nic、tap和user三種類型網(wǎng)絡(luò)接口的屬性,其他類型請參考qemu手冊9。
nic #定義網(wǎng)絡(luò)接口
-net nic [,vlan=n,macaddr=n,model=type,name=name,addr=addr,vectors=v] # 創(chuàng)建一個新的網(wǎng)卡設(shè)備并連接至vlan n中:PC架構(gòu)上默認(rèn)的NIC為e1000,macaddr用于為其制定mac地址,name用于指定一個在監(jiān)控時顯示的網(wǎng)上設(shè)備名稱;qemu可以模擬多個類型的網(wǎng)卡設(shè)備,如virtio、i82557b、i82559er、ne2k_isa、pcnet、rtl8139、e1000、smc91c111、lance及mcf_fec等;不過,不同平臺架構(gòu)上,其支持的類型可能只包含前述列表中的一部分,可以使用qemu-system-x86_64 -net nic,model=?來獲取當(dāng)前平臺支持的類型。
vlan # vlan號
macaddr # mac地址(mac 默認(rèn)不變)
model # e1000 virtio
name # 設(shè)備名
addr # ip地址
tap #nic管理虛擬機(jī)中的接口,tap就是管理宿主機(jī)上的對應(yīng)接口
-net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][,downscript=dfile] # 通過物理機(jī)的TAP網(wǎng)絡(luò)接口連接至vlan n中,使用script=file指定的腳本(默認(rèn)為/etc/qemu-ifup)來配置當(dāng)前網(wǎng)絡(luò)接口,并使用downscript=file指定的腳本(默認(rèn)為/etc/qemu-ifdown)來撤銷接口配置;使用script=no和downscript=no可分別用來禁止執(zhí)行腳本。
user
-net user[,option][,option][,...]:在用戶模式配置網(wǎng)絡(luò)棧,其不依賴于管理權(quán)限;有效選項(xiàng)有:
vlan=n # 連接至vlan n,默認(rèn)n=0
name=name # 指定接口的顯示名稱,常用于監(jiān)控模式中
net=addr[/mask] # 設(shè)定GuestOS中可見的IP網(wǎng)絡(luò),掩碼可選,默認(rèn)為10.0.2.0/8
host=addr # 指定GuestOS中看到的物理機(jī)的IP地址,默認(rèn)為指定網(wǎng)絡(luò)中的第二個,即x.x.x.2
dhcpstart=addr # 指定DHCP服務(wù)地址池中16個地址的起始IP,默認(rèn)為第16個至第31個,即x.x.x.16-x.x.x.31
dns=addr # 指定GuestOS可見的dns服務(wù)器地址,默認(rèn)為GuestOS網(wǎng)絡(luò)中的第3個地址,即x.x.x.3
tftp=dir # 激活內(nèi)置的tftp服務(wù)器,并使用指定的dir作為tftp服務(wù)器的默認(rèn)根目錄
bootfile=file # BOOTP文件名稱,用于實(shí)現(xiàn)網(wǎng)絡(luò)引導(dǎo)GuestOS,如:qemu -hda linux.img -boot n -net user,tftp=/tftpserver/pub,bootfile=/pexlinux.0
1、隔離模型
使用bridge連接各個虛擬機(jī)但不關(guān)聯(lián)物理網(wǎng)卡
2、nat模型
在路由模型上添加nat規(guī)則 iptables
3、路由模型
在隔離模型的基礎(chǔ)之上添加一個虛擬網(wǎng)卡,開啟路由轉(zhuǎn)發(fā)功能。
需要虛擬機(jī)指定虛擬網(wǎng)卡的ip為網(wǎng)關(guān)
需要在要通信的主機(jī)或路由添加回復(fù)報(bào)文的路由條目
4、橋接模型
在隔離模型的bridge上添加物理網(wǎng)卡
將物理網(wǎng)卡變?yōu)閎ridge,將原來的IP放到一張?zhí)摂M網(wǎng)卡并添加到橋上
dhcp 服務(wù)器
namespace 名稱空間
yum install bridge-utils #安裝工具包
rpm -ql bridge-utils #查看utils釋放的文件
brctl -h #查看幫助
brctl addbr br0 #添加網(wǎng)橋
ifconfig -a #查看全部接口
brctl stp br0 off #關(guān)閉生成樹
ip link set br0 up #啟動br0設(shè)備
ip addr del 192.168.1.50/24 dev ens33 #拆除物理網(wǎng)卡ip
ip addr add 192.168.1.50/24 dev br0 #添加ip
ip a #ip是否添加成功
ping 192.168.1.50 #檢查ip可用
ip link set dev ens33 master br0 #物理網(wǎng)卡加入橋接設(shè)備
brctl show #查看是否加入橋
-no-acpi # 禁用ACPI功能,GuestOS與ACPI出現(xiàn)兼容問題時使用此選項(xiàng)
-ballcon none # 禁用balloon設(shè)備
-balloon virtio[,addr=addr] # 啟用virtio balloon設(shè)備
查看創(chuàng)建qcow2格式的磁盤支持的選項(xiàng)