KVM下有获取ZoneID的API吗?
在 Solaris 下使用分区时,主机 ID 不会因区域而改变,但您还可以(通过函数调用 getzoneid())获得区域的唯一区域 ID。
在 Linux 下使用 KVM,主机 ID 按区域更改(递增) - 这非常好,但并不完美 - 您可能会与其他人的主机 ID 发生冲突。
KVM 提供的 API 可以让我获取 zoneid 吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
关于您对重复主机 ID 的担忧:
与 Solaris 不同,Linux 内核不提供“gethostid”调用。相反,“gethostid”(由
/usr/bin/hostid
程序使用)是 由 glibc 实现,它尝试:/我的系统上的 etc/hostid
)存在;如果是,则使用其中的 4 字节值;0
的主机 ID。这意味着如果每个系统都有唯一的 IP 地址,那么它们也将有唯一的主机 ID。
如果您的系统没有唯一的 IP 地址,您仍然可以使用
sethostid
glibc 库调用(写入由 glibc 的gethostid
步骤 (1) 读取的文件)来覆盖主机 ID代码>上面的算法)。关于获取 KVM 实例的 zoneid:
与 Solaris 区域(所有实例共享相同的内核)不同,KVM 的每个实例都运行自己的 Linux 内核副本,所有这些副本都不受其他实例的影响跑步。据我所知,没有与 Solaris zoneid 直接等效的东西,因为每个 Linux 实例无法与其他 Linux 实例协作。
如果您需要为每个正在运行的 KVM 实例提供唯一标识符,可以选择以下选项:
仅设置 IP 地址/主机 ID,如上所述;
仅设置 IP 地址/主机 ID,如上所述;
设置/启动实例时,使用
UUID >uuidgen
并将其保存在文件系统上的安全位置。此类生成的 UUID 永远不会以非常高的概率与任何其他 UUID 匹配;启动系统的每个实例时,在内核命令行中传入该实例的手动构建的唯一标识符(使用
-append
KVM 命令行参数)。稍后可以从/proc/cmdline
获取此信息。Regarding your concerns about duplicate hostids:
Unlike Solaris, the Linux kernel does not provide the "gethostid" call. Instead, "gethostid" (used by the
/usr/bin/hostid
program) is implemented by glibc, which tries to:/etc/hostid
on my system) exists; if so, uses the 4-byte value in there;0
.This means that if every system has a unique IP address they will also have a unique hostid.
If your systems do not have unique IP addresses, you can still override the hostid by using the
sethostid
glibc library call (which writes to the file read by step (1) of glibc'sgethostid
algorithm above).Regarding fetching the zoneid of a KVM instance:
Unlike Solaris zones (where all instances share the same kernel), each instance of KVM runs its own copy of the Linux kernel, all of which are oblivious to other instances running. As far as I am aware, there is no direct equivalent of a Solaris zoneid, as each Linux instance has no way of collaborating with other Linux instances.
If you need a unique identifier for each running KVM instance, some options are:
Just settling for the IP Address / hostid, as described above;
When setting up / booting up your instances, generate a UUID for the system using
uuidgen
and save it in a safe location on the filesystem. Such generated UUIDs will never match any other UUID with very high probability;When booting each instance of your system, pass in on the kernel command line a manually-constructed unique identifier for the instance (using the
-append
KVM command line argument). This can be fetched later from/proc/cmdline
.