So I upgraded my VM server. Fresh new NVMe drives in RAID1 with AlmaLinux 8 on them. I then copied all my VMs over, updated their machines to pc or q35 as needed and launched them to test them. Most booted up fine. Three of them failed with the following error.
qemu-kvm: block/io.c:1438: bdrv_aligned_preadv: Assertion `(offset & (align - 1)) == 0' failed.
Fortunately they weren't important VMs so I could wait until today to fix the problem. The solution was to use qemu-img to convert the rewrite the disk images.
cd /kvm/VM/pool mkdir bad mv vda.img bad qemu-img convert bad/vda.img vda.img -p -O qcow2
That should work for most people. Note that I assume your images are qcow2 (which they should be). If you had some raw images, you could change qcow2 to raw above. Or change types='raw'
to type='qcow2'
via virsh edit VM
.
Here we verify the new images.
modprobe nbd max_part=8 qemu-nbd --connect=/dev/nbd0 /kvm/VM/pool/vda.img # disconcertingly, Alma will autoactivate any VGs on the image. Otherwise we'd do partx -a /dev/nbd0 pvscan /dev/nbd0p2 vgchange -ay VGNAME # now things should be available fsck -f /dev/nbd0p1 fsck -f /dev/mapper/VGNAME-lvname vgchange -an VGNAME qemu-nbd --disconnect=/dev/nbd0
My image had /boot as partition 1 and / as a LV in in partition2.