VM内からVMWareタイプを判別する

VM内からVMWareタイプを判別する

ゲスト VM が Linux マシンである場合、VM (つまりゲスト OS) 自体から VMWare タイプ (ESXi、Workstation、Fusion など) を判別することは可能ですか?

hypervisorでを grep したり/proc/cpuinfo、 を使用したりと、さまざまなことを試しましたが、lscpu見つかったのは「vmware」だけで、詳細はわかりません。

私にはこのマシンのルート権限がありません。それが状況を変えるのであれば、ルートのみで可能なソリューションに興味があります。それはいくつかの点で便利でしょう。また、私は主に Linux ソリューションに興味がありますが、Windows のみのソリューションも役立つかもしれません。

私が質問する理由は、パフォーマンスを把握できるようにするためです。ESXi は、a) 通常、「実際のハードウェア」™ 上に展開され、b) 追加の OS オーバーヘッドはありません。このサーバー障害の質問詳細については、特にこの答え

答え1

dmidecodeの出力にあるBIOSバージョン文字列からバージョンを判別できます。これを行う方法の例を次に示します。https://fritshoogland.wordpress.com/2013/01/24/determine-vmware-esx-version-from-linux-as-guest-os/これは 2013 年に遡るものなので、おそらく新しいバージョンがいくつか欠落しているでしょう。

case $( dmidecode | grep -A4 "BIOS Information" | grep Address | awk '{ print $2 }' ) in
"0xE8480" ) echo "ESX 2.5" ;;
"0xE7C70" ) echo "ESX 3.0" ;;
"0xE7910" ) echo "ESX 3.5" ;;
"0xE7910" ) echo "ESX 4"   ;;
"0xEA550" ) echo "ESX 4U1" ;;
"0xEA2E0" ) echo "ESX 4.1" ;;
"0xE72C0" ) echo "ESXi 5"   ;;
"0xEA0C0" ) echo "ESXi 5.1" ;;
"0xEA050" ) echo "ESXi 5.5" ;;
* ) echo "Unknown version: "
dmidecode | grep -A4 "BIOS Information" 
;;
esac

数年前、運用チームはどのバージョンの ESX を実行していたのか教えてくれませんでした (うーん!!)。しかし、ハイパーバイザーの特定のバージョンを必要とする新製品のテストを準備していたため、それを知る必要がありました。これは私にとって非常に役立ちました。

これを非ルート アカウントとして実行する必要がある場合は、sudo を使用します。「visudo」を使用して sudoers ファイルにアクセスし、ファイルの末尾近くに次のような行を追加します。

ユーザー名 ALL=(ALL:ALL) NOPASSWD:/usr/sbin/dmidecode

これにより、「username」は特別な認証なしで dmidecode にアクセスできるようになります。「dmidecode」ではなく「sudo dmidecode」を実行するだけです。

関連情報