[さくらVPS]centos6の環境にlxcを構築する 5 – lxcコンテナのバックアップ


yokohama96x96みなさんこんにちは。lxc、楽しいですねー。せっかく構築したlxc、きちんとバックアップしてみませんか?サーバのバックアップはこちらのエントリーがよく参考にしていただいているようですが、ホストOSからlxcコンテナへはssh接続しなくてもアクセスできるので、もう少しシンプルにバックアップができるのです。

こちらの記事を参考にlxcをインストールすると、/var/lib/lxc/ 以下をまるごとバックアップでもOKですが、再インストールして復旧できるファイルまで毎回バックアップするのも非効率です。そこで、 /etc /home /var/log をバックアップするスクリプトを書いてみました。

コンテナのリストをメンテナンスしたり取得したりしてバックアップ対象を決めているので、こちらの記事に書いたシェルスクリプトがあることを前提としています。

#!/bin/bash
LANG=C
set -e

LXCDIR=/var/lib/lxc
BACKUPDIR=${HOME}/BACKUP
LOGDIR=${HOME}/logs

[ ! -d ${LOGDIR} ] && mkdir -p ${LOGDIR}
LXCMAINTE mainte

for A in $(echo $(LXCMAINTE list) | awk 'BEGIN {FS="disables"} {print $1}' | awk 'BEGIN {FS="actives"} {print $2}')
do
  echo "################ $A $(date '+%Y/%m/%d %H:%M:%S') BACKUP ###############"
  [ ! -d ${BACKUPDIR}/${A} ] && mkdir -p ${BACKUPDIR}/${A}
  for B in home etc
  do
    sudo rsync -av --delete ${LXCDIR}/${A}/rootfs/${B} ${BACKUPDIR}/${A}
  done
  for C in var/log
  do
    sudo rsync -av --delete ${LXCDIR}/${A}/rootfs/${C} ${BACKUPDIR}/${A}/var
  done
  echo
done >>${LOGDIR}/$(basename $0)_$(date +%Y%m%d).log

最初に LXCMAINTE コマンドの mainte オプションで、コンテナのリストを更新しています。ここの処理で、コンテナの起動停止のステータスを最新化されます。

次に、for文の変数「A」にアクティブなコンテナのリストを代入します。実際にここのコマンドを実行してみると、vmが2台動いている場合、こうなります。

[ (っ´∀`)っ@友の会 ~]$ echo $(LXCMAINTE list) | awk 'BEGIN {FS="disables"} {print $1}' | awk 'BEGIN {FS="actives"} {print $2}'
 vm0 vm1

あとは、入れ子にしたfor文のループBで /home と /etc を、 ループCで /var/log をバックアップし、${HOME}/logs/YYYYMMDD.log にログを記録しています。

ね、簡単でしょ?

[amazonjs asin="4822262731" locale="JP" title="すべてわかる仮想化大全2013 (日経BPムック)"]