我通过备份更新到了 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) 硬盘上的第一个主分区。如果您的根分区位于其他地方,则必须弄清楚这一点。如果您不知道这到底是什么,请尝试等2
,3
直到它起作用。
系统启动后,运行
# 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