VMware Communities > Blogs

Blog Posts

Unofficial Tech Memo - Koji Komatsu

17 Posts
1 2 Previous Next
0

VI Toolkit for Windows (通称VI PowerShell)には、Update-Toolsというコマンドレットがある。これはゲストOSにインストールされたVMware Toolsをアップデートするためのもの。ただし、Toolsアップグレード後に自動的にゲストOSの再起動がかかってしまう。

こういった場合にはGet-Viewを使うのが定石。Pabloがコミュニティでのディスカッションを紹介している。

Installing VMware Tools without a reboot ...
http://communities.vmware.com/blogs/DeveloperCenter/2008/12/30/installing-vmware-tools-without-a-reboot-

How to install VMware tools without a reboot?
http://communities.vmware.com/thread/168530

結論的には下記のように書くのがベストプラクティスのようだ。(Windowsゲスト限定)

$insParm = '/s /v"/qn /norestart"'
$updList = Get-VM | Where-Object {$_.PowerState -eq "PoweredON"} | % {Get-View $_.ID} | Where-Object {$_.guest.toolsstatus -match "toolsOld" } | Where-Object {$_.guest.guestfamily -match "windowsGuest"}
foreach ($uVM in $updList)
{
$uVM.Name
$uVM.UpgradeTools_Task($insParm)
#Wait 30 seconds before starting another update task
Start-Sleep -s 30
}

ポイントはToolsのアップグレードをサイレントかつ自動再起動なしで実施するパラメータを指定していること。

もちろん、ゲストを再起動する必要性そのものがなくなるわけではないので、一括アップグレード後に、必要な順序で管理者が再起動をかけていくことになる。再起動されるまでも、VI Clientには、ToolsのバージョンがOKと出てしまうので、どれが最新かどうか分からなくならないように注意も必要。

なお、日本語ゲストOSの場合でToolsのアップグレードがエラーでとまってしまう問題は、ESX3.5 Update4で解消されている。したがって、日本語環境ではそれ以降のバージョンであることが前提。

ESX3.5 Update4 Release Notes
http://www.vmware.com/support/vi3/doc/vi3_esx35u4_rel_notes.html

0 Comments Permalink
1

vCenter 2.5 Update4 から、パフォーマンス概要を一覧化する「パフォーマンス概要チャート (Performance Overview Chart)」機能が追加されている。ESX単位で複数の仮想マシンのパフォーマンスグラフを並べて表示する新しい画面が追加されただけで、今まで見えなかったものが見えるようになるわけではない。ただ、仮想マシン数が非常に多い環境では役立つ機会もあるかもしれない。

VMware VirtualCenter 2.5 Update 4 リリース ノート
http://www.vmware.com/jp/support/vi3/doc/vi3_vc25u4_rel_notes_ja.html

パフォーマンス概要チャート: VirtualCenter 2.5 Update 4 では、パフォーマンス概要プラグインが導入されました。これは、CPU、メモリ、ディスク、ネットワークといった主要なパフォーマンス メトリックが 1 つのビューに表示され、複数のチャートを切り替える必要がありません。

vCenterのインストーラだけでは構成することができないので少々面倒くさい。詳細は下記のKBにまとまっている。

Installing the Performance Overview Plug-In in VirtualCenter 2.5 Update 4
http://kb.vmware.com/kb/1008296

画面のイメージを添付しておく。
ホスト、プール、VMを選択した場合に、新しいタブが選択できる。クラスタやデータセンタではタブは現れない。

1 Comments Permalink
0

VMware vCenter Server 2.5 on LinuxのTechnology Preview版が公開され、下記からダウンロード可能になっている。
http://communities.vmware.com/community/beta/vcserver_linux

CentOS 5.0 ベースの仮想アプライアンスとして提供されている。build番号は147989。
上記URLからダウンロード可能なインストールガイドを見る限り、機能的な制約はすでにかなり減っているようだ。気になる制約として残っているものは下記あたり。
・ゲストのカスタマイズ機能(クローン、テンプレートからデプロイ時)
・トポロジーマップ
・スケジュールタスク
・LDAPによる外部認証

将来については未定だが、このバージョンではDBとしてはOracle 10以降のみがサポートされている。また、Express Edition等が同梱されているわけではないので、別途構築する必要がある。

0 Comments Permalink
0

VI PowerShell 1.5 (正式名称 VI Toolkit for Windows 1.5) がリリースされた。
32の新しいコマンドレットと多数のオプションが追加されており、Get-Viewを使わなくても設定の確認や変更ができる範囲が広がった。

詳細はリリースノートを。

VMware Infrastructure Toolkit (for Windows) 1.5 Release Notes
http://www.vmware.com/support/developer/windowstoolkit/wintk15/windowstoolkit15-200901-releasenotes.html

0 Comments Permalink
0

VI API経由では、データストアブラウザで行うような、VMFS上のファイル操作はできないと間違った情報をいろんなところで流してしまった。HostDatastoreBrowserを使うと、lsやrm相当の操作くらいはできるらしい。

HostDatastoreBrowser
http://pubs.vmware.com/vi-sdk/visdk250/ReferenceGuide/vim.host.DatastoreBrowser.html

そして、求めていたスクリプトを発見。インベントリに存在せずファイルとしてただ放置された状態の仮想マシンのリストを作成するVI PowerShellスクリプト。

Find Orphaned VMDK's

必見。

0 Comments Permalink
0

これもサポート外だと思うが、パフォーマンスの調査で有効かもしれない。
ESXでサービスコンソールにログインしてvscsiStatsコマンドを使用することで、仮想ディスク単位でI/O遅延を確認することができる。

まず、下記のコマンドを実行し、仮想マシンと仮想ディスクの識別IDを確認する。

/usr/lib/vmware/bin/vscsiStats -l

出力例
Virtual Machine worldGroupID: 1632, Virtual Machine Display Name: vmname {
Virtual SCSI Disk handleID: 8397
}

上記のworldGroupID、handleIDを利用する。

統計情報の収集開始
/usr/lib/vmware/bin/vscsiStats -i 8397 -w 1632 -s

統計情報の表示
/usr/lib/vmware/bin/vscsiStats -i 8397 -w 1632 -p latency

統計情報の収集終了
/usr/lib/vmware/bin/vscsiStats -i 8397 -w 1632 -x

統計情報の出力例。I/O遅延の分布や最小値、最大値なども確認できる。単位はmicro sec。
Histogram: latency of IOs in Microseconds (us) for virtual machine worldGroupID : 1632, virtual disk handleID : 8397 {
min : 491
max : 14161
mean : 4582
count : 27
{
0 (<= 1)
0 (<= 10)
0 (<= 100)
1 (<= 500)
0 (<= 1000)
23 (<= 5000)
3 (<= 15000)
0 (<= 30000)
0 (<= 50000)
0 (<= 100000)
0 (> 100000)
}
}

latency以外に、ioLength, seekDistance, outstandingIOs, interarrival が確認できる。
csvでの書き出し(-c オプション)もある。

ESX3.0.xでは、コマンドはあるものの -l オプションがないため、識別IDの確認方法が不明。

0 Comments Permalink
0

VMware ToolsはゲストOSにインストールすることが推奨されるコンポーネント。ドライバとシンプルなソフトウェア群でできていて日ごろはその動作を気にすることはないのだが、検証目的で機能の動作を確認したい場合、動作ログをとることが可能。

WindowsゲストのToolsログ

Windowsのバージョンにもよるが、下記にToolsの設定ファイルがある。

Windows 2003/XPでは、
C:\Documents and Settings\All Users\Application Data\VMware\VMware Tools\tools.conf

Windows 2008/Vistaでは、
C:\Users\All Users\VMware\VMware Tools\tools.conf
もしくは
C:\ProgramData\VMware\VMware Tools\tools.conf

ここに下記を記述する。
log = "TRUE"
log.file = "%PATHNAME%"

ただし、VCBでVSS(Volume Shadow Copy Service)を利用している場合、ログを有効にしているとエラーが発生してしまうらしい(下記はESX3.5 Update2とVCB1.5、Windows2003のケース)。

2008-10-07 18:55:24.789 'vcbMounter' 1544 error Error: Other error encountered: Snapshot creation failed: Could not quiesce file system.

LinuxゲストのToolsログ

記述内容はWindowsゲストと同様。設定ファイルは下記にある。
/etc/vmware-tools/tools.conf

なお、デフォルトで下記にすこしだけログが記録されている。
/var/log/vmware-tools-guestd

また、上記とは別に、クローンの際のカスタマイゼーションのログもゲストOS内で確認できる。

Windowsゲストのカスタマイゼーションログ

sysprepに関するログが、C:\WINDOWS\Temp\vmware-imcの下にあるguestcust.logとtoolsDeployPkg.logに書き出される。

Linuxゲストのカスタマイゼーションログ

エラー等が発生すると、/var/log/vmware/customization.logに記録が残っている。

0 Comments Permalink
0

esxtopバッチモード

esxtopはESXのサービスコンソールで使用可能なパフォーマンス情報を表示するコマンド。ESXiの場合、Remote CLIやVIMAの仮想アプライアンスでresxtopとして同等のコマンドが用意されている。位置づけとしては通常時の継続的なパフォーマンス監視というよりは調査目的であるため、対話モードで使用することが一般的だが、バッチモードを使用するとパフォーマンス情報が標準出力にcsvフォーマットで出力されるため、ファイルにリダイレクトして別用途で使用することができる。
(VI Clientではパフォーマンスチャートの内容をMS Excelフォーマットで保存することができる。)

バッチモードを使用する一般的な手順

手っ取り早く使うには、下記のコマンドを使用する

esxtop -b -a -n 1 > esxtop_output.csv

-bがバッチモードを指定している。-aは全項目を出力することを示している。-nは表示する統計回数である。-nを省略した場合、適当なタイミングでCtrl-Cを押せばよい。

さて、全項目を出力するとデータ量が大きくなりがちなので、通常は項目を指定しておく。esxtopを対話モードで使用し、c/m/d/nキーなどで使用する画面を選択し、fキーで項目を選択した後、Wキーで設定を保存する。バッチモードでこの設定を指定することで、取り出したいデータだけを対象とすることができるのである。
なお、設定ファイルは複数つくることができるので、パターンを複数用意することも可能。例えば下記のようになる。

esxtop -b -c .esxtop_any_config -n 1000 > esxtop_output.csv

なお、esxtopの項目の説明については、マニュアル「リソース管理ガイド」やInterpreting esxtop Statisticsを参照されたい。

パフォーマンスモニタ(perfmon)での表示

バッチモードで書き出したcsvファイルは如何様にも使用できるが、グラフィカルなグラフにしたいなら、Windowsのパフォーマンスモニタ(perfmon)を使用することもできる。
手順は下記のとおり。

1.パフォーマンスモニタを立ち上げる(perfmonコマンド)
2.グラフを右クリックし、ドロップダウンリストから「プロパティ」を選択
3.開いた画面で「ソース」タブに切り替え
4.データソースセクションで「ログファイル」ラジオボタンを選択
5.「追加」ボタンをクリックし、esxtopのcsvファイルを選択
6.「OK」ボタンをクリックして画面を閉じる
7.再度グラフを右クリックし「カラムの追加」を選択
8.「次のコンピュータからカウンタを選ぶ」で、esxtopを取得したホストが選択されていることを確認し、表示したい項目を選択し「追加」する
9.必要な項目の追加が終わったら「閉じる」ボタンで画面に戻る


補足

VI Clientではパフォーマンスチャートの内容をMS Excelフォーマットで保存することができる。

0 Comments Permalink
0

LinuxゲストOSでの時刻同期

LinuxゲストOSでは、Kernelのバージョンによって時刻のずれを避けるための考慮が必要だったりする。最も一般的な設定としては、下記の3つ。

1.VMware Toolsの時刻同期機能を有効にする
これはESX3.5であれば、VI Clientで仮想マシンの設定項目に存在する「ホストとゲスト時間を同期」にチェックを入れるか、VMware Toolsの設定画面で有効にする。

2.grub.confでタイマーデバイス選択を制御する
かつては何を書くかで議論が絶えなかったが、今は下記の表であてはまるものをとりあえず盲目的に書いておく。
http://kb.vmware.com/kb/1006427

3.タイマー割り込みの回数を少なくする (kernel2.6系のみ)
これが一番厄介だが効果は劇的だったりする。kernel2.6系では、カーネルコンパイル時のオプションに1秒間の割り込み回数が100,250,1000の3種類が選べる。Novel SLES10SP2では250になっているが、RHEL4やRHEL5は1000になっている。特にVirtual SMP構成の場合は、CPUの分だけLOCの割り込みが倍増するため影響が大きい。
REHL4.7、5.1以降(CentOSもOK)であれば、2のKBにも記載されているようにgrubのdivider=10だけでよい。
だが、それ以外についてはkernelのヘッダファイルを修正して再コンパイルする必要がある。
具体的には、/usr/src/linux-2.6/include/asm-i386/param.hのHZの定義を下記のように修正する。(詳細はhttp://kb.vmware.com/kb/1420

#define HZ 100
もしくは、CONFIG_HZ_1000=yをCONFIG_HZ_100=yに変更して再コンパイルする。

タイマー割り込みの回数を確認する

さて、3の設定が効いているかどうかを確認する方法。dividerの設定は起動後に/proc/cmdlineでも確認できるが、割り込みの回数自体も/proc/interruptsで表示される累積の割り込み回数を何度か表示して、差分と経過時間から計算することができる。(SLES10SP2のように、ディストリビューションによっては最初から/proc/sys/kernel/HZに示されているケースもある。)

例えば、下記はdivider=10を指定したRHEL5.1で、10秒毎に/proc/interruptsの結果を表示した例。割り込みレベル0もしくはLOCの差を10で割ると、約100回の割り込みが発生したことがわかる。つまり、割り込み回数がデフォルトの1000から100になっていることがわかる。

--root@localhost ~--# /sbin/hwclock
Sat 03 Jan 2009 05:57:12 PM JST -0.686850 seconds
--root@localhost ~--# date
Sat Jan 3 17:57:12 JST 2009
--root@localhost ~--# cat /proc/interrupts
CPU0
0: 262551 IO-APIC-edge timer
1: 475 IO-APIC-edge i8042
6: 5 IO-APIC-edge floppy
7: 0 IO-APIC-edge parport0
8: 6 IO-APIC-edge rtc
9: 0 IO-APIC-level acpi
12: 7455 IO-APIC-edge i8042
14: 24515 IO-APIC-edge ide0
169: 9294 IO-APIC-level ioc0
177: 1891 IO-APIC-level vmxnet ether
NMI: 0
LOC: 262605
ERR: 0
MIS: 0
--root@localhost ~--# sleep 10
--root@localhost ~--# cat /proc/interrupts
CPU0
0: 263557 IO-APIC-edge timer
1: 475 IO-APIC-edge i8042
6: 5 IO-APIC-edge floppy
7: 0 IO-APIC-edge parport0
8: 6 IO-APIC-edge rtc
9: 0 IO-APIC-level acpi
12: 7455 IO-APIC-edge i8042
14: 24610 IO-APIC-edge ide0
169: 9306 IO-APIC-level ioc0
177: 1957 IO-APIC-level vmxnet ether
NMI: 0
LOC: 263609
ERR: 0
MIS: 0
--root@localhost ~--# date
Sat Jan 3 17:57:22 JST 2009
--root@localhost ~--# /sbin/hwclock
Sat 03 Jan 2009 05:57:23 PM JST -0.913159 seconds

なお、Windowsではperfmonでinterrupts/secという項目があるので、こちらで同様の計算ができるが、タイマー割り込みの回数だけを抜き出す方法は不明。

0 Comments Permalink
0

マニュアルだけではわからないesxtopの項目の解説。

Interpreting esxtop Statistics

ESX4.0での情報も一部記載されている。interrupts(割り込み)の統計画面も追加されるようだ。

0 Comments Permalink
0

必須ではないが、P2V後のプラグアンドプレイによるハードウェアの更新後も古いドライバによる悪影響が疑われる場合には下記で紹介されている手法が使える。

接続されていないデバイスの情報を表示させる
http://d.hatena.ne.jp/rasis/20081227/1230389439

メモ
set devmgr_show_nonpresent_devices=1
start devmgmt.msc

0 Comments 0 References Permalink
0

VMware ConverterでP2VしたWindows仮想マシンで、ネットワーク接続に物理環境と同じIPアドレスを割り当てようとすると、「このネットワークアダプタ用に入力されたIPアドレスは別のアダプタに既に割り当てられています。」というようなエラーメッセージが表示される場合がある。
ここで指摘されるネットワークアダプタは物理環境で認識していたもので、Windowsのプラグアンドプレイ機能によってP2V後の最初の起動の際にクリーンアップされるべきものだ。ところが、デバイスマネージャには表示されないものの、レジストリ上にゴミとして残ってしまいIPアドレスの競合を引き起こしてしまうことがある。

MSの下記KBがこの事象の詳細と対処方法を解説している。
http://support.microsoft.com/kb/269155/ja

0 Comments 0 References Permalink
1

VCのIPアドレスを変更すると、管理下のESXは全て「応答なし(not responding)」になる。

VCとESXの接続状態の確認は、VCからのポーリングではなく、ESXから定期的(60秒毎?)に生きていることを通知するしくみになっている(VCはこの通信をudp/902で待ち受けている)。VCのIPアドレスが変更されてもESXには変更が通知されないため、ESXはこの設定ファイルに記録された古いIPアドレスに通知を送り続ける。VCはこの通知を受け取れず「応答なし」とみなしてしまうことになる。

このような状況になった場合、もっとも容易に復旧する方法は、
1.VI Clientのインベントリ画面でデータセンタを選択し、「ホスト」タブを開く
2.ShiftやControlボタンを使ってESXを複数選択する
3.右クリックし、まとめて「切断」する
4.ESXの切断が終わったら、同様に右クリックし、まとめて「接続」する

再度接続しなおすことで、ESXは新しいVCのIPアドレスを認識することになる。
切断中はVMware DRSといった機能は動作しないが、仮想マシンの動作そのものには一切影響しない。

VI Clientで複数選択ができないバージョンの場合、下記のスクリプトを使用することでESXを1台ごと切断・接続する手間を省くことができる。

VI Perl Toolkit Script to Reconnect Non-Responding Hosts
http://kb.vmware.com/kb/1003343

なお、ESXは自身を管理しているVCのIPアドレスを下記のファイルに記録している。
/etc/opt/vmware/vpxa/vpxa.cfg (VC2.5系)
/etc/vmware/vpxa.cfg (VC2.0系)

1 Comments Permalink
0

New-VMは、仮想マシンの新規作成だけでなく、-Templateオプションを使用してテンプレートからのデプロイを行うこともできる重要なコマンドレットだ。テンプレートからのデプロイ時には、OSCustomizationSpecを併用することで、カスタマイゼーションも実現できる。
ただ、VI ClientではできるのにNew-VMコマンドレットではできない操作が2つある。
・テンプレートではなく仮想マシンをクローンする
・カスタマイゼーションでIPアドレスを指定する

PMであるShanklinの書いた下記FAQに、"How can I change a VM's IP address?"というタイトルで、両方の制限をVI APIネイティブに解決する方法が紹介されている。

Managing VMware with PowerShell FAQ

VirtualMachineのCloneVM_Taskメソッドを使用する方法で、VMware.Vim.VirtualMachineCloneSpecを直接作成するという流れだ。少し行数は多いが一見難しくなさそうに見える。
ところが、実際には書かれているサンプルスクリプトはVirtualMachineCloneSpecの中の一部の必須プロパティの指定を省略してあるようだ。リファレンスガイドの下記を見ればわかるのだがこれは結構根気が必要。

VirtualMachineCloneSpec
http://www.vmware.com/support/developer/vc-sdk/visdk25pubs/ReferenceGuide/vim.vm.CloneSpec.html

実現されたい方は、下記をたどると省略されていない形のサンプルを紹介しているユーザがいる。

set-oscustomizationspec and IP address

0 Comments Permalink
0

VI PowerShellのサンプルとしてよく見かける下記の記述では、どうやらCold Migrationしかできないようだ。VMotionしようとすると、inner errorと言われしまう。結構はまり所かも。

Move-VM -VM (Get-VM "vm-name") -Destination (Get-VMHost "host-name")

ホストの変わりにリソースプールを指定すれば成功するのだが、リソースプールではなくてESX直下にVMotionしたい場合、回りくどく下記のように書く必要がある。

Move-VM -VM (Get-VM "vm-name") -Destination (Get-Resourcepool -Name リソース -Location (Get-VMHost "host-name"))

途中、Get-Resourcepool で指定している「リソース」という名前は、ESXに自動的に生成された見えないルートリソースプールの名前。英語版の場合には「リソース」ではなく「Resource」となるのかな?(未確認)

なお、クラスタ内の場合、DRSの有無にかぎらずESXのルートリソースプールはクラスタのルートリソースプールになっているのか、コレで指定してもESXを移動しない。(エラーは発生せず、成功したように見えるが。)

これらの点について、VI PowerShellのヘルプでは下記のように注意書きされている。

Moving a virtual machine in a cluster is only possible if the virtual machine is in a resource pool in that cluster.

実際の挙動を確認した限りは下記が正解に近いのではないだろうか。

クラスタの有無にかかわらず、VMotionの移行先にはリソースプールだけが指定できます。また、クラスタ内では(たとえESXのルートリソースプールを指定したとしても)ESX間の移行はできません。

なお、確認は ESX3.0.3 / VC 2.0.3 および、ESX 3.5 Update1 / ESXi 3.5 Update1 / VC 2.5 Update1 で実施した。

0 Comments 0 References Permalink
1 2 Previous Next

kkomatsu

Member since: Jul 29, 2007

このblogは小松康二の個人的なメモですのでサポート外の設定や勘違い等が含まれている可能性があります

View kkomatsu's profile