3

我有一个在 Linux 中运行的应用程序。每个人都将尝试从操作系统获取 UUID 并向集中式服务器报告。我想确保所有实例都使用全局唯一的 UUID 运行。

如果 linux 在裸机上,它可以只读取 UUID(例如,从 dmidecode 命令)。但如果它在 VM 上,则 UUID(来自 dmidecode)可能是相等的,因为可以复制或移动 VM。

有任何想法吗?

顺便说一句,对于在物理硬件(而不是 VM)上运行的 Linux,如果用户更改内存、NIC 等,UUID 会改变吗?

提前致谢。

4

3 回答 3

2

如果您的 UUID 不需要绑定到特定的操作系统安装,只需使用uuid_generate和朋友为您的特定应用程序生成一个。从您到目前为止所写的内容来看,这听起来可能是您的用例的一个很好的解决方案。

于 2012-01-04T04:41:33.677 回答
2

如果 linux 在裸机上,它可以只读取 UUID(例如,从 dmidecode 命令)。但如果它在 VM 上,则 UUID(来自 dmidecode)可能是相等的,因为可以复制或移动 VM。

VMware 产品实际上并非如此。BIOS UUID(dmidecode 返回的那个)用作 ESX 主机和 vCenter 的清单 UUID 属性,并且在同一系统上不允许重复 UUID。这意味着每个 vCenter 或每个主机(如果没有 vCenter)只能有一台机器具有该 UUID。我过去曾成功使用此 UUID 作为标识符。

要多次运行您的程序,他们必须将其安装在单独主机上的 VM 中,或者安装在完全不同的 vCenter 中。仅仅运行一个以上的程序就需要大量的资源,而且我认为这远远超出了许可证执行的收益递减。

Workstation 使用与 ESX/vCenter 相同的数据布局,因此我希望它具有相同的限制。

于 2012-01-09T18:54:33.807 回答
2

Linux

root@vmtest:~#dmidecode | grep -i uuid | awk '{print $2}' | tr '[:upper:]' '[:lower:]'

564d7abb-2403-eb3b-2fde-81cd440fc49b

在埃西

cat vmtest.vmx
...
uuid.bios = "56 4d 7a bb 24 03 eb 3b-2f de 81 cd 44 0f c4 9b"
...

SNMP Esxi

iso.3.6.1.4.1.6876.2.1.1.10.<vmID> = = STRING: "564d7abb-2403-eb3b-2fde-81cd440fc49b"
于 2015-11-13T11:47:44.600 回答