自分用メモ。
--link-destオプションを使って複数世代バックアップの容量を削減する。
rsync_backup.sh
#!/bin/bash
### ヘルプ表示 ###
if [ "x$1" = "x--help" -o "x$1" = "x-h" -o "x$1" = "x/?" ]; then
echo '[usage]:$ rsync_backup.sh [source directory] [destination directory]'
echo '[note]:引数に指定するディレクトリは絶対パスで指定し、末尾の"/"まで入力してください.'
exit 0
fi
### 引数のチェック (第一引数:バックアップ元ディレクトリ 第二引数:バックアップ先ディレクトリ) ###
if [ "x$1" = "x" -o "x$2" = "x" ]; then
echo "[error]:引数を指定してください."
echo "[usage]:nfsbackup.sh [バックアップ元ディレクトリ] [バックアップ先ディレクトリ]"
echo "[error]:処理を終了します."
exit 1
fi
### 引数が絶対パスで指定されていか確認(先頭に"/"が指定されているかチェック) ###
PATH1=$(echo $1 | cut -c 1)
PATH2=$(echo $2 | cut -c 1)
if [ ! "x${PATH1}" = "x/" -o ! "x${PATH2}" = "x/" ]; then
echo "[error]:引数に指定するディレクトリは絶対パスで指定してください."
echo "[error]:処理を終了します."
exit 1
fi
### 引数からバックアップ元、先のディレクトリを変数に格納 ###
# 引数の最後が"/"で指定されているかチェックし、されていない場合は"/"を追加する
SRCCHK=$(echo $1 | rev | cut -c 1)
DSTCHK=$(echo $2 | rev | cut -c 1)
if [ "x${SRCCHK}" = "x/" ]; then
BKSRC="$1"
else
BKSRC="$1/"
fi
if [ "x${DSTCHK}" = "x/" ]; then
DST="$2"
else
DST="$2/"
fi
### バックアップ元ディレクトリが存在するかチェックする ###
if [ ! -d ${BKSRC} ]; then
echo "[error]:指定したバックアップ元ディレクトリが存在しません."
echo "[error]:処理を終了します."
exit 1
fi
# バックアップ先ディレクトリを定義 #
BKDST="${DST}$(hostname)/$(date +%Y%m%d)/"
# バックアップログ出力先を定義 #
BKLOG="${DST}$(hostname)/$(date +%Y%m%d)_backup.log"
# 前日のバックアップ先ディレクトリ #
BKDSTTDB="${DST}$(hostname)/$(date -d '1day ago' +%Y%m%d)/"
### バックアップ先ディレクトリ作成 ###
mkdir -p ${BKDST}
### rsync実行 ###
echo "### Backup start at [ $(date -R) ] ###" >> ${BKLOG}
if [ ! -d ${BKDSTTDB} ]; then
rsync -av ${BKSRC} ${BKDST} >> ${BKLOG} 2>&1
else
rsync -av --link-dest=${BKDSTTDB} ${BKSRC} ${BKDST} >> ${BKLOG} 2>&1
fi
echo "### Backup end at [ $(date -R) ] ###" >> ${BKLOG}