VMwareのデータストアとして、SATA接続のSSDの他に、
ゲストマシンのFreeNASサーバ上にある6TBのZFS-RAIDプールを
iSCSIでマウントして使ってます。


この構成だと、VMwareの起動が完了してもFreeNASが立ち上がっていない為、
iSCSI接続に失敗してしまいます。
このサーバは毎日使用後に電源を落としているので、
わざわざ起動後に手動でiSCSIターゲットを再スキャンしてました。
これは面倒臭い・・・。


VMwareのiSCSI設定で、リスキャンの回数を増やしたり、
タイムアウト時間を長めにとったりすればいいんでしょうが、
どうにも設定の場所が見つけられません(´Д⊂ヽ


いつまでもこの運用にしておくのは格好悪いので、
なれないLinuxコマンドを駆使してなんとかしてみることにしました。
具体的には、

1.iSCSIターゲットを再スキャンするシェルスクリプトを準備
2.cronへ1.のスクリプトを装置起動5分後に実行するよう登録



この2つで実現します。


1.スクリプトの準備

iSCSIターゲットを再スキャンするコマンドは以下になります。
(実際はiSCSIだけじゃなくてストレージ全部の再スキャンだと思いますが)

esxcli storage core adapter rescan --all


これを/vmfs/volumes/データストア名/の場所にiscsirescan.shとして作成しました。


vi /vmfs/volumes/データストア名/iscsirescan.sh
esxcli storage core adapter rescan --all ←貼り付け



これだけだと実行した時パーミッションがどうだとか怒られたので、

chmod 755 /vmfs/volumes/データストア名/iscsirescan.sh


これで動くようです。未だにchmodの数字の意味が分かってない。。



2.cronへの登録

ネットで色々調べてみると、VMwareでcronを使うときは、
どうも普通のCentos等の操作と違うようですね。
参考にしたページ:OSSでLinuxサーバ構築 【ESXi 5.0】仮想マシンのオンラインバックアップ

このバックアップスクリプトの設定を真似て、以下のように書いてみました。


vi /etc/rc.local
#!/bin/sh

export PATH=/sbin:/bin

log() {
echo "${1}"
/bin/busybox logger init "${1}"
}

# execute all service retgistered in ${rcdir} ($1 or /etc/rc.local.d)
if [ -d "${1:-/etc/rc.local.d}" ] ; then
for filename in $(find "${1:-/etc/rc.local.d}" | /bin/busybox sort) ; do
if [ -f "${filename}" ] && [ -x "${filename}" ]; then
log "running ${filename}"
"${filename}"
fi
done
fi
※注 この下から行を追加
/bin/kill $(cat /var/run/crond.pid)   ※1
mm=`date +"%M"`           ※2
if [ $mm -gt 57 ] ; then
mm=`expr $mm - 58`
else
mm=`expr $mm + 2`
fi
hh=`date +"%H"`
DD=`date +"%d"`
MM=`date +"%m"`
/bin/echo "$mm $hh $DD $MM * /vmfs/volumes/データストア名/iscsirescan.sh" >> /var/spool/cron/crontabs/root     ※3
/bin/busybox crond           ※4



※1 cronプロセスをkillでstopさせてる。はず。
※2 現時刻の「分」を取得し、
    58分以上だったら-58
    57分以下だったら+2
   にセットします。
※3 rc.local実行時の時間から2分後にiscsirescan.shを実行するよう、
   /var/spool/cron/crontabs/rootに追記
※4 cronのプロセスをstart


VMware再起動後にデータストアが接続されているのを確認したので、
たぶん動いているはず。
57分とか58分とか、「時」をまたぐタイミングでの動作確認をしてないので、
まだ確実では無いかもしれません。
しばらく様子をみてみます。