QEMU 速查表

安裝 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,重開機後依照預設順序
  • 加速選項:

單純開機

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 \

/img/QEMU_cheatsheet/Screenshot_from_2020-11-10_18-11-22.png

進階設定

-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
  • lstopolstopo 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