Ничего сложного, монтируем в виртуалку любой live cd с Linux на борту, также грузим физический комп, на который будем переносить с такой-же виртуалки, настраиваем между ними сеть, дальше на компе куда будем клонировать:
nc -l 10000 > /dev/sda
на компе с которого будем клонировать
nc 192.168.1.2 10000 < /dev/sda
Дожидаемся завершения, перезагружаемся уже с жесткого диска и получаем точную копию системы.
Как это работает?
Команда nc открывает порт 10000 для прослушивания и ждет данные. Затем эти данные перенаправляются напрямую на диск.
На другом компьютере команда nc устанавливает связь с компьютером по адресу 192.168.1.2, читает данные с локального диска /dev/sda и передает удаленному компьютеру на порт 10000.
Если диски разные по размеру после переноса необходимо сделать resize2fs
Второй способ - использовать для этих целей clonezilla, манулов полный инет, лично я пользуюсь nc, работает прекрасно в обе стороны как с виртуалок на физ сервера, так и из физ. серверов в виртуалки и по факту 2 команды.