Skip navigation
2013

esxtop のフィールド表示設定は、-c <設定ファイル> を指定して esxtop を実行することで
起動時点の状態をカスタマイズできます。

まだ設定ファイルがない場合、esxtop の実行中に「W」キーを押すことで
ファイル名を指定して設定ファイルを保存することができます。

デフォルトでは「//.esxtop50rc」というパスが指定されるので、
/.esxtop50rc

に保存されます。(ルートディレクトリ直下です。)


デフォルトの設定ファイルは、下記のようになっています。
※esxtop 実行して、そのまま W を押して保存した設定ファイルです。

~ # cat /.esxtop50rc
ABcDEFghij
aBcDefgHijKLmnOpq
ABCdEfGhijkl
ABcdeFGhIjklmnop
aBCDEFGH
AbcDEFGHIJKLmno
ABCDeF
ABCDe
5c


このままでは、各行がどの esxtop パネルと対応しているのかがわかりにくいのですが、

esxtop のパネルとの対応は下記のようになっています。(上行から順番で)
ABC ~の文字がそれぞれどのフィールドに対応するかは、esxtop で各パネル実行中に「f」キーを押すと確認できます。
大文字=表示 ON、小文字=表示 OFF です。

設定値対応するパネル
ABcDEFghijc:cpu
aBcDefgHijKLmnOpqm:memory
ABCdEfGhijkld:disk adapter
ABcdeFGhIjklmnopu:disk device
aBCDEFGHv:disk VM
AbcDEFGHIJKLmnon:network
ABCDeFi:interrupt
ABCDep:power mgmt
5c※これは固定値で。

 

 

ためしに、設定ファイルでいくつか試してみました。


あらかじめアルファベットを並べ替えておくと
フィールドの表示順番を変更することができます。
例: 1行目のABcDEFghij → BAcDEFghij


アルファベットを省略すると、そのフィールドは表示されなくなります。
この場合、esxtop 起動中に「f」キーで表示 ON / OFF を切り替えることもできなくなります。
例1: 1行目のABcDEFghij → ABcDEF とすると、「ghij」に相当するカウンタは表示できなくなる。
例2: 空行を入れておく →該当するパネルはフィールドを表示できなくなる。

 


各パネルで、デフォルトのフィールド表示状態を見てみました。

 

esxtop 起動中に「f」キーを押して表示される画面では、

各フィールドの先頭に「*」がついているものが、表示 ON になっています。

その場で表示 ON / OFF を切り替える場合は、
切り替えたいフィールドに対応するキーを押し、大文字 / 小文字を変更します。

 

たとえば、「c:cpu」では、デフォルトでは
「I:  SUMMARY STATS = CPU Summary Stats」は非表示です。
ここで「i」キーを押してカウンタ名の頭に「*」をつけて画面を抜ける(Enterキー)すると
「SUMMARY STATS」のカウンタセットが表示されるようになります。

 

設定ファイルに記載しておく場合は、あらかじめ1行目の cpu のフィールド設定文字列に

「I」(大文字のi)を記載しておくと表示されます。

 

c:cpu

Current Field order: ABcDEFghij

 

* A:  ID = Id
* B:  GID = Group Id
  C:  LWID = Leader World Id (World Group Id)
* D:  NAME = Name
* E:  NWLD = Num Members
* F:  %STATE TIMES = CPU State Times
  G:  EVENT COUNTS/s = CPU Event Counts
  H:  CPU ALLOC = CPU Allocations
  I:  SUMMARY STATS = CPU Summary Stats
  J:  POWER STATS = CPU Power Stats

 

m:memory

Current Field order: aBcDefgHijKLmnOpq

 

  A:  ID = Id
* B:  GID = Group Id
  C:  LWID = Leader World Id (World Group Id)
* D:  NAME = Name
  E:  NWLD = Num Members
  F:  MEM ALLOC = MEM Allocations
  G:  NUMA STATS = Numa Statistics
* H:  SIZE = MEM Size (MB)
  I:  ACTV = MEM Active (MB)
  J:  MCTL = MEM Ctl (MB)
* K:  SWAP STATS = Swap Statistics (MB)
* L:  LLSWAP STATS = Llswap Statistics (MB)
  M:  CPT = MEM Checkpoint (MB)
  N:  COW = MEM Cow (MB)
* O:  OVHD = MEM Overhead (MB)
  P:  CMT = MEM Committed (MB)
  Q:  ZIP = MEM Compression (MB)


d:disk adapter

Current Field order: ABCdEfGhijkl

 

* A:  ADAPTR = Adapter Name
* B:  PATH = Path Name
* C:  NPATHS = Num Paths
  D:  QSTATS = Queue Stats
* E:  IOSTATS = I/O Stats
  F:  RESVSTATS = Reserve Stats
* G:  LATSTATS/cmd = Overall Latency Stats (ms)
  H:  LATSTATS/rd = Read Latency Stats (ms)
  I:  LATSTATS/wr = Write Latency Stats (ms)
  J:  ERRSTATS/s = Error Stats
  K:  PAESTATS/s = PAE Stats
  L:  SPLTSTATS/s = SPLIT Stats


u:disk device

Current Field order: ABcdeFGhIjklmnop

 

* A:  DEVICE = Device Name
* B:  ID = Path/World/Partition Id
  C:  NUM = Num of Objects
  D:  SHARES = Shares
  E:  BLKSZ = Block Size (bytes)
* F:  QSTATS = Queue Stats
* G:  IOSTATS = I/O Stats
  H:  RESVSTATS = Reserve Stats
* I:  LATSTATS/cmd = Overall Latency Stats (ms)
  J:  LATSTATS/rd = Read Latency Stats (ms)
  K:  LATSTATS/wr = Write Latency Stats (ms)
  L:  ERRSTATS/s = Error Stats
  M:  PAESTATS/s = PAE Stats
  N:  SPLTSTATS/s = SPLIT Stats
  O:  VAAISTATS= VAAI Stats
  P:  VAAILATSTATS/cmd = VAAI Latency Stats (ms)


v:disk VM

Current Field order: aBCDEFGH

 

  A:  ID = Vscsi Id
* B:  GID = Grp Id
* C:  VMNAME = VM Name
* D:  VDEVNAME = Virtual Device Name
* E:  NVDISK = Num of Virtual Disks
* F:  IOSTATS = I/O Stats
* G:  LATSTATS/rd = Read Latency Stats (ms)
* H:  LATSTATS/wr = Write Latency Stats (ms)


n:network

Current Field order: AbcDEFGHIJKLmno

 

* A:  PORT-ID = Port Id
  B:  UPLINK = Uplink(Y/N)
  C:  PNIC = Physical Nic Properties
* D:  USED-BY = Used By Name
* E:  TEAM-PNIC = Team Uplink Physcial NIC Name
* F:  DNAME = Device Name
* G:  PKTTX/s = Packets Tx/s
* H:  MbTX/s = MegaBits Tx/s
* I:  PKTRX/s = Packets Rx/s
* J:  MbRX/s = MegaBits Rx/s
* K:  DRPTX/s = %Packets Dropped (Tx)
* L:  DRPRX/s = %Packets Dropped (Rx)
  M:  ACTN/s = Actions/s
  N:  MULTICAST/s = Multicast Packets/s
  O:  BROADCAST/s = Broadcast Packets/s


i:interrupt

Current Field order: ABCDeF

 

* A:  VECTOR = Interrupt Vector Id
* B:  COUNT/sec = Total Number of Interupts Per Second
* C:  TIME/int = Average Interrupt Processing Time (usec)
* D:  COUNT_x/sec = Number of Interupts Per Second On CPU x
  E:  TIME_x/int = Average Interrupt Processing Time (usec) on CPU x
* F:  DEVICES = Devices Using the Interrupt Vector


p:power mgmt

Current Field order: ABCDe

 

* A:  PCPU = PCPU Id
* B:  CPU Usage = CPU Usage time: %USED and %UTIL
* C:  %CState = Percentage of time spent in a C-State
* D:  %PState = Percentage of time spent in a P-State
  E:  %TState = Percentage of time spent in a T-State


今回確認した ESXi のバージョンは下記です。

~ # vmware -v
VMware ESXi 5.1.0 build-799733

 

以上、設定ファイルでの esxtop のフィールド表示カスタマイズでした。

ESXi上のVMをクローニング(複製)したいケースが多いと思いますが、
vCenterがないと、単純に「右クリックで[クローン作成]」といったことができません。

 

vCenterなし環境でVMを複製する場合、
だいたい、下記のどれかの方法となるのではないかと思います。

A. VMをOVF(OVA)形式でエクスポート→別のVMとしてインポート。
B. ESXiに直接ログイン(SSH等)して、VMの構成ファイルをコピー。
C. VMware vCenter Converter を使用する。


「A」の方法では、VMのイメージや構成ファイル(VMDKファイルやVMXファイルなど)を
一度、ESXiのデータストアの以外の場所に保存する必要があり、
そこには数GB(VMの使用している容量分)の空き容量が必要になります。

「C」の方法は、Converterをどこか(ESXiにアクセスすることができるPCなど)に
インストールしておく必要があります。

 

そのため、
コマンドライン操作が苦手でないのであれば、
慣れれば「B」の方法が、簡潔&便利ではないかと思っています。


そこで、「うちではこうしてます」的なやりかたを紹介してみます。

 

 

vCenterなし環境でのVM複製例。


1. SSHでESXiにログインして、データストアに移動(cd)します。

~ # cd /vmfs/volumes/ds_local_01
/vmfs/volumes/4e1d568f-c2bf5a1e-8739-d48564c9f062 # pwd
/vmfs/volumes/ds_local_01

 

2. スクリプトを配置

ここにVM構成ファイルをまとめてコピーするコマンドを記載したスクリプトファイルを置いておきます。

ESXiでは、Linux風にシェルスクリプトを作成して実行することができます。

※例では、スクリプトファイル名を「cpvm.sh」にしています。
※あまり作りこんでいないので、一例としてご覧ください。このままではイレギュラーケースには全く対応できないので...

スクリプト例: cpvm.sh

SRC_VM=$1
DST_VM=$2

 

[ -d $SRC_VM ] || { echo "src_vm not exists."    ; exit 1; }
[ -d $DST_VM ] && { echo "dst_vm already exists."; exit 1; }

 

mkdir $DST_VM

 

ls $SRC_VM/*vmdk | grep -v -e "-flat" -e "delta" | while read L
do
        L2=`echo $L | sed -e s/${SRC_VM}/${DST_VM}/g`
        vmkfstools --diskformat thin --clonevirtualdisk $L $L2
done

 

ls $SRC_VM/* | grep -v -e "vmdk" -e ".log" | while read L
do
        L2=`echo $L | sed -e s/${SRC_VM}/${DST_VM}/g`
        cp -p $L $L2
done

 

sed -i s/$SRC_VM/$DST_VM/g $DST_VM/${DST_VM}.vmx

 

3. 複製スクリプト実行。


それでは、既に作成してある 「vm01」というVMを複製してみます。

コピー元のvm01

/vmfs/volumes/4e1d568f-c2bf5a1e-8739-d48564c9f062 # ls vm01
vm01-flat.vmdk  vm01.vmdk       vm01.vmx        vmware.log
vm01.nvram      vm01.vmsd       vm01.vmxf


スクリプトを実行して、複製します。

実行方法は、
sh cpvm.sh <複製元VM名> <新規VM名>

です。

/vmfs/volumes/4e1d568f-c2bf5a1e-8739-d48564c9f062 # sh cpvm.sh vm01 vm02
Destination disk format: VMFS thin-provisioned
Cloning disk 'vm01/vm01.vmdk'...
Clone: 100% done.
/vmfs/volumes/4e1d568f-c2bf5a1e-8739-d48564c9f062 # ls vm02
vm02-flat.vmdk  vm02.nvram      vm02.vmdk       vm02.vmsd       vm02.vmx        vm02.vmxf


※上記のスクリプトでは、実際は下記のようなコマンドを実行しています。


mkdir vm02
vmkfstools --diskformat thin --clonevirtualdisk vm01/vm01.vmdk vm02/vm02.vmdk
cp -p vm01/vm01.nvram vm02/vm02.nvram
cp -p vm01/vm01.vmsd vm02/vm02.vmsd
cp -p vm01/vm01.vmx vm02/vm02.vmx
cp -p vm01/vm01.vmxf vm02/vm02.vmxf
sed -i s/vm01/vm02/g vm02/vm02.vmx


ちなみに、新規VM名が既にVMが存在する場合は、
「dst_vm already exists.」
存在しないVMを複製元として指定した場合は
「src_vm not exists.」
と表示して止まるようにしてみました。

 

4. インベントリにVMを登録


このあと、データストアブラウザやvim-cmd コマンドなどでインベントリにVMを登録します。

たとえば、vim-cmdコマンドなら下記のように登録します。

/vmfs/volumes/4e1d568f-c2bf5a1e-8739-d48564c9f062 # vim-cmd solo/registervm /vmfs/volumes/ds_local_01/vm02/vm02.vmx
74

 

5. VMの起動


vSphere ClientなどからVMを起動します。

VMを起動したときに下記のような質問がある場合は、「I copied it」 を選択します。

vm_clone_msg.png


以上、VMのクローンの話でした。