在KVM下是否有API获得ZoneID?
-
12-10-2019 - |
题
在Solaris下使用分区时,HostID不会按区域变化,但是您还可以(通过函数调用,getZoneID())为您的区域提供唯一的区域。
使用Linux下的KVM,hostid逐个区域更改(增量) - 这非常好,但是它并不完美 - 您可能会与Elses HostID相撞。
它在那里提供了KVM提供的API,使我能够获得ZoneID?
解决方案
关于您对重复hostids的担忧:
与Solaris不同,Linux内核不提供“ Gethostid”呼叫。相反,“ gethostid”(由 /usr/bin/hostid
程序) 由Glibc实施, ,试图:
- 确定是否固定文件(
/etc/hostid
在我的系统上)存在;如果是这样,则使用其中的4字节值; - 失败,尝试根据系统的IP地址创建hostID;
- 失败,使用一个hostid
0
.
这意味着,如果每个系统都有唯一的IP地址,则它们也将具有唯一的hostID。
如果您的系统没有唯一的IP地址,您仍然可以使用 sethostid
GLIBC库呼叫(将其写入glibc的步骤(1)的文件写入文件 gethostid
上面的算法)。
关于获取KVM实例的区域ID:
与Solaris区域(所有实例共享相同的内核)不同,KVM的每个实例都运行其自己的Linux内核副本,所有这些副本均不足以忽略其他实例。据我所知,没有直接等效的Solaris Zoneid,因为每个Linux实例都无法与其他Linux实例进行协作。
如果您需要为每个运行的KVM实例一个唯一的标识符,则某些选项是:
如上所述,仅解决IP地址 / HOSTID;
设置 /启动您的实例时,生成一个 UUID 用于系统使用
uuidgen
并将其保存在文件系统上的安全位置。这样生成的UUID永远不会以很高的概率匹配任何其他UUID。启动系统的每个实例时,请在内核命令行上传递该实例的手动构造的唯一标识符(使用
-append
KVM命令行参数)。这可以稍后从/proc/cmdline
.