VmWare ESXi 5.0 Update 1のVMの自動起動と自動電源オフ

ある州の機関で仮想化の実装を開始することにしました。 私の選択は、Citrix XenServer、tkで最初に落ちました。 その中にソフトウェアRAID1を編成することは可能でした(予算の不足のため、ハードウェアRAIDコントローラーがサーバーにインストールされていなかったため)が、それに遭遇したとき、ハードウェアRAIDコントローラーのお金を使い果たしてVmWare ESXi 5.0に切り替えました。 まあ、両方とも無料です。



すべてが完璧で、必要なタスクは仮想化され、仮想マシンは適切に動作しましたが、その後、ESXi 5.0のUpdate 1が発生しました。 更新後、仮想マシンの自動起動および自動シャットダウン機能が機能しなくなりました。 それは些細なことのように思えますが、私たちが望んでいた多くの力を残し、サーバー自体を再起動した後、仮想マシンの自動起動に時々疑問が生じました。 まあ、サーバーもオフにする必要がある場合があります。そのため、VMware vSphere Clientをハイパーバイザーに接続し、仮想マシンを1つずつオフにする必要がありましたが、これは非常に面倒でした。



ネットワークを調べてみると、スクリプトを記述して/etc/rc.local



から呼び出すことにより、サーバーの起動時にVMをオンにする方法が見つかりました。



しかし、シャットダウンが正しく動作するようにしたかったので、 /etc/inittab



編集は役に立ちませんでした。 /sbin/shutdown.sh



/sbin/vmware-autostart.sh



などのファイルを編集して/sbin/vmware-autostart.sh



メリットはありません。 ハイパーバイザーの環境全体がイメージからRAMにロードされ、そこに存在することが判明しました。



ハイパーバイザー自体のイメージに変更を加えることが決定されました。



これらの目的のために、特に、ハイパーバイザー自体からマシンを自動的に起動およびオフにすることに関する情報を取得する自動実行および自動シャットダウンスクリプトが作成されました。 「仮想マシンの起動/シャットダウン」セクションで構成を変更すると、スクリプトはそれらを正しく処理します(順序が順守されない限り、つまり、「任意の順序」の原則に基づいて動作します)。



1)autostart.sh:



#!/bin/sh



sleep_time=`/bin/vim-cmd hostsvc/autostartmanager/get_defaults | grep startDelay | sed "s/ //g" | sed "s/,//g" | awk 'FS="=" {print $2}'`



for i in `/bin/vim-cmd hostsvc/autostartmanager/get_autostartseq | grep vim.VirtualMachine | sed "s/',//g" | awk 'FS=":" {print $2}'`; do

state=`/bin/vim-cmd vmsvc/power.getstate $i | grep Power`

if [ "$state" = "Powered off" ]; then

/bin/vim-cmd vmsvc/power.on $i

j=0

while [ $j -le 3 ]; do

sleep $((sleep_time))

state=`/bin/vim-cmd vmsvc/get.guestheartbeatStatus $i`

if [ "$state" = "green" ]; then

break

fi

j=$((j+1))

done

fi

done








2)autostop.sh:



#!/bin/sh



sleep_time=`/bin/vim-cmd hostsvc/autostartmanager/get_defaults | grep stopDelay | sed "s/ //g" | sed "s/,//g" | awk 'FS="=" {print $2}'`



for i in `/bin/vim-cmd hostsvc/autostartmanager/get_autostartseq | grep vim.VirtualMachine | sed "s/',//g" | awk 'FS=":" {print $2}'`; do

state=`/bin/vim-cmd vmsvc/power.getstate $i | grep Power`

if [ "$state" = "Powered on" ]; then

/bin/vim-cmd vmsvc/power.shutdown $i

j=0

while [ $j -le 3 ]; do

sleep $((sleep_time))

state=`/bin/vim-cmd vmsvc/power.getstate $i | grep Power`

if [ "$state" = "Powered off" ]; then

break

fi

j=$((j+1))

done

fi

done








!!! すべての変更はあなた自身の危険とリスクで行われ、著者は結果に対して一切の責任を負いません!!!



最初に、gunzipを使用してイメージファイルをメインリポジトリに解凍します。

~ # gunzip < /bootbank/s.v00 > /vmfs/volumes/MainStorage/temp/tmp.vmtar





メインストレージに移動し、VmWare tarの助けを借りて何が起こったのかをもう一度アンパックしましょう。

~ # cd /vmfs/volumes/MainStorage/temp/

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed/temp # vmtar -x tmp.vmtar -o tmp.tar






そして今だけtarを解凍します(これはとても難しい入れ子人形です):

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed/temp # tar -xf tmp.tar





不要なアーカイブを削除して、何が起こったかを確認します。

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed/temp # rm -f tmp.tar tmp.vmtar

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed/temp # ls -l

drwxr-xr-x 1 201 201 7280 Jun 5 16:18 bin

drwxr-xr-x 1 201 201 280 Apr 30 03:16 dev

drwxr-xr-x 1 201 201 6580 Jun 5 16:18 etc

drwxr-xr-x 1 201 201 17080 Jun 5 16:15 lib

drwxr-xr-x 1 201 201 420 Jun 5 16:15 lib32

drwxr-xr-x 1 201 201 4900 Jun 5 16:15 lib64

drwxr-xr-x 1 201 201 420 Jun 5 16:15 opt

drwxr-xr-x 1 201 201 280 Apr 30 03:21 proc

lrwxrwxrwx 1 201 201 23 Jun 5 16:15 productLocker -> /locker/packages/5.0.0/

drwxr-xr-x 1 201 201 19040 Jun 5 16:18 sbin

drwxrwxrwt 1 201 201 280 Apr 30 03:33 tmp

drwxr-xr-x 1 201 201 980 Jun 5 16:16 usr

drwxr-xr-x 1 201 201 1400 Jun 5 16:18 var

drwxr-xr-x 1 201 201 560 Jun 5 16:18 vmfs

drwxr-xr-x 1 201 201 560 Jun 5 16:18 vmimages

lrwxrwxrwx 1 201 201 18 Jun 5 16:18 vmupgrade -> /locker/vmupgrade/






私たちはsbinディレクトリの内容に非常に興味があり、そこに行き、VMの自動実行と自動シャットダウンのためにファイルをコピーし、所有者と他のすべての人(ローカルのように)のアクセス権を変更します:

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed/temp # cd sbin/

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed/temp/sbin # cp ../../autostart.sh .

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed/temp/sbin # cp ../../autostop.sh .

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed/temp/sbin # chown 201:201 autostart.sh autostop.sh

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed/temp/sbin # chmod a=rx autostart.sh autostop.sh






ファイルvmware-autostart.shを変更し、自動起動スクリプト呼び出しをvmware_autostart_vms関数の末尾に追加し、自動起動スクリプトをvmware_autostop_vms関数の先頭に追加します。

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed/temp/sbin # chmod a+w vmware-autostart.sh

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed/temp/sbin # vi vmware-autostart.sh

# AutoStart vms if any ( Execute the subshell in the background )

vmware_autostart_vms() {

(

logger -t 'VMware[startup]' " Starting VMs"

-----8<------------------------------------------------------------------------

done # wait to start

) &



/sbin/autostart.sh



}

# AutoStop vms if any

vmware_autostop_vms() {

logger -t 'VMware[shutdown]' " Stopping VMs"



/sbin/autostop.sh



val=$("$VIMSH" -U $ROOT_USER $AUTOSTOP_CMD 2>&1 > /dev/null)

-----8<------------------------------------------------------------------------

fi

}






その後、権利を返却し、入れ子人形を梱包します。

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed/temp/sbin # chmod aw vmware-autostart.sh

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed/temp/sbin # cd ..

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed/temp # tar -cf ../tmp.tar *

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed/temp # cd ..

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed # vmtar -c tmp.tar -o tmp.vmtar

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed # gzip < tmp.vmtar > s.v00






最初にバックアップすることを忘れずに、アクセス許可をそのまま変更し、既存のファイルを私たちのものに置き換えます。

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed # chmod 700 s.v00

/vmfs/volumes/4f72a981-4f940db0-18e9-001517ecc0ed # cp -f s.v00 /bootbank/s.v00






以上で、再起動、確認、作業が完了しました。



All Articles