qemu(1)
All the examples & notes use qemu-system-x86_64
but in most cases
this can be swapped with the system emulator for other architectures.
Keybindings
Graphic mode:
Ctrl+Alt+g release mouse capture from VM
Ctrl+Alt+1 switch to display of VM
Ctrl+Alt+2 switch to qemu monitor
No graphic mode:
Ctrl+a h print help
Ctrl+a x exit emulator
Ctrl+a c switch between monitor and console
VM config snippet
Following command-line gives a good starting point to assemble a VM:
qemu-system-x86_64 \
-cpu host -enable-kvm -smp 4 \
-m 8G \
-vga virtio -display sdl,gl=on \
-boot menu=on \
-cdrom <iso> \
-hda <disk> \
-device qemu-xhci,id=xhci \
-device usb-host,bus=xhci.0,vendorid=0x05e1,productid=0x0408,id=capture-card
CPU & RAM
-cpu host
emulate host CPU in guest VM-enable-kvm
use KVM instead software models (requires KVM on host machine)-smp <N>
number of guest CPUs
List available CPUs
qemu-system-x86_64 -cpu help
.
-m 8G
size of guest RAM
Graphic & Display
-vga virtio
use virtio as 3D video graphic accelerator (requires virgl in guest)-display sdl,gl=on
use sdl window and enable openGL context
Boot Menu
-boot menu=on
enables boot menu to select boot device (enter withESC
)
Block devices
-cdrom <iso>
attach cdrom drive with iso to a VM-hda <disk>
attach disk drive to a VM-drive file=<file>,format=qcow2
generic way to configure & attach a drive to a VM
Create a disk with qemu-img
To create a qcow2
disk (qemu copy-on-write) of size 10G
:
qemu-img create -f qcow2 disk.qcow2 10G
The disk does not contain any partitions
or a partition table
.
We can format the disk from within the guest as following example:
# Create `gpt` partition table.
sudo parted /dev/sda mktable gpt
# Create two equally sized primary partitions.
sudo parted /dev/sda mkpart primary 0% 50%
sudo parted /dev/sda mkpart primary 50% 100%
# Create filesystem on each partition.
sudo mkfs.ext3 /dev/sda1
sudo mkfs.ext4 /dev/sda2
lsblk -f /dev/sda
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
├─sda1 ext3 ....
└─sda2 ext4 ....
USB
Host Controller
-device qemu-xhci,id=xhci
add XHCI USB controller to the VM (supports USB 3.0, 2.0, 1.1).id=xhci
creates a usb bus namedxhci
.
USB Device
-device usb-host,bus=xhci.0,vendorid=0x05e1,productid=0x0408
pass-through USB device from host identified by vendorid & productid and attach to usb busxhci.0
(defined with controllerid
)
Debugging
-gdb tcp::<port>
open gdbstub on tcp<port>
(-s
shorthand for-gdb tcp::1234
).-S
freeze CPU at startup.