![我可以赋予虚拟机一个可从虚拟机内部访问的唯一 ID 吗?](https://linux22.com/image/555427/%E6%88%91%E5%8F%AF%E4%BB%A5%E8%B5%8B%E4%BA%88%E8%99%9A%E6%8B%9F%E6%9C%BA%E4%B8%80%E4%B8%AA%E5%8F%AF%E4%BB%8E%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%86%85%E9%83%A8%E8%AE%BF%E9%97%AE%E7%9A%84%E5%94%AF%E4%B8%80%20ID%20%E5%90%97%EF%BC%9F.png)
我希望能够从虚拟机内部唯一地标识我的虚拟机。问题是在我的设置中我无法使用 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。