$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 " />

itoigawabass

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
...  アーカイブ順にリストアを行う


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

2014-08-14 18:19:17

カテゴリー:サーバー
タグ: