如何将 VirtualBox 虚拟机复制/移动到另一台计算机?

如何将 VirtualBox 虚拟机复制/移动到另一台计算机?

我通过备份更新到了 Windows 10一切从旧的旧 Windows,然后以干净的格式安装;一切都是新鲜的。

我在 Virtual Box 中有一个 Debian 8.1,它也被完整保存了;不仅仅是磁盘映像。

我安装了 VirtualBox 并重新启动该机器,令人惊讶的是,Debian 抱怨无法找到根分区(不存在具有该 UUID 的分区),陷入一个小的 shell 并拒绝启动。

我怀疑中的条目fstab不再正确,因此我启动了一个实时发行版并检查了它...blkid报告了与中的相同的 UUIDfstab

所以,有什么问题?!?

在 VMware 中我不是如果我复制/移动机器、重新安装 VMware 等,就会出现这个问题,它会询问是否被复制或移动,而且从来没有出现过这样的问题。

PS:请不要将此问题标记为重复,我确实读过“将 VirtualBox VM 移动到另一台计算机的推荐方法是什么?”并尝试过本题中的选项 2我复制了所有文件,并将它们放在正确的位置。再次启动虚拟机中的实时 Linux,我看到了具有正确 UUID 的硬盘。

答案1

好吧,我建议你最好.ova在清除主机系统之前将虚拟机导出(到容器),然后再导入 - VirtualBox 可以从其 GUI 中执行此操作。

但是好的,回到你的问题...我记得 VirtualBox 为你的虚拟机使用的所有媒体提供了单独的“注册表”。如果我没记错的话,它存储在当前用户配置文件下的某个 XML 文件中。

因此,我将从 VBox GUI 打开媒体管理窗口开始,并确保 Debian 的磁盘确实存在并且为 VBox 媒体管理器所知。

之后要检查的下一件事是转到虚拟机的属性并确保代表虚拟机硬盘的媒体可用且具有“OK”状态。

如果此后启动 VM 失败,请执行以下操作:在早期启动(BIOS 后)期间显示 GRUB(Debian 的引导加载程序)窗口时,按e(或它建议的任何内容 - 我从来都不记得)编辑系统的引导条目 - 您将看到引导加载程序传递给内核的命令行,它包含名为“root”(表示根文件系统)的参数。如今,root 的参数包含一些 UUID 编码的设备名称,因此整个过程看起来像

/boot/vmlinuz-3.2.0-4-amd64 root=UUID=2cb5a97c-75ab-4c8b-afd9-19297e3553bd ro single

您应该将该UUID=blah...部分替换为/dev/sda1使其读起来类似

/boot/vmlinuz-3.2.0-4-amd64 root=/dev/sda1 ro single

并且它很可能能够正常启动。

(请注意,内核文件的路径/boot/vmlinuz-3.2.0-4-amd64来自我的系统;在您的系统中它可能有所不同 - 不要弄乱它,您只需触碰参数root=)。

请注意,这/dev/sda1意味着第一个 (SATA/SCSI) 硬盘上的第一个主分区。如果您的根分区位于其他地方,则必须弄清楚这一点。如果您不知道这到底是什么,请尝试等23直到它起作用。

系统启动后,运行

# dpkg-reconfigure grub-pc

重新配置 GRUB 以便它使用根文件系统的正确设备名称。

如果设备的 UUID 确实发生了变化,你可能还需要修复该/etc/fstab文件。为此,请运行

# blkid /dev/sda1

blkid并用值报告的值替换相应 fstab 条目中的 UUID 值UUID

其中的数字/dev/sdN显然应该与root=内核的参数相匹配。

答案2

如果您在移动虚拟机并尝试启动它后收到如下消息:

打开硬盘失败。

无法注册硬盘,因为具有 UUID 的硬盘已经存在。

然后进入虚拟机的目录;当然,更改实际路径以匹配您要进入的实际路径:

cd /full/path/to/virtualbox/virtualmachine/Sandbox

并运行此命令为磁盘分配新的 UUID:

VBoxManage internalcommands sethduuid Sandbox.vdi

相关内容