Help us understand the problem. What is going on with this article?

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

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

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

hirohiro77
インフラ屋さんやってます。構成の設計とか、仮想サーバのお守とか、システムのマイナーアップデートとか、監視など。 [[ また、このサイトにおける掲載内容はあくまで私自身の見解であり、私の所属団体・企業における立場、戦略、意見を代表するものではありません ]]
opt
"INNOVATION AGENCY" を標榜するインターネット広告代理店。エンジニア組織 "Opt Techonologies" を中心にアドテクetc...に取り組んでいます。
https://opt-technologies.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした