Kvm
Jump to navigation
Jump to search
prepare environment
# Is environment prepared for viritutalization. egrep '(vmx|svm)' /proc/cpuinfo vmx - (intel) svm - (amd)
Create disk image.
qemu-img create -f qcow2 fedora20.halfface.se.qcow2 50G
mount qcow2
qemu-img info $machine.qcow2 qemu-img info $machine.qcow2 --force-share
mount qcow2 image
# Create /dev/nbd devices if they do not exist. modprobe nbd max_part=8 # Connect qcow2 file to nbd device. qemu-nbd --connect=/dev/nbd0 ./img_output/Rocky-8.6-x86_64-dvd1/rocky8.qcow2 # Sanity check disk device. gdisk -l /dev/nbd0 Number Start (sector) End (sector) Size Code Name 1 2048 2099199 1024.0 MiB 8300 Linux filesystem 2 2099200 41943039 19.0 GiB 8E00 Linux LVM # List device to mount ls -la /dev/mapper/ total 0 drwxr-xr-x 2 root root 100 2022-08-25 12:13:50 . drwxr-xr-x 22 root root 5220 2022-08-25 12:13:50 .. lrwxrwxrwx 1 root root 7 2022-08-25 12:13:50 vg0-root -> ../dm-1 # Mount device mount /dev/mapper/vg0-root /mnt/
list all domain blocks
virsh domblklist $vm
list info about block device
virsh domblkstat $vm vda --human
List short info about vm
virsh dominfo $vm
add ram on the fly
virsh setmem --domain $VM --size 1500M --current
Install software
yum install -y qemu kvm SDL bridge-utils tunctl
install virtual machine.
virt-install --connect qemu:///system --name Fedora_16 --ram 2048 --vcpus=1 -f /ssd/libvirt/Fedora_16.qcow2 -s 30 -c /install/system/linux/fedora/16/Fedora-16-x86_64-netinst.iso --vnc --noautoconsole --hvm
delete virtual machine.
virsh undefine kvm_1
list libvirt storage pools
virsh pool-list --all
list content of pools
virsh pool-list --name | grep -v '^$' | while read POOL ; do POOL_DIR=$(virsh pool-dumpxml "${POOL}" | xmllint --format - | awk -F '<path>|</path>' '/<path>/ {print $2}') ; echo '#' "${POOL} ${POOL_DIR}" ; (cd "${POOL_DIR}/"; ls -la *.iso *.ISO *.qcow2 *.QCOW2 *.ima *.IMA *.img *.IMG 2>/dev/null ); done
connect to virtual machine.
virt-viewer Fedora_16
On remote machine over ssh
virt-viewer --connect qemu+ssh://root@anden.halfface.se/system win8
convert file format
# img to qcow2 qemu-img convert -cp -O qcow2 kvm_1.img kvm_1.qcow2 # vmdk to qcow2 qemu-img convert disk0.vmdk -O qcow2 bigbluebutton.qcow2 FILE=costest-ph9l4-rhcos.vmdk ; qemu-img convert ${FILE} -O qcow2 ${FILE%.*}.qcow2
snapshot
# Create snapshot virsh snapshot-create SL_63 # List snapshots virsh snapshot-list SL_63 # Delete snapshot virsh snapshot-delete SL_63 1346734871 # Revert to snapshot virsh snapshot-revert fedora20_2.halfface.se 1414336149
List info about qcow2 image.
qemu-img info sms-app02.qcow2 --force-share image: sms-app02.qcow2 file format: qcow2 virtual size: 100G (107374182400 bytes) disk size: 107G cluster_size: 65536 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 2 snapshot1 0 2018-04-23 18:50:15 00:00:00.000 4 pre-patch 0 2018-04-24 10:34:05 00:00:00.000 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false
Delete snapshot
qemu-img snapshot -d 4 sms-app02.qcow2
list information
# Simple information about domain. virsh dominfo fedora_20_raid1
# View information about domain. virsh dumpxml fedora_20_raid1 | less
change value of virtual machine
virsh autostart virtual_machine_name
disk handling
# Detach one of the disks. virsh detach-disk fedora_20_raid1 vda virsh detach-disk rhel8.5 vda --persistent
# Attach disk virsh attach-disk fedora_20_raid1 /ssd/libvirt/fedora20_1.qcow2 vda --sourcetype file --subdriver qcow2 virsh attach-disk host /var/lib/libvirt/images/host-#.qcow2 vdb --driver qemu --subdriver qcow2 --targetbus virtio --persistent
# Copy kvm machine. virsh dumpxml <domain> > domain.xml vi domain.xml virsh create domain.xml
# Eject cdrom. virsh change-media www.halfface.se hda --eject
duplicate move machine
# You cannot "clone" a running vm, stop it. suspend and destroy # are also valid options for less graceful cloning virsh shutdown this.vm # copy the storage. cp /var/lib/libvirt/images/{this-vm,that-vm}.img # dump the xml for the original virsh dumpxml this-vm > /tmp/that-vm.xml # hardware addresses need to be removed, libvirt will assign # new addresses automatically sed -i /uuid/d /tmp/that-vm.xml sed -i '/mac address/d' /tmp/that-vm.xml # and actually rename the vm: (this also updates the storage path) sed -i 's/this-vm/that-vm/g' /tmp/that-vm.xml # finally, create the new vm virsh define /tmp/that-vm.xml virsh start this-vm virsh start that-vm
virt-convert
Convert vmware image to kvm.
virt-convert . --disk-format qcow2 --destination .
drivers
Drivers for other os and enhancements.
https://www.spice-space.org/download.html
access via spice
remote-viewer spice://10.151.105.122:5900
virsh capabilities
currently supported machine types.
virsh capabilities
extend qcow2 image
Inspect storage
virsh domblklist almalinux8.4
Inspect storage
virsh domblkinfo almalinux8.4 /var/lib/libvirt/images/almalinux8.4.qcow2
Make storage to new size.
virsh blockresize almalinux8.4 /var/lib/libvirt/images/almalinux8.4.qcow2 64G
Inspect storage
qemu-img info almalinux8.4.qcow2 --force-share
Create partition from free space.
fdisk /dev/vda pvcreate /dev/vda3 vgextend almalinux /dev/vda3 lvextend -l +100%FREE /dev/mapper/almalinux-root resize2fs /dev/mapper/almalinux-root xfs_growfs /dev/mapper/almalinux-root
resize qcow2
qemu-img resize Fedora-38-Silverblue.qcow2 60G
rename vm
virsh stop foo virsh domrename foo bar cd /var/lib/libvirt/images mv foo.qcow2 bar.qcow2 # replace foo with bar virsh edit bar
rename vm
virsh domrename foo bar
dhcp leases
virsh net-list virsh net-dhcp-leases okd01-dwb8v
List networks
virsh net-list
virsh net-info default
View leases
virsh net-dhcp-leases default
ip address
Which ip does vm have
virsh domifaddr <vm>
Get ip from vm
nmap -sn -n 10.111.222.* >/dev/null ; export VM=<vm> ; MAC=$(virsh domiflist $VM | grep -oE '([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})') ; arp -a | grep $MAC
stop running vm:s
virsh list --state-running --name | grep -v ^$ | while read VM ; do virsh shutdown $VM ; done
execute command via agent
virsh -c qemu:///system qemu-agent-command <vm> '{"execute": "guest-exec", "arguments": { "path": "/usr/bin/ls", "arg": [ "/" ], "capture-output": true }}' virsh -c qemu:///system qemu-agent-command <vm> '{"execute": "guest-exec-status", "arguments": { "pid": <pid> }}' base64 -d on output.
all in one
export KVM=pm-app02 ; KVM_PID=$(virsh -c qemu:///system qemu-agent-command ${KVM} '{"execute": "guest-exec", "arguments": { "path": "id", "arg": [ "-a","-a" ], "capture-output": true }}' --pretty | jq -r .return.pid) ; virsh -c qemu:///system qemu-agent-command "${KVM}" "{\"execute\": \"guest-exec-status\", \"arguments\": { \"pid\": ${KVM_PID} }}" | jq -r '.return."out-data"' | base64 -d
virsh console <vm>
Connect to vm serial
virsh console <vm>
socat console
VM=terraform_test ; sudo socat -,echo=0 $(virsh dumpxml $VM | xq | grep "console type" | awk -F\" '{print $4}')
set password on user
virsh set-user-password <vm> root password
Which version of libvirtd
virsh -c qemu+ssh://root@hdplex.halfface.se/system version
send keyboard to vm
https://libvirt.org/manpages/virkeycode-xtkbd.html
virsh send-key terraform_vm --codeset linux KEY_LEFTALT KEY_TAB KEY_TAB
nested virualization and virt-install
# Enable nested virtualization. cat <<'EOF' > /etc/modprobe.d/kvm.conf options kvm_amd nested=1 options kvm ignore_msrs=1 report_ignored_msrs=0 EOF # Install dependecies. systemctl enable autofs --now ; ln -s /net/10.111.222.1/storage/install /install ; ln -s /net/10.111.222.1/storage/temp /temp dnf install -y virt-install libvirt qemu-kvm git stow vim-enhanced systemctl enable libvirtd --now # Setup cloud-os cp /install/system/linux/fedora/40/Fedora-Cloud-Base-Generic.x86_64-40-1.14.qcow2 /var/lib/libvirt/images/fedora-cloud-base-generic.qcow2 qemu-img info /var/lib/libvirt/images/fedora-cloud-base-generic.qcow2 qemu-img resize /var/lib/libvirt/images/fedora-cloud-base-generic.qcow2 +195G virt-install --name fedora-cloud-base-generic \ --cpu host-passthrough,cache.mode=passthrough \ --memory 19456 --vcpus 10 --graphics none\ --os-variant centos-stream9\ --import \ --disk /var/lib/libvirt/images/fedora-cloud-base-generic.qcow2,format=qcow2,bus=virtio \ --network bridge=br0,model=virtio \ --cloud-init \ --console pty,target_type=serial # Setup Fedora Server. cp /install/system/linux/fedora/40/Fedora-Server-KVM-40-1.14.x86_64.qcow2 /var/lib/libvirt/images/fedora-server-kvm.qcow2 qemu-img info /var/lib/libvirt/images/fedora-server-kvm.qcow2 qemu-img resize /var/lib/libvirt/images/fedora-server-kvm.qcow2 +195G virt-install --name fedora-server-kvm \ --cpu host-passthrough,cache.mode=passthrough \ --memory 19456 --vcpus 10 --graphics none\ --os-variant centos-stream9\ --import \ --disk /var/lib/libvirt/images/fedora-server-kvm.qcow2,format=qcow2,bus=virtio \ --network bridge=br0,model=virtio \ --cloud-init \ --console pty,target_type=serial