General
Enable KVM full virtualization support:
qemu-system-x86_64 -enable-kvm disk.imgor:
qemu-system-x86_64 disk.imgUse KVM processor with all host features:
qemu-system-x86_64 -cpu host disk.imgEmulate a standard PC machine:
qemu-system-x86_64 -cpu host -machine type=pc disk.imgSet virtual RAM size to 2 GB:
qemu-system-x86_64 -cpu host -machine type=pc -m 2G disk.img
Drives
Boot ISO file ‘boot.iso’ as CD-ROM drive:
qemu-system-x86_64 -drive file=boot.iso,media=cdromBoot existing device ‘/dev/sdh’:
qemu-system-x86_64 -drive file=/dev/sdh,media=diskBoot a VMware Virtual Machine Disk (VMDK):
qemu-system-x86_64 -drive file=disk.vmdk,media=diskBoot image in read-only mode and without cache:
qemu-system-x86_64 -drive file=disk.qcow2,readonly,cache=none,media=diskMount directory ‘/mnt/’ as a Virtual FAT filesystem (VVFAT):
qemu-system-x86_64 -drive file=fat:rw:/mnt/,media=diskDetermine boot order to be ‘cd->disk->network’:
qemu-system-x86_64 -boot order=dcn -cdrom boot.iso -hda disk.qcow2
Video
Select standard VGA card with resolutions up to 2560x1600:
qemu-system-x86_64 -vga std disk.imgStart in full screen:
qemu-system-x86_64 -vga std -full-screen disk.imgSee supported screen resolutions (in guest machine):
xrandrChange screen resolution (in guest machine):
xrandr --size 1or:
xrandr --size 1920x1080Toggle full screen:
Ctrl+Alt+fEnlarge screen:
Ctrl+Alt+`` + ``Shrink screen:
Ctrl+Alt+`` - ``Restore the screen’s un-scaled dimensions:
Ctrl+Alt+u
Audio
Enable audio and select Intel HD Audio hardware with PulseAudio (
pa) as backend:qemu-system-x86_64 -audio pa,model=hda disk.img
Network
User Networking (SLIRP) default settings:
Setting IP Network 10.0.2.0 Netmask 255.255.255.0 Gateway 10.0.2.2 Namerserver 10.0.2.3 SMB server 10.0.2.4 Configure User Networking:
qemu-system-x86_64 -netdev user,id=mynet0,net=192.168.76.0/24,dhcpstart=192.168.76.9Dump Virtual Machine’s network traffic to PCAP file:
qemu-system-x86_64 -netdev user,id=mynet0 -object filter-dump,id=dump0,netdev=mynet0,file=./vm0.pcap
Images
Create an image file of 4G of size:
qemu-img create -f qcow2 disk.qcow2 4GConvert from VMware Virtual Machine Disk (VMDK) to raw format:
qemu-img convert -f vmdk disk.vmdk -O raw disk.imgConvert from raw format to qcow2 format:
qemu-img convert -f raw disk.img -O qcow2 disk.qcow2Convert from VirtualBox Disk Image (VDI) format to raw format:
vboxmanage clonehd disk.vdi --format raw disk.imgConvert from raw format to VirtualBox Disk Image (VDI):
vboxmanage convertfromraw disk.img --format VDI disk.vdi
Snapshots
Boot image with temporary snapshot so changes are discarded:
qemu-system-x86_64 disk.qcow2 -snapshotCreate snapshot of image:
qemu-img snapshot -c name-of-snapshot disk.qcow2List snapshots for image file:
qemu-img snapshot -l disk.qcow2Revert to specific snapshot:
qemu-img snapshot -a name-of-snapshot disk.qcow2Delete specific snapshot:
qemu-img snapshot -d name-of-snapshot disk.qcow2Create a new disk image based on an existing image:
qemu-img create -b disk.qcow2 new-disk.qcow2Copy an image based on a backing image so both are merged into one:
qemu-img convert new-disk.qcow2 new-disk-merged.qcow2
Vagrant
Install plugin for libvirt:
vagrant plugin install vagrant-libvirtInstall plugin to convert vagrant boxes:
vagrant plugin install vagrant-mutateMigrate official Vagrant boxes to libvirt format:
vagrant box add debian/jessie64 vagrant mutate debian/jessie64 libvirtStart Vagrant environment using libvirt as provider:
vagrant up --provider libvirt
virsh
Edit virtual machine’s XML configuration:
virsh edit "<vmname>"Configure port redirection in XML configuration:
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> ... <qemu:commandline> <qemu:arg value='-netdev'/> <qemu:arg value='user,id=net0,net=10.0.10.0/24,hostfwd=tcp:127.0.0.1:2222-:22'/> <qemu:arg value='-device'/> <qemu:arg value='e1000,netdev=net0'/> </qemu:commandline> </domain>
Setup
Prepare an image file:
qemu-img create -f qcow2 ./disk.img 4G sudo modprobe nbd max_part=16 sudo qemu-nbd -c /dev/nbd0 ./disk.img printf 'o\nn\np\n1\n\n\nw\n' | sudo fdisk /dev/nbd0 sudo partprobe /dev/nbd0 sudo mkfs.ext4 /dev/nbd0p1 sudo qemu-nbd -d /dev/nbd0 sudo modprobe -r nbdAlternative way to prepare a RAW image file:
qemu-img create -f raw ./disk.img 4G printf 'o\nn\np\n1\n\n\nw\n' | fdisk ./disk.img sudo losetup /dev/loop0 ./disk.img sudo partprobe /dev/loop0 sudo mkfs.ext4 /dev/loop0p1 sudo losetup -d /dev/loop0Yet another way to prepare a RAW image file:
qemu-img create -f raw ./disk.img 4G printf 'o\nn\np\n1\n\n\nw\n' | fdisk ./disk.img sudo kpartx -av ./disk.img sudo mkfs.ext4 /dev/mapper/loop0p1 sudo kpartx -dv ./disk.imgMount and unmount partition inside image file:
guestmount -a ./disk.img -m /dev/sda1 --rw /mnt/loop ls -l /mnt/loop guestunmount /mnt/loopUse debootstrap to install a system into a partition inside an image file and chroot into it:
sudo modprobe nbd max_part=16 sudo qemu-nbd -c /dev/nbd0 ./disk.img sudo partprobe /dev/nbd0 sudo mount /dev/nbd0p1 /mnt/loop sudo debootstrap --arch amd64 stretch /mnt/loop http://deb.debian.org/debian sudo mount -t proc /proc /mnt/loop/proc sudo mount --rbind --make-rslave /dev /mnt/loop/dev sudo mount --rbind --make-rslave /sys /mnt/loop/sys sudo mount --rbind --make-rslave /run /mnt/loop/run sudo chroot /mnt/loop /bin/bash # # commands inside chroot sudo umount -R /mnt/loop sudo qemu-nbd -d /dev/nbd0 sudo modprobe -r nbd
Links
- Discover Vagrant Boxes - Atlas by HashiCorp
- Luca Invernizzi - Vagrant and libVirt(KVM/Qemu) - Setting up boxes the easy way
- OpenStack Docs: Modify images
- pradels/vagrant-libvirt: Vagrant provider for libvirt.
- QEMU/Images - Wikibooks, open books for an open world
- Running QEMU with port redirection through libvirt - Snippets
- sciurus/vagrant-mutate: Convert vagrant boxes to work with different providers
- Vagrant Libvirt Install on Ubuntu 14.04 - Linux Simba
- xrandr(1) — x11-xserver-utils — Debian stretch — Debian Manpages