すべてが完璧で、必要なタスクは仮想化され、仮想マシンは適切に動作しましたが、その後、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
以上で、再起動、確認、作業が完了しました。