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