Zend certified PHP/Magento developer

Is there a way to make a virtual machine that resembles a given real one as closely as possible?

I’ve taken a habit of installing OSes on older machines as follows: I create a virtual disk drive on my more powerful desktop, so that it is as large as the physical drive, then I run the installation using a virtual machine, and then I copy the contents of the virtual disk drive onto the real one using whatever method is convenient. Essentially, I use Transforming a Virtual Machine into a Real Machine as my main workflow.

This is easier because then I don’t need to make installation media to put into the target PC, and it turns out that because my desktop has an SSD, in many cases it’s faster to copy the whole contents of a disk drive than to install on the old one directly.

However, once I’m done with this, I sometimes find that I need to spend extra time installing drivers for the target PC’s hardware. This is rather annoying and I would prefer not to have to do it.

Is it possible to run some program on the target PC to collect the hardware info, export that into some VM description format, and then use that data on my desktop to create a VM whose virtual hardware resembles the real machine?

One idea I had for what was possible, though I’d prefer not to have to do it, is to run some sort of agent software on the target PC that would provide access to its peripherals (like PCI cards) over the network, and the virtual machine connects to that, and when the guest OS would do some operation involving them then that gets deferred to the real hardware. This would be much less convenient and slower than emulating the peripheral directly, but might be necessary for some exotic hardware for which the VM has no emulation — if such options exist I’d also be interested in them.