从虚拟机(VM)迁移到物理系统

Aka:如何将.vdi或.vmdk转换为物理磁盘上的实际安装?

将Ubuntu的虚拟机安装迁移到物理机器上是否可行/可行? 如果可能的话,这将是多么困难,以及我需要采取哪些步骤来准备迁移。

我想在VM上进行一些测试,如果能够将该系统迁移到物理硬件而不是重新安装所有内容。 这可能吗?

是的,这是可能的。 它甚至不是那么难,只需要一些时间,Ubuntu LiveCD,粘性塑料和外部USB磁盘(如果你没有多个内部磁盘)。

初步步骤:将磁盘转换为有用的东西

VMWare和VirtualBox(以及其他)都使用的磁盘格式不适合直接写入磁盘。 你可以,但我个人认为首先将它写入中间标准图像会更方便。 您可以从当前系统执行此操作,而无需启动到LiveCD。

  • 装载一个终端并开火:

    cd /media/wherever-the-image-is/ # for VMWare sudo apt-get install qemu-kvm qemu-img convert your-vmware-disk.vmdk -O raw disk.img # For VirtualBox VBoxManage internalcommands converttoraw your-virtualbox-disk.vdi /dev/sdX 
  • /media/wherever-the-image-is/disk.img移动到您不打算写的地方。 如果您计划将其写入当前所在的磁盘,则需要将其粘贴在单独的内部磁盘上,或者最糟糕的外部磁盘上。

  • 以下说明假设您已将其移至/media/dave/disk.img是外部USB磁盘)

  • 在进行任何认真的写作之前,请确保您有备份 。 这是一个陈词滥调的事情,但只有一个拼写错误,你真的有可能会破坏你的系统。 假设事情会出错并做好准备。 如果您要存储要存储的数据,CloneZilla可以帮助您进行整个磁盘备份。

将图像写入自己的磁盘

你会想做这样的事情。 这假设您要覆盖整个磁盘。 如果您想要安装Windows,请不要按照这些说明操作! 跳到子弹后。

  • 启动到Ubuntu Live CD并单击Try Ubuntu。

  • 安装存储vmdk映像的位置(例如外部USB磁盘为/media/dave )。 不要将要写入的位置挂载。

  • 然后我们去上class:

     sudo dd if=/media/dave/disk.img of=/dev/sdX 

    您希望将sdX替换为目标磁盘的正确路径。 sudo密码为空,只需点击返回。

  • 然后你可以打开gparted或其他东西,你应该看到你的Ubuntu分区位于磁盘上。 你应该能够扩展它。

将映像与另一个操作系统一起写入磁盘

这可能是一种更安全的做事方式。 除了你正确安装Ubuntu然后只是从disk.img同步文件之外,这个想法非常相似。

  • 这次你的LiveCD需要与你的虚拟安装版本相同的Ubuntu。 启动到Live CD,然后再次单击“安装”。

  • 按照安装程序进行操作,根据需要重新分配。 大约10分钟后,您将被安装,它会要求您重新启动。 不要重启。 如果你不小心做了什么并不重要,只要确保你已经回到LiveCD以获得下一个指示。

  • 将新安装的分区和外部磁盘disk.img到之前存储disk.img (只需在nautilus中双击它们)。

  • 将disk.img ISO挂载到终端中:

     sudo mkdir /media/oldinstall sudo mount -o loop /media/dave/disk.img /media/oldinstall 

    注意 – 创建所需的.img文件后,有时当您尝试将其作为循环设备挂载时,可能会出现以下错误

    “缺少NTFS签名。无法挂载’/ dev / loop0’:无效参数设备’/ dev / loop0’似乎没有有效的NTFS。”

    .img文件有时包含主引导记录和可能要挂载的实际分区之前的分区表。 因此,您需要找出所需分区的偏移量。 为此,可以使用分开的工具。 例如,请查看此链接中的sisco311的答案http://ubuntuforums.org/archive/index.php/t-1576011.html

    因此,如果您已将偏移量确定为“xxx”,则可以使用安装分区

     sudo mount -o loop,offset=xxx /media/dave/disk.img /media/oldinstall 
  • 从那里你可以选择樱桃文件,或者只是使用以下内容复制新Ubuntu安装的所有内容:

     sudo rsync /media/oldinstall/ /media/my-new-install/ 
  • 重新启动,你应该接受旧的VMWare安装,但在裸机上。 如果你遇到讨厌的grub问题,你可以通过回到Live CD,chrooting和修复东西来修复它。

也许这不是你要求的,但它可能会完成你想要做的事情。

由于您的所有设置都存储在主目录中,因此您只需将其备份到真实磁盘上的另一个分区即可。 在真实磁盘上安装新的Ubuntu之后,再次运行备份程序以恢复所有设置完好无损的主目录。

您可以使用名为DéjàDup的非常简洁的备份程序。

来自ubuntu软件中心的信息:

DéjàDup是一个简单的备份工具。 它隐藏了备份正确方式(加密,异地和常规)的复杂性,并使用双重性作为后端。

特征:

  • 支持本地,远程或云备份位置,例如Amazon S3或Rackspace Cloud Files

  • 安全地加密和压缩您的数据

  • 增量备份,让您从任何特定备份恢复

  • 安排定期备份

  • 与GNOME桌面完美集成

在此处输入图像描述

你将在不到两个小时内完成!

祝好运!

试试UDPCast

我们的想法是将整个vmdk从虚拟机中流出到物理机器,然后将其写入物理硬盘。

程序概述如下。

由于您有一个vmdk文件,因此您可以使用VMWare Workstation,甚至可以连接此vmdk的完整虚拟机。 使用附加的特定vmdk运行虚拟机,但不使用普通启动,而是使用PartedMagic liveCD进行启动。

启动liveCD后,导航到主菜单并找到UDPCast Disk Cloning 。 它的对话框不言自明(见截图) UDPCast磁盘克隆启动屏幕

选择此虚拟机作为sender ,应选择要广播的驱动器(使用Unix表示法,如/ dev / sda)。

启动sender ,您还需要启动receiver 。 因为你有一个物理硬盘,我假设,你也有一个完整的PC与这个硬盘附加到它。 同样的事情:你需要启动带有UDPCast Disk Cloning liveCD, UDPCast Disk Cloning选择receiver以及适当的物理硬盘。

值得注意的是,您应该做出所有必要的安排,以便在虚拟机和物理硬件之间建立网络连接。 如果您的vmdk包含私有数据,则应采取必要的预防措施,因为其内容将通过您的网络有效地进行流式传输。 另一件事是你的目标硬盘应该没有比你的vmdk容量更少的存储容量。 很明显,但值得注意的是,您的图像在目标硬盘上一对一布局,您需要使用gparted等执行合适的操作,以利用新硬盘的更大容量。

如果您安装了VirtualBox,则可以使用VBoxManage命令将VDI(VirtualBox驱动器映像)文件转换为IMG格式 ,然后复制到物理磁盘,例如

 VBoxManage clonehd --format RAW file.vdi file.img 

然后,您可以使用dd命令将文件复制到物理分区:

 dd if=./file.img of=/dev/ 

注意:如果需要,请使用sudo。 在/ dev中指定正确的设备时要小心。

如果您将新的物理磁盘连接到计算机上,则虚拟机虚拟磁盘已打开,您可以将VDI转换为物理磁盘而无需中间转换,这可能会节省大量时间和磁盘空间。 这假设您的物理磁盘与虚拟磁盘的最大大小相同或更大。 在我的例子中,目标是将VDI转换为ZFS zvol,但该方法应该与任何块设备相同。

首先创建一个指向您的块设备的VMDK文件:

 VBoxManage internalcommands createrawvmdk -filename physical.vmdk -rawdisk /dev/sdX 

然后(关闭VM!),您可以将VDI克隆到VMDK:

 VBoxManage clonemedium --existing virtual.vdi physical.vmdk 

这需要一段时间……完成后,您可以删除VMDK文件,因为它仅用作VirtualBox查找物理设备的指针。

就我而言,新的zvol与虚拟磁盘的大小完全相同。 鉴于您的物理磁盘可能不同,您需要使用某种分区大小调整机制来填充整个磁盘。 或许或是某种东西。 您应该能够在仍然连接到VM计算机的物理/ dev / sdX设备上指出它,这样您就不必使用启动CD作为物理主机。

resize完成后,在物理机中弹出驱动器,交叉手指,然后打开电源。

如果您希望继续使用VirtualBox物理驱动器,请保留VMDK,并使用VBoxManage storageattach将其连接到VM。