LoginSignup
23
30

More than 3 years have passed since last update.

VMware ESXiでコマンドやスクリプトを定期実行させる方法&オンラインバックアップ

Last updated at Posted at 2017-01-31

VMware ESXiのフリーライセンスで運用する場合の覚書(cronとオンラインバックアップ)
(vSphere Hypervisor 6.7でも同様の手順で設定できました)

standerdライセンス以上ならvMotionが使えるのでバックアップなどはそちらに任せたほうがいいのだが、
フリーライセンスの場合、最小限の仮想化以外の機能が使えないため、cronを使ってバックアップを組むことにした。

だが、ESXiにはcrontabコマンドが存在していないため、
cronを利用する場合は設定ファイルである「/var/spool/cron/crontabs/root」を直接編集する必要がある。
内部書式自体は通常のcronの書式で問題ない。

また、これらの設定も再起動後にはクリアされてしまうため、ESXiの再起動後にも設定を有効にする場合は、
再起動と同時に上記設定ファイルに設定を再度書き込むようにする。

ESXi本体にはsshで接続する、接続はチャレンジレスポンスで行う必要がある点に注意

ESXi再起動後も設定を保持させるように、カーネル読み込み時に実行される
/etc/rc.local.d/local.sh
に細工する。

~ # vi /etc/rc.local.d/local.sh

#!/bin/sh

# local configuration options

# Note: modify at your own risk! If you do/use anything in this
# script that is not part of a stable API (relying on files to be in
# specific places, specific tools, specific output, etc) there is a
# possibility you will end up with a broken system after patching or
# upgrading. Changes are not supported unless under direction of
# VMware support.

/bin/echo "* * * * * cronで実行させたいコマンド" >> /var/spool/cron/crontabs/root
/bin/kill $(cat /var/run/crond.pid)
/bin/busybox crond

exit 0

コメント行が終了した直後の一行目にあるように、「/var/spool/cron/crontabs/root」に設定を書き込ませるような記述を行う

実際のバックアップには、仮想マシンを無停止でバックアップできる、無料ツール[ghettoVCB]を使用する
入手先は以下から

ghettoVCB
https://github.com/lamw/ghettoVCB

設定
まず、ESXiのハイパーバイザにsshでログインして、データストア(ここではdatastore1)にbackupディレクトリを作る

cd /vmfs/volumes/datastore1
mkdir backup
cd backup

ハイパーバイザ内にはgitコマンドがないので、wgetでmaster.zipを落とす

wget https://github.com/lamw/ghettoVCB/archive/master.zip -o ghettoVCB-master.zip
unzip ghettoVCB-master.zip

展開すると以下のような感じに

Archive:  ghettoVCB-master.zip
   creating: ghettoVCB-master/
  inflating: ghettoVCB-master/README
  inflating: ghettoVCB-master/ghettoVCB-restore.sh
  inflating: ghettoVCB-master/ghettoVCB-restore_vm_restore_configuration_template
  inflating: ghettoVCB-master/ghettoVCB-vm_backup_configuration_template
  inflating: ghettoVCB-master/ghettoVCB.conf
  inflating: ghettoVCB-master/ghettoVCB.sh

バックアップに関する詳細を設定するためghettoVCB.shを編集します。

# vi ghettoVCB.sh

# バックアップ先のデータストア(NFSでほかのサーバをマウントしておく)およびフォルダを指定
VM_BACKUP_VOLUME=/vmfs/volumes/nfs/backup

# バックアップファイルのフォーマットを指定
DISK_BACKUP_FORMAT=thin

# バックアップの世代数を設定
VM_BACKUP_ROTATION_COUNT=3

上記が必要最低限の設定になります。実際に設定できる項目は上記以外にも多数ありますがここでは割愛します。

バックアップの実行

続いてバックアップ対象とする仮想マシンのリストファイルを作成します。これはスクリプトの実行時に引数としてファイル名を渡しますのでファイル名は任意のもので構いません。以下ではvmlist.txtとして作成しています。内部には仮想マシン名を書きます

# vi vmlist.txt

web001
web002
db001

ここまできたら手動でバックアップを実行してみます。最初にスナップショットが作成されクローンが開始されます。

./ghettoVCB.sh -f ./vmlist.txt

するとこんな感じに

Logging output to "/tmp/ghettoVCB-2017-01-30_11-25-03-38093.log" ...
2017-01-30 11:25:04 -- info: \
============================== ghettoVCB LOG START ==============================
2017-01-30 11:25:04 -- info: CONFIG - VERSION = 2013_26_11_2
2017-01-30 11:25:04 -- info: CONFIG - GHETTOVCB_PID = 38093
2017-01-30 11:25:04 -- info: CONFIG - VM_BACKUP_VOLUME = /vmfs/volumes/nfs/backup
2017-01-30 11:25:04 -- info: CONFIG - VM_BACKUP_ROTATION_COUNT = 3
2017-01-30 11:25:04 -- info: CONFIG - VM_BACKUP_DIR_NAMING_CONVENTION = 2017-01-30_11-25-03
2017-01-30 11:25:04 -- info: CONFIG - DISK_BACKUP_FORMAT = thin
2017-01-30 11:25:04 -- info: CONFIG - POWER_VM_DOWN_BEFORE_BACKUP = 0
2017-01-30 11:25:04 -- info: CONFIG - ENABLE_HARD_POWER_OFF = 0
2017-01-30 11:25:04 -- info: CONFIG - ITER_TO_WAIT_SHUTDOWN = 3
2017-01-30 11:25:04 -- info: CONFIG - POWER_DOWN_TIMEOUT = 5
2017-01-30 11:25:04 -- info: CONFIG - SNAPSHOT_TIMEOUT = 15
2017-01-30 11:25:04 -- info: CONFIG - LOG_LEVEL = info
2017-01-30 11:25:04 -- info: CONFIG - BACKUP_LOG_OUTPUT = \
/tmp/ghettoVCB-2017-01-30_03-25-03-38093.log
2017-01-30 11:25:04 -- info: CONFIG - ENABLE_COMPRESSION = 0
2017-01-30 11:25:04 -- info: CONFIG - VM_SNAPSHOT_MEMORY = 0
2017-01-30 11:25:04 -- info: CONFIG - VM_SNAPSHOT_QUIESCE = 0
2017-01-30 11:25:04 -- info: CONFIG - ALLOW_VMS_WITH_SNAPSHOTS_TO_BE_BACKEDUP = 0
2017-01-30 11:25:04 -- info: CONFIG - VMDK_FILES_TO_BACKUP = all
2017-01-30 11:25:04 -- info: CONFIG - VM_SHUTDOWN_ORDER =
2017-01-30 11:25:04 -- info: CONFIG - VM_STARTUP_ORDER =
2017-01-30 11:25:04 -- info: CONFIG - RSYNC_LINK = 0
2017-01-30 11:25:04 -- info: CONFIG - EMAIL_LOG = 0
2017-01-30 11:25:04 -- info:
2017-01-30 11:25:09 -- info: Initiate backup for web001
2017-01-30 11:25:09 -- info: Creating Snapshot "ghettoVCB-snapshot-2017-01-30" for web001
Destination disk format: VMFS thin-provisioned
Cloning disk '/vmfs/volumes/datastore1/web001/web001_3.vmdk'...
Clone: 98% done.
Destination disk format: VMFS thin-provisioned
Cloning disk '/vmfs/volumes/datastore1/web001/web001.vmdk'...
Clone: 98% done.
2017-01-30 11:31:19 -- info: Removing snapshot from web001 ...
2017-01-30 11:31:20 -- info: Backup Duration: 6.18 Minutes
2017-01-30 11:31:20 -- info: Successfully completed backup for web001!
2017-01-30 11:31:23 -- info: ###### Final status: All VMs backed up OK! ######
2017-01-30 11:31:23 -- info: \
============================== ghettoVCB LOG END ================================

うまく実行されるのを確認したら、cronに組み込みます

まず、再起動した場合にも設定が消えないように
/etc/rc.local.d/local.sh
に記述

vi /etc/rc.local.d/local.sh

/bin/echo "0 22 * * * /bin/sh /vmfs/volumes/datastore1/backup/ghettoVCB-master/ghettoVCB.sh -f /vmfs/volumes/datastore1/backup/ghettoVCB-master/vmlist.txt" >> /var/spool/cron/crontabs/root
/bin/kill $(cat /var/run/crond.pid)
/bin/busybox crond

次に、cronにも設定

vi /var/spool/cron/crontabs/root

0 22 * * * /bin/sh /vmfs/volumes/datastore1/backup/ghettoVCB-master/ghettoVCB.sh -f /vmfs/volumes/datastore1/backup/ghettoVCB-master/vmlist.txt

とりあえず、これで万が一仮想ホストがトラブっても日次バックアップまでは復帰できる。

23
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
30