4

Python スクリプトが Xen 仮想マシンでいつ実行されているかを判断する必要があります。VM は Linux を実行します。

プラットフォーム モジュールに明らかなものが見つかりません。私が得ることができる最も近いものは、platform.platform() の「xen」の外観です。

>>> platform.platform()
'Linux-2.6.18-194.el5xen-x86_64-with-redhat-5.5-Final'

これを決定する最良の方法は何ですか?

ありがとう。

4

7 に答える 7

7

参考までに、準仮想 VM の場合は、/proc/xen/capabilities ファイルが必要です。その内容が「control_d」の場合は、dom0 で実行されています。それ以外の場合は、domU で実行されています。
カーネルのバージョンに依存しないでください。VM がカスタム カーネル、別のカーネル バージョン、または最新の PV-ops カーネル (REDHAT のカーネルとは異なり、"xen" 文字列が含まれていない) でコンパイルされている場合、コードは機能しません。

一方で、他にも気の利いたトリックがあります。cpuid 命令はその一例です。Pythonでそれを行う方法はわかりませんが、eaxを1に設定してcpuidを呼び出すと、ECXのビット31に答えがあります。設定されている場合は、ハイパーバイザーで実行しています。そうでなければ、そうではありません。ただし、これは 64 ビット プラットフォームでのみ機能します。

于 2010-12-04T01:35:06.507 に答える
1

virt-what: http://people.redhat.com/~rjones/virt-what/

virt-what は、プログラムが仮想マシンで実行されているかどうかを検出するために使用できるシェル スクリプトです。

virt-what は、一般的なオープン ソース ハイパーバイザー (KVM、Xen、QEMU、VirtualBox)、IBM Systemz、LPAR、z/VM などのメインフレーム システム、Hitachi Virtage などのハードウェア パーティショニング スキーム、 VMWare、Microsoft Hyper-V など。

于 2012-05-06T22:53:32.443 に答える
0

Cで記述されたxen-detectコマンドを呼び出すことができます。

于 2012-04-18T06:01:36.777 に答える
0

準仮想化VMの場合は、次を使用します。

ps auwx | egrep -c '\[xenbus\]$'

戻り値が1の場合、それはxen準仮想化ゲストです。そうでなければ、そうではありません。

于 2012-01-30T17:06:01.440 に答える
0

依存できますplatform.platform()か?知らない。可能で、いつでも機能する場合:

>>> output = 'Linux-2.6.18-194.el5xen-x86_64-with-redhat-5.5-Final'
>>> if 'xen' in output:
      print 'Xen found'

Xen found

これを行う方法は複数あります。どちらに従うかはあなた次第です。この質問にのみ答えるSOのこの質問を見てくださいこれで、あなたのタスクは Python でこれを実装しています。これには、何らかの外部プロセスを呼び出して出力を確認することが含まれる場合があります。出来ますか?はい。

于 2010-12-02T19:25:32.530 に答える
0

一部のシステムでは、「通常の」カーネルと、Fedora などの Xen DomU のカーネルに違いはありません。システムが Xen 上で実行されているかどうかを検出するためにカーネルの名前を使用することは、常に信頼できるとは限りません。

考えられる方法の 1 つは、カーネルの起動メッセージと grep xen を確認することです。

dmesg | grep xen

于 2010-12-12T15:29:50.943 に答える
-1
import re, platform

def is_xen():
    return bool(re.search('xen', platform.platform()))
于 2010-12-02T19:08:38.047 に答える