从虚拟机(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
。 它的对话框不言自明(见截图)
选择此虚拟机作为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。