QEMU 安裝與使用

QEMU 安裝與使用

安裝qemu

硬件準備

如果需要構建KVM環境,首先需要硬件支持。

首先處理器(CPU)要在硬件上支持VT技術,還要在BIOS中將其功能打開,KVM才能使用到。目前,多數流行的服務器和部分桌面處理器的BIOS都默認將VT打開了。

在BIOS中,VT的選項通過“Advanced→Processor Configuration”來查看和設置,它的標識通常爲“Intel®Virtualization Technology”或“Intel VT”等類似的文字說明。

設置好了VT和VT-d的相關選項,保存BIOS的設置並退出,系統重啓後生效。在Linux系統中,可以通過檢查/proc/cpuinfo文件中的CPU特性標誌(flags)來查看CPU目前是否支持硬件虛擬化。在x86和x86-64平臺中,Intel系列CPU支持虛擬化的標誌爲“vmx”,AMD系列CPU的標誌爲“svm”。所以可以用以下命令行查看“vmx”或者“svm”標誌:

[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

KVM作爲Linux kernel中的一個module而存在,是從Linux 2.6.20版本開始被完全正式加入內核的主幹開發和正式發佈代碼中。所以,只需要下載2.6.20版本,Linux kernel代碼即可編譯和使用KVM。

總的來說,下載最新KVM源代碼,主要有以下3種方式:
1)下載KVM項目開發中的代碼倉庫kvm.git。
2)下載Linux內核的代碼倉庫linux.git。
3)打包下載Linux內核的源代碼(Tarball 格式)。

首先查看系統是否加載了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

安裝qemu有兩種方式,一種爲源碼安裝,一種直接apt/yum/dnf安裝。

源碼安裝

參考官方步驟:https://www.qemu.org/download/

  1. 下載QEMU源碼

  2. 解壓

  3. configure

# 加入KVM
./configure --prefix=XXX --enable-debug --target-list=x86_64-softmmu --enable-kvm
# --prefix 選項設置qemu的安裝位置,之後若要卸載刪除qemu只要刪除該文件夾即可
# config完,可以在指定的qemu安裝文件夾下面找到config-host.mak文件,
# 該文件記錄着qemu配置的選項,可以和自己設置的進行對比,確保配置和自己已知
  1. make和安裝

make時如果缺少相關的庫或者軟件,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:用來創建虛擬機的命令行工具
  • libvirt:提供libvirtd daemon來管理虛擬機和控制hypervisor
  • libvirt-client:提供客戶端API用來訪問server和提供管理虛擬機命令行工具的virsh實體
  • virt-viewer:圖形控制檯

其中最重要的是qemu-kvm、qemu-img,同時爲了方便管理虛擬機,最好安裝上libvirt2

安裝完qemu後,在/usr/bin/目錄下會有qemu開頭的若干可執行程序, 類似qemu-x86_64這種命令是運行某種架構的程序的,qemu-system-x86_64是運行某種架構系統的(虛擬機),如果需要kvm支持,需要加上參數 -enable-kvm, 如果使用libvirt可以配置相應的xml來實現kvm支持。

更多關於這些程序的一些區別和聯繫,可以參考以下文獻345

QEMU使用

創建虛擬機678

  1. 創建鏡像
[marvin@localhost Worksapce]$ qemu-img create -f qcow2 XXX.qcow2 10G
  1. 創建虛擬機
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
  1. 創建之後通過vnc連接到安裝界面,之後便可進行安裝

  2. 啓動虛擬機

# 未開啓kvm支持,使用標準輸入作爲 QEMU monitor 命令源
./qemu-system-x86_64 -m 1024 -hda XXX.qcow2 -usb -usbdevice tablet -vnc :51 -monitor stdio
# 開啓kvm支持,使用標準輸入作爲 QEMU monitor 命令源
./qemu-system-x86_64 --enable-kvm -m 1024 -hda XXX.qcow2 -usb -usbdevice tablet -vnc :51 -monitor stdio
# gdb調試
gdb --args ./qemu-system-x86_64 -m 1024 -hda XXX.qcow2 -usb -usbdevice tablet -vnc :51

命令選項

qemu的標準選項

# qemu的標準選項主要涉及指定主機類型、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			# 設定模擬的SMP架構中CPU的個數
    [,cores=cores]		# 每個CPU的核心數
    [,threads=threads]  # 線程數
    [,sockets=sockets]  # CPU的socket數目
    [,maxcpus=maxcpus]  # 用於指定熱插入的CPU個數上限
-numa   非一致內存訪問
-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						# 定義一個硬盤設備:可用子選項有很多
    file=/path/to/somefile	# 硬盤映像文件
    if=interface			# 硬盤設備接口類型 ide、scsi、sd、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表示第一個光驅設備,n-p表示網絡適配器,默認爲硬盤設備。例如:-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

qemu顯示選項

顯示選項用於定義虛擬機啓動後的顯示接口相關類型及屬性等。

SDL 
 -sdl			# 啓用SDL

VNC
 -vnc display [option,option]	# 默認情況下,qemu使用SDL顯示VGA輸出;使用-vnc選項,可以讓qemu監聽在vnc上,並將VGA輸出重定向至vnc會話,使用此選項時,必須使用-k選項指定鍵盤佈局類型;其中有許多子選項,具體請參考qemu的手冊
    display
        1、host:N				# N爲控制檯號
            192.168.1.1:1		# 5900爲起始端口
        2、unix:/path/to/socket_file					# 監聽在套接字
        3、none					# 不顯示
    option
        password				# 連接時需要驗證密碼,設定密碼通過monitor接口使用change
        reverse					# “反向”連接至某處於監聽狀態的vncview上

-vga type		# 指定要仿真的VGA接口類型,常見的類型有:
	cirrus: Cirrus Logic GD5446顯示卡
	std:帶有Bochs VBI擴展的標準VGA顯示卡
	vmware:VMware SVGA-II兼容的顯示適配器
	qxl:QXL半虛擬化顯示卡:與VGA兼容,在Guest中安裝qxl驅動後能以很好的方式工作,在使用spice協議時推薦使用此類型
	none:禁用VGA卡

-monitor stdio	# 在標準輸入輸出上顯示monitor界面
-nographic		# 默認情況下,qemu使用SDL來顯示VGA輸出,而此選項用於禁止圖形接口,此時,qemu類似一個簡單的命令行程序,其仿真串口設備將被重定向到控制檯
-curses			# 禁止圖形接口,並使用curses/ncurses作爲交互接口
-alt-grab		# 使用Ctrl+Alt+Shift組合鍵釋放鼠標
-ctrl-grab		# 使用右Ctrl鍵釋放鼠標
-spice option[,option[,...]]	# 啓用spice遠程桌面協議:其中有許多子選項,具體請參照qemu-kvm手冊。

網絡屬性相關選項

網絡屬性相關選項用於定義網絡設備接口類型及其相關的各屬性等信息。這裏只介紹nic、tap和user三種類型網絡接口的屬性,其他類型請參考qemu手冊9

nic     #定義網絡接口
-net nic [,vlan=n,macaddr=n,model=type,name=name,addr=addr,vectors=v]		# 創建一個新的網卡設備並連接至vlan n中:PC架構上默認的NIC爲e1000,macaddr用於爲其制定mac地址,name用於指定一個在監控時顯示的網上設備名稱;qemu可以模擬多個類型的網卡設備,如virtio、i82557b、i82559er、ne2k_isa、pcnet、rtl8139、e1000、smc91c111、lance及mcf_fec等;不過,不同平臺架構上,其支持的類型可能只包含前述列表中的一部分,可以使用qemu-system-x86_64 -net nic,model=?來獲取當前平臺支持的類型。
    vlan		# vlan號
    macaddr		# mac地址(mac 默認不變)
    model		# e1000 virtio
    name		# 設備名
    addr		# ip地址

tap     #nic管理虛擬機中的接口,tap就是管理宿主機上的對應接口
-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可分別用來禁止執行腳本。

user
-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網絡中的第3個地址,即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=/pexlinux.0

kvm的網絡模型

1、隔離模型
    使用bridge連接各個虛擬機但不關聯物理網卡
2、nat模型
    在路由模型上添加nat規則 iptables
3、路由模型
    在隔離模型的基礎之上添加一個虛擬網卡,開啓路由轉發功能。
    需要虛擬機指定虛擬網卡的ip爲網關
    需要在要通信的主機或路由添加回復報文的路由條目
4、橋接模型
    在隔離模型的bridge上添加物理網卡
    將物理網卡變爲bridge,將原來的IP放到一張虛擬網卡並添加到橋上
dhcp        服務器
namespace   名稱空間

手動創建bridge

yum install bridge-utils    #安裝工具包
rpm -ql bridge-utils    #查看utils釋放的文件
brctl -h                #查看幫助
brctl addbr br0         #添加網橋
ifconfig -a             #查看全部接口
brctl stp br0 off       #關閉生成樹
ip link set br0 up      #啓動br0設備
ip addr del 192.168.1.50/24 dev ens33   #拆除物理網卡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        #物理網卡加入橋接設備
brctl show      #查看是否加入橋

i386平臺專用選項

-no-acpi		# 禁用ACPI功能,GuestOS與ACPI出現兼容問題時使用此選項
-ballcon none	# 禁用balloon設備
-balloon virtio[,addr=addr]	# 啓用virtio balloon設備

查看創建qcow2格式的磁盤支持的選項

參考


  1. Install KVM (QEMU) on CentOS 7 / RHEL 7 ↩︎

  2. How to Install QEMU on Ubuntu ↩︎

  3. qemu/qemu-kvm/qemu-system-x86_64/qemu-x86_64命令的區別? ↩︎

  4. Difference between qemu-kvm, qemu-system-x86_64, qemu-x86_64 ↩︎

  5. Re: [Qemu-discuss] Difference between qemu-kvm, qemu-system-x86_64, qemu ↩︎

  6. KVM虛擬化:使用qemu-kvm創建和管理虛擬機 ↩︎

  7. QEMU 1: 使用QEMU創建虛擬機 ↩︎

  8. qemu-kvm ↩︎

  9. QEMU version 4.1.0 User Documentation ↩︎

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