1.查看主機是否支持KVM,egrep -c '(vmx|svm)' /proc/cpuinfoubuntu
2.若是單臺虛機的vCPU數量大於物理vCPU的數量,會帶來明顯性能損失。windows
3.VirtualBox建立的虛擬機目前不支持Inter VT-x/EPT等虛擬化,因此直接使用vmvare建立虛擬機,而後安裝kvm便可。使用qemu建立虛擬機時,必定要啓用-enable-kvm,會帶來明顯的性能提高。api
4.運行一臺虛擬機:bash
qemu-system-x86_64 -m 1024 -smp 1 -enable-kvm -boot order=cd -hda ubuntu-server.qcow2 -cdrom ubuntu-16.04-server-amd64.iso -monitor stdio -net nic -net user,hostfwd=::5022-:22,hostfwd=::5080-:80 -net dump -vnc :2 -device piix3-usb-uhci -device usb-tablet
windows虛機能夠加 -balloon virtio -device virtio-serial-pci 用於虛擬virtio相關的設備,-net nic,model=virtio網絡
-m 內存MBdom
-smp vCPU數量tcp
-boot order=cd 即啓動順序爲先是硬件磁盤,再是cdrom光盤。(c:hda,d:cdrom)ide
-hda file 表示使用文件做爲系統的第0塊IDE磁盤,hdb,hdc,hdd分別表示第1-3塊磁盤。使用咱們製做好的磁盤文件。性能
-cdrom file 使用文件做爲光盤鏡像。測試
-monitor stdio 在標準輸入輸出上開啓qemu monitor
-net nic 分配一張網卡
-net tap 表示啓用橋接模式的網絡,qemu會檢測當前系統的ip route找到brX網卡接口
沒有任何-net參數時,qemu默認使用-net nic 。橋接網絡須要配置橋接網卡如br0.
-net user表示使用用戶模式的網絡。其本身實現了TCP/IP協議棧。hostfwd表示端口轉發。將虛機的端口轉發到宿主機的端口。
-net dump 至關於對虛機執行tcpdump
-vnc :2 表示開啓VNC界面,不使用SDL顯示虛機的圖形界面。VNC server的端口爲5900+2,使用vncviwer訪問這個端口便可。
-device piix3-usb-uhci -device usb-tablet 解決VNC中的鼠標偏移問題
5.建立一個空鏡像文件:qemu-img create -f qcow2 xxxx.qcow2 20
最後一個參數表示鏡像文件大小。QCOW2格式的鏡像爲動態增加大小。初始大小爲0
6.查看QEMU支持的全部cpu模型:qemu-system-x86_64 -cpu ?
7.可用的物理內存空間和交換空間的大小之和應該等於或大於配置給全部客戶機的內存總和,不然,在各個客戶機內存使用同時達到較高比率時可能會有客戶機因內存不足被強制關閉。
8.磁盤掛載:ls -al /dev/disk/by-uuid 查看磁盤的UUID
# <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda1 during installation UUID=aca02c5d-6cd5-4d44-99c3-01254abc3cda / ext4 errors=remount-ro 0 1
<1> fdisk -l 查看可用磁盤,假如可用磁盤是/dev/sda
<2> fdisk /dev/sda編輯分區信息,p查看分區表,w保存分區表,n新建分區
<3> mount /dev/sda4 /mnt 將分區掛載到掛載點
<4>編輯 /etc/fstab 將掛載命令開機執行
<5> mount -a 驗證fstab文件是否正確。
9.換光盤問題,在qemu monitor界面下,輸入
info block
獲得光盤的設備名如ide1-cd0:
ide0-hd0 (#block160): win10.qcow2 (qcow2)
Cache mode: writeback
ide1-cd0 (#block379): /dev/cdrom (raw, read-only)
Removable device: not locked, tray closed
Cache mode: writeback
<1>彈出光驅:
eject ide1-cd0
<2>插入新光盤:change ide1-cd0 newCdrom.iso或者/dev/cdrom,/dev/sr0
10.虛機遷移:
<1> 原主機根據鏡像文件建立增量鏡像文件:qemu-img create -f qcow2 -o backing_file=ubuntu-server.qcow2,size=20G ubuntu-instance1.qcow2 注意backing_file即爲基礎的鏡像文件,ubuntu-instance2.qcow2爲增量鏡像文件。
<2>目的主機:一樣建立同一個backing_file的鏡像文件,
qemu-img create -f qcow2 -o backing_file=ubuntu-server.qcow2,size=20G ubuntu-instance2.qcow2
<3>運行目的主機打開其監聽狀態:
qemu-system-x86_64 -m 1024 -smp 1,maxcpus=8 -enable-kvm -boot order=cd -drive file=ubuntu-instance2.qcow2,if=virtio -cdrom /dev/cdrom -monitor stdio -net nic,model=virtio -net user -net dump -vnc :3 -balloon virtio -device virtio-serial-pci -incoming tcp:0:6666
注意-incoming tcp:0:6666 表示監聽0.0.0.0:6666端口。
<4>在源主機的qemu monitor中執行migrate -i tcp:127.0.0.1:6666,等待增量執行完成。源主機會被suspend
11.啓動虛機時添加-cpu host參數能夠支持KVM嵌套虛擬化。-cpu host表示將宿主機的cpu暴露給客戶機使用,可是存在動態遷移的問題。所以建議使用-cpu qemu64,+vmx來激活vmx特性。其餘cpu特性同理。
12.在宿主機中,開啓KSM(Kennel SamePage Merging)內核同頁合併以減小物理內存的使用,該服務掃描QEMU進程中相同的內存而後合併,若是運行的虛擬機操做系統相似可使用該服務減小內存。開啓: echo 1>/sys/kernel/mm/ksm/run
13.libvirt xml示例:
命令行:
qemu-system-x86_64 -m 1024 -smp 1,maxcpus=8 -enable-kvm -boot order=cd -drive file=win10.qcow2,if=virtio -cdrom /dev/cdrom -monitor stdio -net nic,model=virtio -net user -vnc :1 -device piix3-usb-uhci -device usb-tablet -balloon virtio -device virtio-serial-pci
<domain type="kvm" xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <name>win2008</name> <uuid>825a2ede-0aca-47b6-b0c8-aebe70f5180e</uuid> <os> <type>hvm</type> <boot dev="hd"/> <boot dev="cdrom"/> </os> <vcpu placement='static'>1</vcpu> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <on_lockfailure>poweroff</on_lockfailure> <features> <pae/> <acpi/> <apic/> </features> <clock offset='utc'/> <devices> <emulator>/usr/bin/kvm-spice</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/home/denglei/qemu/win10.qcow2'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </disk> <controller type='usb' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> <controller type='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <interface type='network'> <mac address='52:54:00:bd:f9:55'/> <source network='default'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type="pty"> <target port='0'/> </serial> <console type="pty"> <target port='0'/> </console> <input type="tablet" bus="usb"/> <input type="mouse" bus="ps2"/> <graphics type="vnc" port="5904" listen="0.0.0.0"/> <sound model='ich6'> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </sound> <video> <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </memballoon> </devices> </domain>
虛擬機磁盤讀寫測試。
本地宿主機測試的磁盤讀寫
14.新的命令的書寫(網絡部分),同時建立多臺虛擬機會出現mac地址相同的狀況,所以給虛機網卡指定ip:
#!/bin/sh no=$2 qemu-system-x86_64 -m 1024 -smp 1,maxcpus=8 -enable-kvm -boot order=cd -drive file=$1,if=virtio -cdrom /dev/cdrom -monitor stdio\ -netdev tap,id=net$2\ -device e1000,netdev=net$2,mac=`echo -n 00-60-2F; dd bs=1 count=3 if=/dev/random 2>/dev/null |hexdump -v -e '/1 "-%02X"'`\ -vnc :$2 -balloon virtio\ -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x5\