KVM下是否有API来获取ZoneID?

5 c linux virtualization kvm

在Solaris下使用分区时,hostid不会按区域更改,但您还可以(通过函数调用,getzoneid())获取区域的唯一zoneid.

在Linux下使用KVM,hostid按区域更改(递增) - 这是非常好的,但它并不完美 - 您可能会与其他人一起发生冲突.

它有一个由KVM提供的API,使我能够获得一个zoneid?

dav*_*idg 3

关于您对重复主机 ID 的担忧:

与 Solaris 不同,Linux 内核不提供“gethostid”调用。相反,“gethostid”(由/usr/bin/hostid程序使用)由 glibc 实现,它试图:

  1. 确定是否是固定文件(/etc/hostid在我的系统上)是否存在;如果是,则使用其中的 4 字节值;
  2. 如果失败,则尝试根据系统的 IP 地址创建主机 ID;
  3. 如果失败,则使用 的 hostid 0

这意味着如果每个系统都有唯一的 IP 地址,那么它们也将有唯一的主机 ID。

如果您的系统没有唯一的 IP 地址,您仍然可以使用sethostidglibc 库调用(写入gethostid上述 glibc 算法的步骤 (1) 读取的文件)来覆盖主机 ID。

关于获取 KVM 实例的 zoneid:

与 Solaris 区域(所有实例共享相同内核)不同,KVM 的每个实例都运行自己的 Linux 内核副本,所有这些副本都不会影响其他正在运行的实例。据我所知,没有与 Solaris zoneid 直接等效的东西,因为每个 Linux 实例无法与其他 Linux 实例协作。

如果您需要为每个正在运行的 KVM 实例提供唯一标识符,可以选择以下一些选项:

  • 只需确定 IP 地址/主机 ID,如上所述;

  • 设置/启动实例时,为系统使用生成一个UUIDuuidgen,并将其保存在文件系统上的安全位置。这样生成的 UUID 永远不会以非常高的概率与任何其他 UUID 匹配;

  • 引导系统的每个实例时,在内核命令行中传递该实例手动构建的唯一标识符(使用-appendKVM 命令行参数)。这可以稍后从 获取/proc/cmdline