KVM下有获取ZoneID的API吗?

发布于 2024-10-12 03:45:33 字数 191 浏览 4 评论 0 原文

在 Solaris 下使用分区时,主机 ID 不会因区域而改变,但您还可以(通过函数调用 getzoneid())获得区域的唯一区域 ID。

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

KVM 提供的 API 可以让我获取 zoneid 吗?

When using Zoning under Solaris, the hostid doesn't change by zone, but you also obtain (via a function call, getzoneid()) a unique zoneid for your zone.

Using KVM under Linux, the hostid changes (increments) by zone - which is pretty good, but it's not perfect - you might collide with someone elses hostid.

It there an API provided by KVM which enables me to get a zoneid?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

潦草背影 2024-10-19 03:45:33

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

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

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

  1. Determine if a fixed file (/etc/hostid on my system) exists; if so, uses the 4-byte value in there;
  2. Failing that, attempts to create a hostid based on the system's IP address;
  3. Failing that, uses a hostid of 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's gethostid 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文