うちのサーバ群も仮想化環境としておせわになってる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;}'`
次は先のコマンドを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を(半ば強引に)使うの情報を思いきり参考にさせてもらいました!感謝です!
ESXiを5.1にUpdateしたところ、/etc/rc.localを編集できなくなってしまった*2ようなので、そんな場合は、/etc/rc.local.d/local.sh に同じ記述を追加することで対応しました。
この記事は
現在のアクセス:170870