It's not that difficult do virtual > physical migrations in Linux. Linux is inherently portable, thanks to the kernel, you don't need to worry about stuff like drivers, at least for drivers which are part of the kernel (so not counting proprietary nVidia drivers - which you wouldn't be using in a VM anyways.)
Roughly, the process would go like this:
- Use
qemu-img convert
to convert your virtual disk to a raw image format - Use
dd
to write the image to your physical disk - Use
gparted
to resize/expand partitions on the disk as required - Examine the disk using
fdisk
/blkid
to see which device node your disk is using (eg /dev/nvme0n2 etc), then mount the new root volume and edit thefstab
to the correct disk paths if required - Chroot into the disk and reinstall your bootloader (GRUB or systemd-boot etc). The process for this will vary based on your bootloader, and your distro. Usually most distros should have some wiki or documentation on how to repair GRUB or w/e from chroot.
- Boot from the new disk and test. You may need to manually add an entry to your UEFI boot entries, if it's not showing up as an option in your UEFI boot menu.
- You may need to potentially install some extra stuff, for instance, you may need to install the Vulkan driver package for your GPU, maybe the CPU microcode package etc.
This is all of course, assuming you're migrating to a dedicated hard drive and you're only going to be using a single OS. On the other hand, if you're migrating on to an existing disk (dual-booting) the process would be a bit different - instead of dd
ing the entire image, you'd use losetup
and mount your raw disk image as a loop device, then use something like clonezilla or GParted to copy over only specific partitions excluding the ESP. After that, the rest of the process should be similar to the above, except you won't need to reinstall your bootloader - but you may need to update it's config to detect the new OS.
I've not accounted for complex setups btw, such as using LUKS or LVM. But the process still remains roughly the same, you'll just need a few additional commands to decrypt the partition before you copy them over.
In saying that, it may be easier to just reinstall the distro fresh on your real hardware. There are scripts out there to export your dotfiles and package lists, to make the migration easier.