如何更改虚拟磁盘的UUID?

145

我正在尝试使用Oracle VirtualBox创建一个新的虚拟机,并使用已经存在的硬盘。当我尝试选择已经存在的硬盘文件,一个.vhd文件,它显示了一个错误,说虚拟硬盘不能被使用,因为UUID已经存在。

所以我尝试了以下命令来改变它的UUID。

VBoxManage internalcommands sethduuid /home/user/VirtualBox VMs/drupal/drupal.vhd

我收到这个错误。

语法错误:无效的UUID参数

我应该如何解决?


1
路径中含有空格的应该用双引号括起来,就像你已经发现的那样。 - A.B.
9个回答

193
正确的命令是以下这个。
VBoxManage internalcommands sethduuid "/home/user/VirtualBox VMs/drupal/drupal.vhd"

虚拟磁盘的路径包含空格,因此必须用双引号括起来,以避免将其解析为两个参数。

29
我希望VirtualBox能有一个界面或窗口,让我们可以更改这个设置。 - fedmich
4
由于文件路径中有空格,因此需要将其引用。 - Chris Stryczynski
如果VirtualBox UI在尝试打开已知磁盘时提供生成新UUID的选项,那将是很好的。老实说,我并不真正使用磁盘管理器做任何事情,我宁愿VirtualBox将虚拟磁盘视为文件路径,而不是尝试将它们视为需要管理和跟踪的资源。 - jrh
运行命令后出现以下错误:媒体'D:\path\to\vdi'的UUID {abc}与媒体注册表('C:\Users\Test.VirtualBox\VirtualBox.xml')中存储的值{123}不匹配。 - SZT

45
以下对我有效:
  1. 运行VBoxManage internalcommands sethduuid "VDI/VMDK 文件"两次(第一次只是为了方便生成 UUID,您可以使用任何其他 UUID 生成方法)

  2. 在文本编辑器中打开.vbox 文件

  3. 将在Machine uuid="{...}"中找到的 UUID 替换为第一次运行 sethduuid 时获得的 UUID

  4. 将在HardDisk uuid="{...}"Image uuid="{}"(朝向结尾)中找到的 UUID 替换为第二次运行 sethduuid 时获得的 UUID


1
我认为这个答案对于任何想要复制虚拟机的人(包括我自己)都更有帮助。 - cbuchart
1
只是好奇 - 你为什么需要更改机器 UUID?如果我只想将 vmdk 磁盘从一台机器复制到另一台机器,我不需要那个,对吧? - Oleg Gryb
1
如果您在同一台机器上复制虚拟磁盘,则需要更改机器 UUID。 - borchvm
1
在我的情况下完美地工作了 - 谢谢!我不需要调整机器UUID。 - Benco
2
@FabrizioBertoglio 希望你已经得到了答案 - 但是你需要停止任何类型的vbox服务才能编辑这些文件 - 否则你会得到同样的结果。同时,请确保配置文件底部“附加设备”下的SATA硬盘的UUID与配置文件顶部“硬盘驱动器”部分中硬盘的UUID相匹配。在进行任何操作之前,您还需要添加一个<Hardware UUID = myMachineUUID>。 - Ken
显示剩余2条评论

15

如果您已将一个磁盘(vmdk文件)从一台机器复制到另一台机器,并需要更改副本中磁盘的UUID,则无需像另一个答案建议的那样更改机器的UUID。

您只需要为磁盘映像分配新的UUID:

VBoxManage internalcommands sethduuid your-box-disk2.vmdk
UUID changed to: 5d34479f-5597-4b78-a1fa-94e200d16bbb

然后在 *.vbox 文件中的两个位置用新生成的 UUID 替换旧的 UUID

<MediaRegistry>
  <HardDisks>
    <HardDisk uuid="{5d34479f-5597-4b78-a1fa-94e200d16bbb}" location="box-disk2.vmdk" format="VMDK" type="Normal"/>
  </HardDisks>

在……中,并且

    <AttachedDevice type="HardDisk" hotpluggable="false" port="0" device="0">
      <Image uuid="{5d34479f-5597-4b78-a1fa-94e200d16bbb}"/>
    </AttachedDevice>

在我的Mac OS X El Capitan上,对于VirtualBox ver. 5.1.8来说,这对我起作用了。


你可能是对的。我按照你的指示操作,但仍然出现了“查询UUID失败”的错误,即使硬盘在“文件->虚拟媒体管理器”和“机器设置”中正确显示UUID。 - Fabrizio Bertoglio
我不确定你的情况是什么。我上面描述的正是我在Mac上使用VB 5.1.8所做的,而且它对我起作用了。 - Oleg Gryb
我已经通过以下步骤解决了这个问题:1. 使用Synaptic软件包管理器重新安装虚拟机,然后2. 在虚拟机的配置中,我没有禁用软盘和EFI设置。我保持它们启用。问题已经解决。 - Fabrizio Bertoglio
@OlegGryb 这可能取决于主机操作系统和客户操作系统。 - Ken

12

我在网上搜索了关于MAC OS的答案,所以...解决方法是

cd /Applications/VirtualBox.app/Contents/Resources/VirtualBoxVM.app/Contents/MacOS/

VBoxManage internalcommands sethduuid "full/path/to/vdi"

11
尽管您已经解决了问题,但我在此分享原因,以帮助遇到类似问题的其他人。
问题的原因是您的路径中存在空格(目录名为VirtualBox VMs),这会导致命令无法正确执行。因此会出现错误。

6
该命令失败是因为其中一个文件夹名称中有空格,即“VirtualBox VMs”。
VBoxManage internalcommands sethduuid /home/user/VirtualBox VMs/drupal/drupal.vhd

如果文件夹名或文件名中没有空格,那么即使不加引号,该命令也将有效,例如将“VirtualBox VMs”更改为“VBoxVMs”。
VBoxManage internalcommands sethduuid /home/user/VBoxVMs/drupal/drupal.vhd

5

对于Windows x64,与 @Al3x 相同的解决方案,在 cmd.exe 中:

cd %programfiles%\Oracle\VirtualBox

VBoxManage internalcommands sethduuid "full/path/to/.vdi"

这将随机化磁盘的UUID。专业提示:在按住Shift键的同时右键单击.vdi文件并选择“复制路径”以获取"full/path/to/.vdi",并在cmd.exe中启用快速编辑,然后右键单击以粘贴。


4

虽然这个问题已经很旧了,但请注意,在Windows系统中更改虚拟硬盘上的UUID会使Windows将其视为未激活的机器(因为它会注意到磁盘更改),并要求重新激活!


2

你原本的解决方案的另一种替代方法是在空格前使用转义字符\

VBoxManage internalcommands sethduuid /home/user/VirtualBox\ VMs/drupal/drupal.vhd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接