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


124

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

是否可以将安装Ubuntu的虚拟机迁移到物理机上?如果可能的话,这将很难实现,我需要采取哪些步骤来为迁移做准备。

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


Answers:


98

是的,有可能。甚至没有那么难,它只需要一些时间,就需要一个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 clonehd your-virtualbox-disk.vdi disk.img --format RAW
    
  • 移动/media/wherever-the-image-is/disk.img到您不想写的地方。如果打算将其写入当前所在的磁盘,则需要将其粘贴在单独的内部磁盘上,或者最糟糕的外部磁盘上。

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

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

将映像写入自己的磁盘

您将想要做这样的事情。假设您要覆盖整个磁盘。如果要在Windows旁安装,请不要遵循这些说明!跳到子弹之后。

  • 启动进入Ubuntu Live CD,然后单击Try Ubuntu。

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

  • 然后我们开始工作:

    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(只需在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,chroot和修复问题来解决它。


7
您是否知道可以自动执行此操作的工具?
the_drow 2013年

1
对于Windows / VirtualBox上的设置,该VBoxManage internalcommands converttoraw your-virtualbox-disk.vdi /dev/sdX命令仍然有效。所有需要做的就是Program Files\Oracle\VirtualBox在运行第一个命令之前先进行cd操作。
2014年

2
@Aust我怀疑这/dev/sdX在Windows 中是否是有效的目标。相信会是\\Device\Harddisk0这样的。
Danatela

3
VBoxManage internalcommands converttoraw your-virtualbox-disk.vdi /dev/sdX不起作用。在Linux中,它给出错误:VBoxManage: error: Cannot create destination file "/dev/sdX": VERR_ALREADY_EXISTS。必须先使用 VBoxManage命令将其发送到图像。然后使用DD将映像放入物理磁盘。
LD詹姆斯

8

也许这并不是您所要的,但它可以完成您想要的。

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

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

来自ubuntu软件中心的信息:

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

特征:

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

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

  • 增量备份,可让您从任何特定备份中还原

  • 安排定期备份

  • 很好地集成到您的GNOME桌面中

在此处输入图片说明

您将在不到两个小时的时间内完成!

祝好运!


1
听起来很简单。S / O可以确认它确实可以那样工作吗?
Mateng 2013年

除其他外.... UID(用户编号)在那个时候可能有所不同。
Tomachi

5

尝试UDPCast

想法是将整个vmdk从其虚拟机流式传输到物理机,然后将其写入物理硬盘。

程序概述如下。

由于您有一个vmdk文件,因此您可能会拥有一个VMWare工作站,甚至可以连接此vmdk的完整虚拟机。在连接了此特定vmdk的情况下运行虚拟机,但请使用PartedMagic liveCD进行引导,而不是普通引导。

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

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

启动之后sender,您还需要重新启动receiver。假设您有一个物理硬盘,那么您也将拥有一台完整的PC,并且该硬盘已连接到该PC。同样的事情:您需要UDPCast Disk Cloning选择receiver该时间以及适当的物理硬盘来启动liveCD 。

值得注意的是,您应该进行所有必要的安排,以在虚拟机和物理硬件之间建立网络连接。如果vmdk包含私有数据,则应采取必要的预防措施,因为其内容将通过网络有效地流式传输。另一件事是,目标硬盘的存储容量应不低于vmdk的容量。显而易见,但也值得注意的是,您的映像是一对一地放置在目标硬盘上的,并且您需要使用gparted等执行适当的操作,以利用更大容量的新硬盘。


我想指出的是,这种方法非常简单,而且相对容易执行。即,您唯一需要做的准备步骤就是准备带有UDPCast或其他任何LiveCD的LiveCD,这足以下载并运行UD​​PCast。如果您有一些虚拟高清图像,则肯定是在已经设置好并准备好了的虚拟机中使用它,另一方面,您已经准备好物理系统,并且也可以完成该任务。
PF4Public

还有更多:UDPCast可以直接从PXE运行。udpcast.linux.lu/bootloader.html#pxe
PF4Public

4

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

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

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

dd if=./file.img of=/dev/<partition_here>

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


0

如果将新的物理磁盘连接到VM虚拟磁盘所在的计算机,则可以将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与虚拟磁盘大小完全相同。鉴于您的物理磁盘可能有所不同,您需要采用某种分区大小调整机制来填充整个磁盘。Gparted之类的东西。您应该可以将其指向物理/ dev / sdX设备,同时仍将其连接到VM计算机,因此您不必诉诸于引导CD的物理主机。

调整大小后,将驱动器弹出物理计算机,用手指交叉,然后打开电源。

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


看起来可以正常工作,但是数据以某种方式损坏了,并且操作系统无法正常启动。
Sarge Borsch
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.