5

Solaris でゾーニングを使用する場合、ホスト ID はゾーンごとに変更されませんが、(関数呼び出し getzoneid() を介して) ゾーンの一意のゾーン ID も取得します。

Linux で KVM を使用すると、ホスト ID がゾーンごとに変化 (増分) します。これは非常に優れていますが、完全ではありません。他の誰かのホスト ID と衝突する可能性があります。

KVM が提供する、ゾーン ID を取得できる API はありますか?

4

1 に答える 1

3

重複したホスト ID に関する懸念について:

Solaris とは異なり、Linux カーネルは「gethostid」呼び出しを提供しません。代わりに、「gethostid」(/usr/bin/hostidプログラムで使用) がglibc によって実装され、次のことを試みます。

  1. /etc/hostid固定ファイル (私のシステム上) が存在するかどうかを確認します。その場合は、そこにある 4 バイトの値を使用します。
  2. これに失敗すると、システムの IP アドレスに基づいてホスト ID を作成しようとします。
  3. それができない場合、 のホスト ID を使用し0ます。

これは、すべてのシステムが固有の IP アドレスを持っている場合、固有のホスト ID も持つことを意味します。

システムに固有の IP アドレスがない場合でも、sethostidglibc ライブラリー呼び出し (上記の glibc のgethostidアルゴリズムのステップ (1) で読み取ったファイルに書き込む) を使用して、ホスト ID をオーバーライドできます。

KVM インスタンスのゾーン ID の取得について:

Solaris ゾーン (すべてのインスタンスが同じカーネルを共有する) とは異なり、KVM の各インスタンスは、Linux カーネルの独自のコピーを実行します。これらはすべて、実行中の他のインスタンスを認識しません。私の知る限り、Solaris のゾーン ID に直接相当するものはありません。各 Linux インスタンスは他の Linux インスタンスと連携する方法がないからです。

実行中の KVM インスタンスごとに一意の識別子が必要な場合は、次のオプションがあります。

  • 上記のように、IPアドレス/ホストIDを設定するだけです。

  • インスタンスをセットアップ/起動するときに、使用してシステムのUUIDuuidgenを生成し、ファイルシステムの安全な場所に保存します。このように生成された UUID は、非常に高い確率で他の UUID と一致することはありません。

  • システムの各インスタンスを起動するときに、カーネル コマンド ラインで、手動で作成したインスタンスの一意の識別子を渡します ( -appendKVM コマンド ライン引数を使用)。これは、後で から取得できます/proc/cmdline

于 2011-01-31T12:11:57.493 に答える