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

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

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

将虚拟机中安装的 Ubuntu 迁移到物理机上是否可行?如果可能,完成这项工作有多困难?我需要采取哪些步骤来准备迁移。

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

答案1

是的,有可能。甚至不是很难,它只需要一些时间、一个 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 并单击“试用 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,chrooting 并修复问题

答案2

或许这并不完全是您所要求的,但它或许能够完成您想要做的事情。

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

你可以使用一个非常好用的备份程序,叫做重复

来自 Ubuntu 软件中心的信息:

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

特征:

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

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

  • 增量备份,让你可以从任何特定备份中恢复

  • 安排定期备份

  • 完美融入你的 GNOME 桌面

在此处输入图片描述

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

祝你好运!

答案3

尝试UDP广播

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

程序概述如下。

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

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

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

启动后sender,您还需要启动receiver。由于您有一个物理硬盘,我假设您还有一台完整的 PC,该 PC 上连接着这个硬盘。这里也是一样:您需要启动 liveCD,UDPCast Disk Cloning选择receiver此时间以及适当的物理硬盘。

值得注意的是,您应该做好所有必要的安排,以确保虚拟机和物理硬件之间建立网络连接。如果您的 vmdk 包含私有数据,则应采取必要的预防措施,因为其内容将有效地通过网络传输。另一件事是,您的目标硬盘的存储容量不应小于您的 vmdk 的容量。很明显,但也值得注意的是,您的映像在目标硬盘上是一对一布局的,您需要使用 gparted 或类似程序执行适当的操作,以利用新硬盘的更大容量。

答案4

如果您将新的物理磁盘连接到虚拟机虚拟磁盘所在的机器,则可以将 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 之类的。您应该能够在仍连接到 VM 计算机时将其指向物理 /dev/sdX 设备,这样您就不必求助于物理主机的启动 CD。

调整大小完成后,将驱动器弹出到您的物理机器中,祈祷好运,然后启动电源。

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

相关内容