Skip to main content

Posts about kvm

kvm on raspberrypi

kvm On Raspberry Pi OS (64bit) beta test version

related packages

$ sudo apt install --no-install-recommends qemu-system-arm qemu-utils kpartx

boot alpine linux

get kernel and initra from the iso file

$ sudo mount -o loop alpine-standard-3.12.0-aarch64.iso /media/tmp
$ sudo cp /media/tmp/boot/initramfs-lts .
$ sudo cp /media/tmp/boot/vmlinuz-lts .
$ sudo umount /media/tmp

boot

$ sudo qemu-system-aarch64 -cpu host -enable-kvm -machine virt -nographic -m 512 \
> -kernel vmlinuz-lts -initrd initramfs-lts \
> -drive if=none,id=image,file=alpine-standard-3.12.0-aarch64.iso -device virtio-blk-device,drive=image \
> -netdev user,id=user0 -device virtio-net-device,netdev=user0 \
> -monitor telnet:localhost:10025,server,nowait

install debian10

download kernel and initrd file and create an empty virtual image file.

$ wget -O linux http://ftp.jp.debian.org/debian/dists/buster/main/installer-arm64/current/images/netboot/debian-installer/arm64/linux
$ wget -O initrd.gz http://ftp.jp.debian.org/debian/dists/buster/main/installer-arm64/current/images/netboot/debian-installer/arm64/initrd.gz
$ qemu-img create -f qcow2 hda.qcow2 16G

boot the installer with downloaded kernel and initrd file and install to the virtual image file.

$ sudo qemu-system-aarch64 -cpu host -enable-kvm -machine virt -m 512 \
> -kernel linux -initrd initrd.gz \
> -drive if=none,id=image,file=debian10.qcow2 -device virtio-blk-device,drive=image \
> -netdev user,id=user0 -device virtio-net-device,netdev=user0 \
> -monitor telnet:localhost:10025,server,nowait \
> -no-reboot -vnc :1

$ vncviewer xxx.xxx.xxx.xxx:5901

get kernel and initrd file from qcow2 file

$ lsmod | grep nbd
$ sudo modprobe nbd
$ sudo qemu-nbd -c /dev/nbd0 debian10.qcow2
$ sudo kpartx -av /dev/nbd0
$ sudo mount /dev/mapper/nbd0p1 /media/tmp

$ cp /media/tmp/initrd.img-4.19.0-11-arm64 .
$ cp /media/tmp/vmlinuz-4.19.0-11-arm64 .

$ sudo umount /media/tmp
$ sudo kpartx -dv /dev/nbd0
$ sudo qemu-nbd -d /dev/nbd0
$ sudo rmmod nbd

boot

$ sudo qemu-system-aarch64 -cpu host -enable-kvm -machine virt -m 512 \
> -kernel vmlinuz-4.19.0-11-arm64 -initrd initrd.img-4.19.0-11-arm64 \
> -append 'root=/dev/vda2' \
> -drive if=none,id=image,file=debian10.qcow2 -device virtio-blk-device,drive=image \
> -netdev user,id=user0 -device virtio-net-device,netdev=user0 \
> -monitor telnet:localhost:10025,server,nowait \
> -nographic

kvm virtualization

qcow2 イメージ

作成。

qemu-img create -f qcow2 image.qcow2 xxG

シュリンク。仮想マシンを止めて実行する。

mv image.qcow2 image.qcow2.bak
qemu-img convert -O qcow2  image.qcow2.bak image.qcow2

qemu-kvm コマンドのよく使うオプション

cdイメージから起動

-cdrom image.iso -boot d

cpuとメモリの指定

-smp 2 -m 2048

kvmでwindows10を使用する時、私の環境(Core i5 650)だと下記のように指定することで、cpu負荷が落ち着いた。

-cpu core2duo,+lahf_lm

その後、試行錯誤し、現在は下記の通り指定している。

-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time

(仮想)ストレージの指定。準仮想化ドライバを利用すると、スループットが上がるらしい。 (Windows等で利用する場合は、仮想マシン上でドライバを入れる必要がある。)

-drive if=virtio,file=image.qcow2

ネットワークインターフェースの指定(従来方式)

-net nic,macaddr=xx:xx:xx:xx:xx:xx,model=virtio
-net tap,ifname=vnet0

vncコンソールとキーマップの指定。

-vnc 192.168.xx.xx:xx -k ja

コンソールのマウスカーソルの位置がずれるときは以下を指定 (WindowsではCPU負荷が高くなるらしい)

-usbdevice tablet

デーモンとして起動

-daemonize

物理デバイスのパススルー

example

boot ultra lite linux distribution microcore linux for network configure test

kvm -drive if=virtio,file=linux-microcore-6.4.img -netdev tap,id=tap0 -device e1000,netdev=tap0,mac=52:54:00:12:34:56