C KVM下是否有获取ZoneID的API?

C KVM下是否有获取ZoneID的API?,c,linux,virtualization,kvm,C,Linux,Virtualization,Kvm,在Solaris下使用分区时,hostid不会按区域更改,但您还可以(通过函数调用getzoneid())为您的区域获取唯一的zoneid 在Linux下使用KVM,hostid会按区域更改(递增)-这很好,但并不完美-您可能会与其他人的hostid发生冲突 是否有KVM提供的API使我能够获得一个zoneid?关于您对重复主机ID的担忧: 与Solaris不同,Linux内核不提供“gethostid”调用。相反,“gethostid”(由/usr/bin/hostid程序使用)是,它试图:

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

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


是否有KVM提供的API使我能够获得一个zoneid?

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

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

  • 确定我的系统上是否存在固定文件(
    /etc/hostid
    );如果是,则使用其中的4字节值
  • 如果失败,尝试根据系统的IP地址创建hostid
  • 否则,将使用主机ID
    0
  • 这意味着,如果每个系统都有一个唯一的IP地址,那么它们也将有一个唯一的hostid

    如果您的系统没有唯一的IP地址,您仍然可以通过使用
    sethostid
    glibc库调用(写入glibc的
    gethostid
    算法的步骤(1)读取的文件)覆盖hostid

    关于获取KVM实例的zoneid:

    与Solaris区域(所有实例共享同一内核)不同,KVM的每个实例都运行其自己的Linux内核副本,所有这些都不被其他运行的实例所注意。据我所知,Solaris zoneid没有直接的等价物,因为每个Linux实例都无法与其他Linux实例协作

    如果您需要每个正在运行的KVM实例的唯一标识符,则有些选项包括:

    • 如上所述,只需设置IP地址/主机ID

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

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