LoginSignup
4
4

More than 3 years have passed since last update.

rsyncで世代管理バックアップ(--link-destオプションを使用)

Posted at

自分用メモ。
--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}
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4