Notes on slightly frustrating process to move an Ubuntu VM on QEMU / KVM from bios to UEFI boot.
Status: 25 May 2020 - writing notes following doing this across a number of VM
This is actually pretty straight forward, but if you search for how to do this you will get some very very complicated instructions. Here is a proven and straight forward process...
The process documented here is for a VM, which has some aspects that make this simpler (ie copy of disk rather than in place update)
- Do apt update to ensure you have lastest SW install
- Stop VM and use: virsh edit <Domain> to change machine to UEFI
- Copy qemu disk and resize copy +1G to ensure you have space for UEFI partition
- Attach desktop Ubuntu CD iso (must be same version as you VM)
- Attach the second (copied) disk to VM
- Reboot VM from Live CD
- Use gpartd (accepting resize fix on startup) and remove all partitions from 2nd (copied) disk
- Using gparted - add 512MB fat32 partition to copied disk
- Using gparted - copy orginal disk root partition to new 2nd disk and optionally any other partition (may need to do swapoff if you have swap partition that is in use)
- Using gparted - accept all updates and mark new UEFI partition as: esp/boot
- Shutdown VM and remove the original disk and reboot VM from Live CD
- Now do: install grub-efi-amd46 package, mount UEFI partition and root partition. Do grub install using "grub-install" and edit fstab to include efi partition mount. Reboot.
--- Using Live CD boot your machine, boot using "Try Ubuntu" option --- Depending on your machines disk type, the disk could be on any of: --- sdX - sata --- vdX - virtio --- -- Now endure you have grub-efi installed on your Live -- $ sudo apt install grub-efi --- --- Create directories to mount disks and mount them --- $ cd /media $ sudo mkdir ROOT $ sudo mkdir EFI $ sudo mount /dev/vda2 /media/ROOT $ sudo mount /dev/vda1 /media/EFI --- --- Now install grub --- $ sudo grub-install --target=x86_64-efi /dev/vda --efi-directory=/media/EFI --boot-directory=/media/ROOT/boot Installing for x86_64-efi platform Installation finished. No error reported. --- --- cd into ROOT/etc and edit fstab to include mounting of efi --- Here is sample after editing (see /boot/efi entry) --- $ cd /media/ROOT/etc $ cat fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # #
UUID=83199e8d-6d80-4db9-8dc1-8e7eed326d4e / ext4 errors=remount-ro 0 1 UUID=214A-5446 /boot/efi vfat defaults 0 0 UUID=4006ff1d-8a08-4dac-8a18-c3a8a3d542a3 none swap sw 0 0 --- --- Now reboot from hd ---
You should be up and running again as UEFI / OVMF machine
References & Links:
"Ask Ubuntu" very complicated instructions - Based on physicaal machine, but final post provides simple way
"Ask Ubuntu" even more complicated instructions requiring chroot... - you really need to understand what you are doing to follow these ...