$TMPBACKUPNOLIST echo "$BACKUPDIR/backup-*-*.tar.bz2" >> $TMPBACKUPNOLIST #バックアップ世代数 BACKUPGENCNT=$(ls ${BACKUPDIR}/backup-*-1.tar.bz2 2>/dev/null |wc -l) if [ "$BACKUPGENCNT" -eq 0 ]; then BACKUPGENCNT=1 fi #バックアップ回数 BACKUPCNT=$(ls $BACKUPDIR/backup-${BACKUPGENCNT}-*.tar.bz2 2>/dev/null |wc -l) #バックアップ世代数が設定値かつ回数が設定値なら初代バックアップを削除し残りをリネーム if [ "$BACKUPGENCNT" -eq "$BACKUPGEN" ] && [ "$BACKUPCNT" -eq "$BACKUPNUM" ]; then for i in `seq 1 $BACKUPGENCNT` do if [ "$i" -eq 1 ]; then rm -f ${BACKUPDIR}/backup-${i}-*.tar.bz2 rm -f ${BACKUPDIR}/backup-${i}.snar else n=`expr $i - 1` for l in `seq 1 $BACKUPNUM` do mv ${BACKUPDIR}/backup-${i}-${l}.tar.bz2 ${BACKUPDIR}/backup-${n}-${l}.tar.bz2 done mv ${BACKUPDIR}/backup-${i}.snar ${BACKUPDIR}/backup-${n}.snar fi done BACKUPGENCNT=`expr $BACKUPGENCNT - 1` fi #バックアップ回数が設定値なら次世代へ if [ "$BACKUPCNT" -eq "$BACKUPNUM" ]; then BACKUPGENCNT=`expr $BACKUPGENCNT + 1` BACKUPCNT=1 else #カウントをインクリメント BACKUPCNT=`expr $BACKUPCNT + 1` fi # バックアップログファイル作成 rm -f $BACKUPLOG touch $BACKUPLOG chmod 400 $BACKUPLOG # インクリメントバックアップ実行 echo "`date` backup start" >> $BACKUPLOG tar cjvfP ${BACKUPDIR}/backup-${BACKUPGENCNT}-${BACKUPCNT}.tar.bz2 -g ${BACKUPDIR}/backup-${BACKUPGENCNT}.snar -T ${BACKUPLIST} -X ${TMPBACKUPNOLIST} >> ${BACKUPLOG} 2>&1 echo "`date` backup end" >> $BACKUPLOG # バックアップ対象外リスト削除 rm -f $TMPBACKUPNOLIST リストアするには tar jxfP /backup/backup-1-1.tar.bz2 -g /backup/backup-1.snar tar jxfP /backup/backup-1-2.tar.bz2 -g /backup/backup-1.snar ... アーカイブ順にリストアを行う cwRsyncによるwindows機からの同期 ここの情報は正しいとは限りません。私の記録のための情報です。 ITeF!xからcwRsyncをダウンロードしインストール。解凍したフォルダを適当なことろに置くだけ。 鍵ペアを作る ssh-keygen -t rsa -N "" id_rsaをc:\Users\user\.sshに置く id_rsa.pubをサーバーの/home/user/.ssh/authorized_keysに追加する。 cwrsync.cmdを参考にコマンドファイルserver-backup.cmdを作る。 @ECHO OFF REM CWRSYNC.CMD - Batch file template to start your rsync command (s). REM Make environment variable changes local to this batch file SETLOCAL REM ** CUSTOMIZE ** Specify where to find rsync and related files (C:\CWRSYNC) SET CWRSYNCHOME=C:\Users\user\Programs\cwRsync REM Set HOME variable to your windows home directory. That makes sure REM that ssh command creates known_hosts in a directory you have access. SET HOME=/cygdrive/c/Users/user SET CWOLDPATH=%PATH% SET PATH=%CWRSYNCHOME%;%PATH% SET USER=user SET SERVER=example.com rsync -avz -e "ssh -p 10022 -i %HOME%/.ssh/id_rsa" --delete %USER%@%SERVER%:/backup/ /cygdrive/c/server-backup/ > cwrsync.log # # サーバーsshのポートは10022に変更してある # id_rsaの場所を指定してある # cwRsyncでのwindowsのディレクトリは/cygdrive/形式である # サーバーの/backupディレクトリをc:\sever-backupに同期する # srver-backup.cmdファイルをwindowsタスクスケジューラーに登録する コントロールパネル - 管理ツール - タスクスケジューラー - 基本タスクの作成 サーバーにrsyncがなければインストールする。 yum install rsync 参考サイトStray Penguin " />
itoigawaのブログ
2014-08-18
前回の自動バックアップをインクリメンタル バックアップ にした
tarの-g オプションは前回の差分をバックアップしてくれる。-gオプションで指定したスナップショットファイルにはバックアップ時のディレクトリの状況が記録される。
リストアするにはこのスナップショットファイルを使い1回目のアーカイブから最後のアーカイブまで順にリストアしていく。
毎日自動実行するスクリプト この設定は6回インクリメント5世代合計30日分バックアップする。
ディスク量を減らそうとするならインクリメントの回数を増やし世代数を減らすと良い、ただしリストアの回数が増える
#!/bin/bash
# 2014/8/19
#
# ローカル内でバックアップ
#
LANG=C
#
# 設定開始
#
# バックアップ対象リスト名
# ※バックアップ対象をフルパスで記述したリスト
BACKUPLIST=/root/backuplist
[ ! -s $BACKUPLIST ] && echo "$BACKUPLIST is not found" && error_exit
# バックアップ対象外リスト名
# ※バックアップ対象外をフルパスで記述したリスト
BACKUPNOLIST=/root/backupnolist
# バックアップ先ディレクトリ名
BACKUPDIR=/backup
mkdir -p $BACKUPDIR
# インクリメントバックアップ回数
# 毎回フルバックアップの場合は1を指定する
BACKUPNUM=6
# バックアップを残す世代数
BACKUPGEN=5
# バックアップログファイル名
BACKUPLOG=/var/log/backup.log
#
# 設定終了
#
# バックアップファイルをバックアップ対象外リストに追加
# ※バックアップ先ファイルをバックアップしないようにする
TMPBACKUPNOLIST=`mktemp`
[ -s $BACKUPNOLIST ] && cat $BACKUPNOLIST > $TMPBACKUPNOLIST
echo "$BACKUPDIR/backup-*-*.tar.bz2" >> $TMPBACKUPNOLIST
#バックアップ世代数
BACKUPGENCNT=$(ls ${BACKUPDIR}/backup-*-1.tar.bz2 2>/dev/null |wc -l)
if [ "$BACKUPGENCNT" -eq 0 ]; then
BACKUPGENCNT=1
fi
#バックアップ回数
BACKUPCNT=$(ls $BACKUPDIR/backup-${BACKUPGENCNT}-*.tar.bz2 2>/dev/null |wc -l)
#バックアップ世代数が設定値かつ回数が設定値なら初代バックアップを削除し残りをリネーム
if [ "$BACKUPGENCNT" -eq "$BACKUPGEN" ] && [ "$BACKUPCNT" -eq "$BACKUPNUM" ]; then
for i in `seq 1 $BACKUPGENCNT`
do
if [ "$i" -eq 1 ]; then
rm -f ${BACKUPDIR}/backup-${i}-*.tar.bz2
rm -f ${BACKUPDIR}/backup-${i}.snar
else
n=`expr $i - 1`
for l in `seq 1 $BACKUPNUM`
do
mv ${BACKUPDIR}/backup-${i}-${l}.tar.bz2 ${BACKUPDIR}/backup-${n}-${l}.tar.bz2
done
mv ${BACKUPDIR}/backup-${i}.snar ${BACKUPDIR}/backup-${n}.snar
fi
done
BACKUPGENCNT=`expr $BACKUPGENCNT - 1`
fi
#バックアップ回数が設定値なら次世代へ
if [ "$BACKUPCNT" -eq "$BACKUPNUM" ]; then
BACKUPGENCNT=`expr $BACKUPGENCNT + 1`
BACKUPCNT=1
else
#カウントをインクリメント
BACKUPCNT=`expr $BACKUPCNT + 1`
fi
# バックアップログファイル作成
rm -f $BACKUPLOG
touch $BACKUPLOG
chmod 400 $BACKUPLOG
# インクリメントバックアップ実行
echo "`date` backup start" >> $BACKUPLOG
tar cjvfP ${BACKUPDIR}/backup-${BACKUPGENCNT}-${BACKUPCNT}.tar.bz2 -g ${BACKUPDIR}/backup-${BACKUPGENCNT}.snar -T ${BACKUPLIST} -X ${TMPBACKUPNOLIST} >> ${BACKUPLOG} 2>&1
echo "`date` backup end" >> $BACKUPLOG
# バックアップ対象外リスト削除
rm -f $TMPBACKUPNOLIST
tar jxfP /backup/backup-1-1.tar.bz2 -g /backup/backup-1.snar tar jxfP /backup/backup-1-2.tar.bz2 -g /backup/backup-1.snar ... アーカイブ順にリストアを行う
c:\Users\user\.ssh
に置く
@ECHO OFF
REM CWRSYNC.CMD - Batch file template to start your rsync command (s).
REM Make environment variable changes local to this batch file
SETLOCAL
REM ** CUSTOMIZE ** Specify where to find rsync and related files (C:\CWRSYNC)
SET CWRSYNCHOME=C:\Users\user\Programs\cwRsync
REM Set HOME variable to your windows home directory. That makes sure
REM that ssh command creates known_hosts in a directory you have access.
SET HOME=/cygdrive/c/Users/user
SET CWOLDPATH=%PATH%
SET PATH=%CWRSYNCHOME%;%PATH%
SET USER=user
SET SERVER=example.com
rsync -avz -e "ssh -p 10022 -i %HOME%/.ssh/id_rsa" --delete %USER%@%SERVER%:/backup/ /cygdrive/c/server-backup/ > cwrsync.log
#
# サーバーsshのポートは10022に変更してある
# id_rsaの場所を指定してある
# cwRsyncでのwindowsのディレクトリは/cygdrive/形式である
# サーバーの/backupディレクトリをc:\sever-backupに同期する
#