Top / VMware / ESXi / バックアップ運用

うちのサーバ群も仮想化環境としておせわになってるVMware ESXiですが、バックアップの運用を真剣に考えなきゃと思い、着手し始めました。

いろいろググってみると

などを実現している方もいらっしゃるようですね。

いろいろ調べながら、うちでもやってみることにします。

ホットバックアップの基本的な考え方

さてホットバックアップの方法ですが、そもそもVMwareの仮想マシンはOS起動中はロックされていてコピー(バックアップ)することができないのですが、スナップショットを取ることによって、スナップショット時点までのファイルはロックが解放されファイルコピーができるようになります。スナップショットを取れば、それまでのファイルとそこからの変更分みたいなファイル形式になるって感じでしょうね。

なので、スナップショットを作成してバックアップを作成し、その後スナップショットを削除するっていう手順を行えばOKそうです。

手動で実行してみる

例として wwwというvm名の仮想マシンのバックアップをすることを考えてみます。その仮想マシンは、

/vmfs/volumes/esxiDisk/www/www.vmdk

にハードディスクのイメージがあり、そのディスクを

/vmfs/volumes/nfs/

へコピーします。一応、ファイル名は日付を付けて世代管理します。

さて実際の手順ですが、ESXiにログイン後*1、以下のコマンドでバックアップを取ることができます。

vim-cmd vmsvc/snapshot.create `vim-cmd vmsvc/getallvms| awk '/www/ {print $1;}'` forBackup
vmkfstools -i /vmfs/volumes/esxiDisk/www/www.vmdk -d monosparse /vmfs/volumes/nfs/www`TZ=JST-9 date '+%Y%m%d%H%M'`.vmdk
vim-cmd vmsvc/snapshot.remove `vim-cmd vmsvc/getallvms| awk '/www/ {print $1;}'`

実行するとスナップショットが作成されたことによってwww.vmdkのロックが解放されてファイルコピーができるようになり、バックアップ先のディレクトリに

/vmfs/volumes/nfs/www20090922.vmdk
/vmfs/volumes/nfs/www20090922-s001.vmdk

が作成されました。で、最後にスナップショットを削除して、元通りです。

うちの環境には同様にdbというVM名の仮想マシンもあるのですが、そっちも同様に以下のようなコマンドでバックアップが作成できます。

vim-cmd vmsvc/snapshot.create `vim-cmd vmsvc/getallvms| awk '/db/ {print $1;}'` forBackup
vmkfstools -i /vmfs/volumes/esxiDisk/db/db.vmdk -d monosparse /vmfs/volumes/nfs/db`TZ=JST-9 date '+%Y%m%d%H%M'`.vmdk 
vim-cmd vmsvc/snapshot.remove `vim-cmd vmsvc/getallvms| awk '/db/ {print $1;}'`

cronなどで自動化する

次は先のコマンドをshにしておいて、ESXi上のcronで定期的に実行すればよさそうです。とりあえずコマンドは

/vmfs/volumes/esxiDisk/backupServer.sh

においてchmod 755しておきます。

さてESXiでcronが利用できるかについてですが、

/var/spool/cron/crontabs/root

にはなにやらいろいろ書いてあるのでcron自体は使用できるみたいですが crontb -e とかでcronの設定の追加はできないようです。先のファイルに直接書いてもESXiを再起動すると失われてしまうようです。

結果として /etc/rc.localに以下のように記述して逃れることにします。

~ # cat /etc/rc.local 
#! /bin/ash
export PATH=/sbin:/bin
... 割愛 ... (元々いろいろ書いてあったモノはそのまま)

ln -s /vmfs/volumes/esxiDisk/backupServer.sh /sbin/backupServer.sh
# crontabs
cat<<_EOT_>>/var/spool/cron/crontabs/root
50 16 * * * /sbin/backupServer.sh    <-日本時間は25:50
_EOT_
kill -sigterm `ps|awk '/[c]rond/ {print $1;}'`
crond

このようにrc.local内で起動時にcron設定を追加し、crondを再起動することにします。

この項は(他の項もですが) AKI ON WEB: VMware ESXi 3.5のcrontabを(半ば強引に)使うの情報を思いきり参考にさせてもらいました!感謝です!

ESXi5.1だと/etc/rc.localが編集できなかったので

ESXiを5.1にUpdateしたところ、/etc/rc.localを編集できなくなってしまった*2ようなので、そんな場合は、/etc/rc.local.d/local.sh に同じ記述を追加することで対応しました。

関連リンク


この記事は

選択肢 投票
おもしろかった 70  
そうでもない 2  

Top / VMware / ESXi / バックアップ運用

現在のアクセス:170868


*1 ESXiへのログインはなどを参考にしてください
*2 Operation not permittedってなる

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS