我可以赋予虚拟机一个可从虚拟机内部访问的唯一 ID 吗?

我可以赋予虚拟机一个可从虚拟机内部访问的唯一 ID 吗?

我希望能够从虚拟机内部唯一地标识我的虚拟机。问题是在我的设置中我无法使用 MAC 地址来实现这一点。是否可以配置另一个硬件参数(例如 CPU 名称、BIOS 标志、主板 ID 等)以使我的 VM 具有唯一值,然后我可以从 VM 内部访问该值?我最感兴趣的是适用于 Xen、KVM 或 VMWare ESX 的解决方案,或者最好适用于所有这些解决方案。

答案1

您可以在创建虚拟机时从主机生成 UUID,并通过内核命令行将其传递。当您将机器从一个硬件节点转移到下一个硬件节点时,UUID 会随之移动。但是,当您创建新机器时,会为其生成一个新的 UUID。

正如另一个答案中提到的,如果您复制 VM(包括其配置),这将不起作用,但在这种情况下,从命令行运行 uuidgen 并替换配置文件中的 UUID 并不难,用于创建域。

从实践上讲,最好不要以这种方式复制虚拟机;您应该创建一个新的虚拟机并运行一个脚本,以最适合您环境的方式配置该虚拟机。

答案2

让虚拟机生成并存储 UUID/GUID:

http://www.ietf.org/rfc/rfc4122.txt

   This specification defines a Uniform Resource Name namespace for
   UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally
   Unique IDentifier).  A UUID is 128 bits long, and can guarantee
   uniqueness across space and time.  UUIDs were originally used in the
   Apollo Network Computing System and later in the Open Software
   Foundation's (OSF) Distributed Computing Environment (DCE), and then
   in Microsoft Windows platforms.

Microsoft 提供了一个名为uuidgen

Python 从 2.5 开始就内置了它:

http://docs.python.org/library/uuid.html

这样就涵盖了 Windows 和 Linux。

答案3

解决方案将使用 DMI/SMBIOS 表向客户传达信息。

我喜欢chassis_asset_tag这个目的。qemu有一个-smbios命令行选项。我写了一个更详细解答回答一个非常相似的问题。

以下是可用字符串列表,以及它们的 DMI 类别和变量名称。

相关内容