能否将Ubuntu虚拟机安装迁移到物理机上?如果可能,这个过程有多难以完成,需要采取哪些步骤来准备迁移?
我想在虚拟机上进行一些测试,如果成功了,希望将该系统迁移到物理硬件上,而不是重新安装所有东西。这种操作可行吗?
打开终端并输入以下命令:
cd /media/wherever-the-image-is/
# 对于VMWare
sudo apt-get install qemu-kvm
qemu-img convert your-vmware-disk.vmdk -O raw disk.img
# 对于VirtualBox
VBoxManage clonehd your-virtualbox-disk.vdi disk.img --format RAW
将 /media/wherever-the-image-is/disk.img
移动到不打算写入的地方。如果你计划将其写入当前所在的磁盘,你需要将它放在一个单独的内部磁盘上,或者最坏情况下是一个外部磁盘。
以下说明假设你已将其移动到 /media/dave/disk.img
(dave
是一个外部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 必须与您的虚拟安装版本相同。进入 Live CD,再次点击安装。
按照安装程序进行操作,根据需要重新分区。大约10分钟后,安装完成并要求您重新启动。不要重新启动。即使您不小心重新启动了,确保下一步指令在 LiveCD 中执行。
挂载新安装的分区和您之前存储的外部磁盘上的disk.img
(在资源管理器中双击它们)。
在终端中挂载您的 disk.img 镜像:
sudo mkdir /media/oldinstall
sudo mount -o loop /media/dave/disk.img /media/oldinstall
-注意- 在创建所需的 .img 文件之后,有时当您尝试将其作为循环设备挂载时,可能会遇到以下错误
"NTFS signature is missing. Failed to mount '/dev/loop0': Invalid argument The device '/dev/loop0' doesn't seem to have a valid NTFS."
.img 文件有时在实际分区之前包含主引导记录和分区表,您可能希望挂载该分区。因此,您需要找出所需分区的偏移量。可以使用 parted 工具来完成此操作。有关示例,请参阅此链接中 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 并修复问题 来解决。
VBoxManage internalcommands converttoraw your-virtualbox-disk.vdi /dev/sdX
命令仍然有效。只需要在运行第一个命令之前切换到Program Files\Oracle\VirtualBox
目录即可。 - Aust/dev/sdX
不是有效的目标。据我所知,它应该是\\Device\Harddisk0
或类似的东西。 - DanatelaVBoxManage internalcommands converttoraw your-virtualbox-disk.vdi /dev/sdX
这个命令行不起作用。在Linux中会出现错误:VBoxManage: error: Cannot create destination file "/dev/sdX": VERR_ALREADY_EXISTS
。需要先使用 VBoxManage
命令将其发送到一个镜像,然后再使用DD将镜像写入物理磁盘。 - L. D. Jamessender
之后,您还需要启动receiver
。由于您有一个物理硬盘,我假设您也有一台连接了该硬盘的完整计算机。同样,在这里,您需要启动带有UDPCast Disk Cloning
的liveCD,并选择receiver
以及适当的物理硬盘。VBoxManage clonehd --format RAW file.vdi file.img
dd
命令将文件复制到物理分区中:dd if=./file.img of=/dev/<partition_here>
VBoxManage internalcommands createrawvmdk -filename physical.vmdk -rawdisk /dev/sdX
VBoxManage clonemedium --existing virtual.vdi physical.vmdk
这会花一些时间... 完成后,您可以删除VMDK文件,因为它只是用作VirtualBox查找物理设备的指针。
在我的情况下,新的zvol与虚拟磁盘的大小完全相同。考虑到您的物理磁盘可能不同,您需要使用某种分区调整机制来填充整个磁盘。也许可以使用Gparted或其他工具。您应该能够将其指向物理/dev/sdX设备,同时仍连接到虚拟机,这样您就不必依赖引导CD启动物理主机。
调整大小完成后,将驱动器插入物理机器中,祈祷一下,然后开机。
如果您想继续使用VirtualBox与物理驱动器,请保留VMDK文件,并使用VBoxManage storageattach
将其连接到虚拟机。