*[RN214]自前でバックアップジョブを設定

ReadyNASは標準でバックアップ機能を備えている
ascii.jp

ネットを介してのリモートバックアップ、USB/eSATA接続の
外付けHDDへのローカルバックアップが選べるようになっているのだが、
困るのがローカルバックアップで単純なミラーリングができないこと
例えばAと言うファイル/フォルダを作成しバックアップ、
その後にA'にリネームすると外付けHDDにはAとA'の二つができてしまう

バックアップにはフルバックアップと差分バックアップのモードが
あるのだが、前述の現象を回避するには定期的にフルバックアップを
行い、その際にオプション設定できる全消去を有効にするしかない
データが少量なうちは良いだろうが、数TBのフルバックアップを
定期的に行うのは時間とハードウェアの負担が増えてしまう

仕方が無いので自分でrsyncを使ったシェルスクリプト書いて
cronに登録することにした

virtualimentさんのこちらを参考にさせていただいた
よく考えられたスクリプトを提示してくれているので大変助かりましたm(__)m
www.virment.com


単純なミラーリングで良いので世代管理はオミット
ログはたまに確認できれば良いのでメール送信はやめログファイルを残すようにした

#!/bin/bash
 
# バックアップ元
SOURCEDIR="/data/BACKUP/USERDATA /data/BACKUP/@Macrium"

# バックアップ先
DESTDIR=/media/USB_HDD_1

# rsyncオプション
OPTION="-rtv --delete --inplace"

# ログファイル
TMPLOG=/data/BACKUP/rsync.log
 
# ログファイルの存在チェック。存在しなければ作成
if [ ! -e $TMPLOG ]; then
    echo "$TMPLOG NOT found." >> $TMPLOG
    touch $TMPLOG # touchコマンドを利用してログ用の空ファイルを作成
    echo -e "$TMPLOG was created.\n" >>$TMPLOG
    # 「-e」はエスケープコード(\nなど)を使用可能にするためのオプション
fi
 
echo "`date` backup start" >> $TMPLOG
 
# 実行するrsyncコマンドをログに残す
echo -e "command is rsync $OPTION $SOURCEDIR $DESTDIR \n" >> $TMPLOG
 
# rsyncを実行
rsync $OPTION $SOURCEDIR $DESTDIR >> $TMPLOG 2>&1 

code=$?
 
# $codeが0でない場合の処理(正常終了でない場合)
if [ $code -ne 0 ]; then
  echo -e "Error\n" >> $TMPLOG
  exit 1
fi
 
echo -e "`date` backup end  \n" >> $TMPLOG


crontab -lで確認しても何も登録がなかったので
crontab -u root -eでそのまま追加(修正)

<毎日20:30実行>

30 20 * * * /usr/bin/rsyncbackup.sh > /dev/null 2>&1


チェックするファイル/フォルダ数に依存するが、何も変更がなければ1分足らずで終了
<ログ>

Mon Oct 21 20:30:06 JST 2019 backup start
command is rsync -rtv --delete --inplace /data/BACKUP/USERDATA /data/BACKUP/@Macrium /media/USB_HDD_1 

sending incremental file list

sent 36,796 bytes  received 97 bytes  3,883.47 bytes/sec
total size is 3,657,511,027,223  speedup is 99,138,346.77
Mon Oct 21 20:30:33 JST 2019 backup end