サーバミラーリングデータを世代管理圧縮保存!

Updated:


うちの稼動中のサーバの大事なデータを玄箱HG(Fedora10)へミラーリングコピーしているんですが、そいつらを世代管理して圧縮保存するようにしてみました。 ※なぜなら、サーバがトラブった時、「あの日に戻れたら!」なんてことがあるからです。

導入手順

※いつものように Fedoraで自宅サーバー構築自動バックアップ運用(tar+GnuPG+rsync/ftp) を参考にさせてもらいました。

【前提条件】 ・実サーバはFedora10でWebサーバ、メールサーバ、FTPサーバ等が稼動中。 ・バックアップ側もFedora10で、NTPサーバ、Sambaサーバが稼動中。 ・実サーバのIPアドレスは 192.168.11.3 、バックアップ側(玄箱HG)のIPアドレスは 192.168.11.2 。 ・実サーバ、バックアップ側(玄箱)どちらも「 Poderosa 」によるリモート接続による操作。 (実サーバはSSH2接続・鍵認証、バックアップ側(玄箱HG)はSSH2接続・パスワード認証) ・実サーバの大事なデータを玄箱側の「 /tmp/mirror 」フォルダ配下へミラーリングコピーするように設定済み。

※今回は全て、バックアップ(玄箱HG)での作業です。

1.玄箱HGにリモート接続

「 Poderosa 」により 玄箱HG・Fedora10 にリモート接続し、rootユーザになっておく。

2.圧縮スクリプトを作成

以下のように世代管理して圧縮保存するスクリプトを作成する。

[root@KURO-BOX ~]# vi backup.sh

#!/bin/bash

#
# ローカル内でバックアップ
#

LANG=C

#
# 設定開始
#

# 圧縮対象リスト名
# ※圧縮対象をフルパスで記述したリスト
BACKUPLIST=/root/backuplist
[ ! -s $BACKUPLIST ] && echo "$BACKUPLIST is not found" && error_exit

# 圧縮対象外リスト名
# ※圧縮対象外をフルパスで記述したリスト
BACKUPNOLIST=/root/backupnolist

# 圧縮先ディレクトリ名
BACKUPDIR=/backup
mkdir -p $BACKUPDIR

# 圧縮ファイル保存世代数
# ※当日分を含めた過去分圧縮ファイルを保存する世代数
# ※過去分圧縮ファイルを保存しない場合は1を指定する
BACKUPGEN=8

# 暗号化・復号化パスフレーズ
# ※指定がないときは暗号化しない
PASS=''

# 圧縮ログファイル名
BACKUPLOG=/var/log/backup.log

#
# 設定終了
#

# 異常終了処理関数定義
error_exit () {
    rm -f $TMPBACKUPNOLIST
    exit 1
}

# 圧縮ファイルを圧縮対象外リストに追加
# ※圧縮先ファイルを圧縮しないようにする
TMPBACKUPNOLIST=`mktemp`
[ -s $BACKUPNOLIST ] && cat $BACKUPNOLIST > $TMPBACKUPNOLIST
echo "$BACKUPDIR/*backup.tar.bz2" >> $TMPBACKUPNOLIST

# 前回圧縮をリネーム
cd $BACKUPDIR
OLDBACKUPFILE=`ls backup.tar.bz2* 2>/dev/null`
if [ -f $OLDBACKUPFILE ]; then
    TIMESTAMP=`ls --full-time $OLDBACKUPFILE|awk '{print $6}'|tr -d -`
    mv $BACKUPDIR/$OLDBACKUPFILE $BACKUPDIR/${TIMESTAMP}$OLDBACKUPFILE > /dev/null 2>&1
fi

# 圧縮ログファイル作成
rm -f $BACKUPLOG
touch $BACKUPLOG
chmod 400 $BACKUPLOG

# 圧縮実行
echo "`date` backup start" >> $BACKUPLOG
tar cjvfP $BACKUPDIR/backup.tar.bz2 -T $BACKUPLIST -X $TMPBACKUPNOLIST >> $BACKUPLOG 2>&1

echo "`date` backup end" >> $BACKUPLOG

# 圧縮暗号化(暗号化・復号化パスフレーズ指定時のみ)
if [ ! -z $PASS ]; then
    echo "`date` encrypt start" >> $BACKUPLOG
    mkdir -p $HOME/.gnupg
    echo $PASS|gpg --passphrase-fd 0 --batch -c $BACKUPDIR/backup.tar.bz2 > /dev/null 2>&1
	code=$?
	if [ $code -ne 0 ]; then
	    cat $BACKUPLOG | mail -s "BACKUP NG CODE IS $code" root
	    rm -f $BACKUPDIR/backup.tar.bz2*
	    error_exit
	fi
    rm -f $BACKUPDIR/backup.tar.bz2
    echo "`date` encrypt end" >> $BACKUPLOG
fi

# 圧縮ファイル保存世代を超えた古い圧縮ファイルを削除
if [ $(ls $BACKUPDIR/*backup.tar.bz2*|wc -l) -gt $BACKUPGEN ]; then
    OLDBACKUPCNT=`expr $(ls $BACKUPDIR/*backup.tar.bz2*|wc -l) - $BACKUPGEN`
    for file in `ls -t $BACKUPDIR/*backup.tar.bz2*|tail -n $OLDBACKUPCNT`
    do
        rm -f $file
    done
fi

# 圧縮対象外リスト削除
rm -f $TMPBACKUPNOLIST

[root@KURO-BOX ~]#

3.実行権限付与

以下のようにしてスクリプトに実行権限を付与する。

[root@KURO-BOX ~]# chmod 700 backup.sh
[root@KURO-BOX ~]#

4.圧縮対象リストの作成

今回圧縮保存の対象となるフォルダをしていする。

[root@KURO-BOX ~]# echo "/tmp/mirror" >> backuplist
[root@KURO-BOX ~]#

※今回は圧縮保存対象外リストは作成しない。 (「 /tmp/mirror 」配下は全て圧縮したいので)

5.スクリプトの試行

以下のようにしてスクリプトを試しに実行してみる。

[root@KURO-BOX ~]# ./backup.sh
[root@KURO-BOX ~]#

6.圧縮ファイル作成確認

正常に圧縮ファイルが作成されているか確認する。

[root@KURO-BOX ~]# ls -lh /backup
[root@KURO-BOX ~]#

7.圧縮内容確認

圧縮ファイルの内容を確認してみる。

[root@KURO-BOX ~]# tar tjvf /backup/backup.tar.bz2
・・・ 省略 ・・・
圧縮ファイルの内容が表示される
・・・ 省略 ・・・
[root@KURO-BOX ~]#

8.定期自動実行設定

毎日同じ時間に定期的に自動で実行されるよう設定する。

[root@KURO-BOX ~]# echo "0 3 * * * root /root/backup.sh" > /etc/cron.d/backup
[root@KURO-BOX ~]#

※しかし、上記ので試行してみたんですが、1時間経っても終わりませんでした。 玄箱HGの非力なCPUとメモリのせいだと思います。

結局、玄箱HGでの圧縮保存はヤメにしました。

今日はここまで。 じゃ。





 

Sponsored Link

 

Comments