安裝 QEMU
sudo apt-get install qemu-kvm \
qemu \
virt-manager \
virt-viewer \
libvirt-daemon-system \
libvirt-clients \
libvirt-daemon-driver-lxc
基本操作
建立虛擬磁碟
qemu-img create -f qcow2 hw1-ubuntu.qcow2 20G
掛載開機碟、開機
掛載與開機
qemu-system-x86_64 -smp 4,sockets=1,cores=4,threads=1 \
-cpu host \
-m 2G \
-boot d \
-cdrom ./ubuntu-16.04.6-desktop-amd64.iso \
-hda my_ubuntu.qcow2 \
-machine ubuntu,accel=kvm \
-vga virtio
- 其實可以使用 -smp 4就好,只是不夠精確因此不建議。
- 使用 -cpu host比較不容易因為指令集支援問題而出現警告
- -boot d在第一次開機時優先使用 CD-ROM,重開機後依照預設順序
- 加速選項:- 可以只使用 -accel來指定:- tcg預設使用
- kvm、- xenLinux 使用,可搭 virt-manager
- hvfmacOS 10.10+ 使用,可搭 homebrew-virt-manager
- haxWindows 7+ 使用
 
 
- 可以只使用 
單純開機
qemu-system-x86_64 -smp 4 \
-cpu host \
-m 2G \
-hda my_ubuntu.qcow2 \
-machine ubuntu,accel=kvm \
-vga virtio
設定
網路配置
基本觀念
QEMU 在設定網路時有三種常見參數:
- -net選項可以定義前端和後端
- -netdev選項只能定義後端
- -nic可以一條命令定義前端和後端(最新最推薦)
設定 NAT 模式
-nic user,model=virtio
設定橋接
-nic tap,model=virtio
- 需要先確認是否有橋接裝置,沒有的話會出現 - W: /etc/qemu-ifup: no bridge for guest interface found
- 設定橋接步驟(使用 ip,當然也可用 brctl) - # 新增橋接裝置 sudo ip link add br0 type bridge # 將 enp2s0 橋接到 br0 上 sudo ip link set enp2s0 master br0 sudo ip link set br0 up # 讓 br0 連網,這樣 enp2s0 才會通 sudo dhclient br0 # 顯示目前橋接狀況 brctl show // 將 enp2s0 移除 bridge sudo ip link set enp2s0 nomaster
- 若需自訂橋接器可參考這篇 
NUMA
最簡單方式(自動配置)
-smp 8,sockets=4,maxcpus=8 \
-numa node \
-numa node \

進階設定
-smp 8,sockets=4,maxcpus=8 \
-numa node,nodeid=0 \
-numa node,nodeid=1 \
-numa dist,src=0,dst=1,val=50 \
查看 NUMA 節點狀態
- numactl --hardware
- lstopo、- lstopo topo.pdf
詳細參數請參考官方文件
QEMU 小技巧
不知道有哪些參數?
在參數後面加上 ? 可以查詢可用的值,例如:
$ qemu-system-x86_64 -accel ?    # 這參數為加速器,預設使用 tcg
Possible accelerators: kvm, xen, hax, tcg
$ qemu-system-x86_64 -machine ?  # 這參數為要模擬的機器
Supported machines are:
pc-i440fx-zesty    Ubuntu 17.04 PC (i440FX + PIIX, 1996)
pc-i440fx-yakkety   Ubuntu 16.10 PC (i440FX + PIIX, 1996)
pc-i440fx-xenial   Ubuntu 16.04 PC (i440FX + PIIX, 1996)
pc-i440fx-wily    Ubuntu 15.04 PC (i440FX + PIIX, 1996)
pc-i440fx-trusty   Ubuntu 14.04 PC (i440FX + PIIX, 1996)
ubuntu        Ubuntu 19.10 PC (i440FX + PIIX, 1996) (alias of pc-i440fx-eoan)
pc-i440fx-eoan    Ubuntu 19.10 PC (i440FX + PIIX, 1996) (default)
pc-i440fx-eoan-hpb  Ubuntu 19.10 PC (i440FX + PIIX +host-phys-bits=true, 1996)
pc-i440fx-disco    Ubuntu 19.04 PC (i440FX + PIIX, 1996)
...
將固定大小磁碟配置改成動態配置
$ qemu-img convert disk1.img -O qcow2 disk1-sparse.img
The “-O” option lets you specify the output format – in your case, both the input and output would be qcow2, but qemu-img is smart enough to, by default, apply sparse technology to the output file.
減少虛擬硬碟大小(reclaim)
- 在不同系統中有不同的前置作業 - 在 Linux 中:
 - dd if=/dev/zero of=/mytempfile rm -f /mytempfile- 在 Windows 中:- 下載 SDelete
- 執行 c:\sdelete.exe -z c:
 
 
- 將客體機(guest)關機 
- 最後,在 host 機器上執行 - mv original_image.qcow2 original_image.qcow2_backup qemu-img convert -O qcow2 original_image.qcow2_backup original_image.qcow2
其他功能
Live migration
sudo qemu-system-x86_64 -smp 4,sockets=1,cores=4,threads=1 \
-hda my_ubuntu.qcow2 \
-m 2g \
-accel kvm \
-vga virtio \
-monitor stdio \
-incoming tcp:0:4444
甘苦談
- 在 macOS 中,使用 VirtualBox 之類的軟體裝完 Linux,再到裡面用 KVM 裝虛擬機,效果比用 hvf好
參考
comments powered by Disqus