rsync - Backup Script

はじめに

"このファイルはいずれ使うと思うからバックアップしとこ"
なんて場当たり的にバックアップしたファイルは,大抵あとで思い出したいときに実は大して大事ではないものだったり,どこに保存したかわからなくなったり,何故バックアップしたのかわからない謎ファイルと化していたりすることが有る.

折角NFSサーバを作ったので適当にバックアップするスクリプトを書く.

heavymoon.hateblo.jp

スクリプト

バックアップリスト

バックアップリスト(Backup.list)を用意する. ディレクトリ末尾のスラッシュの扱いには注意が必要.

とりあえず一部のプロファイルだけを対象にした.

#############################
#
#   Backup List
#
#############################
#
#   Directory
#       /Path/To/Directory
#
#   Files and Directories Under The Path
#       /Path/To/Directory/
#
#   File
#       /Path/To/File
#
#############################

## HOME Profiles
/home/UserName/Desktop
/home/UserName/Documents
/home/UserName/Music
/home/UserName/Pictures
/home/UserName/Videos

バックアップスクリプト

rsyncするスクリプトを用意する. 内容は単にrsyncしているだけ.

#!/bin/bash
#################################################
#
#   Backup Script
#
#################################################
#
#   ABOUT
#   Backup Files and Directories
#
#################################################

## GlobalConfig #############
ScriptName=$(basename ${0})
ScriptPath=$(cd $(dirname ${0}) && pwd)
LogFile=/Path/To/LogFile

LogInfo () {
    echo "$(date '+%Y/%m/%d %T') [INFO] $@" | tee -a $LogFile
}
LogWarn () {
    echo "$(date '+%Y/%m/%d %T') [WARN] $@" | tee -a $LogFile
}
LogErr () {
    echo "$(date '+%Y/%m/%d %T') [ERR] $@" | tee -a $LogFile
    exit 1
}

## Init #####################
BackupList=/Path/To/Backup.list
if [ ! -f $BackupList ]; then
    LogErr "BackupList is missing. : $BackupList"
fi

BackupDir=/Path/To/Backup/Directory
if [ ! -d $BackupDir ]; then
    LogErr "BackupDir is missing. : $BackupDir"
fi

## Return Code
rc=0

## Main #####################
LogInfo "Start"

for Target in $(grep -v \# $BackupList); do
    LogInfo "Target: $Target"
    rsync -av --delete $Target $BackupDir --log-file $LogFile
    if [ $? -ne 0 ]; then
        LogWarn "rsync failed. : $Target"
        rc=1
    fi
done

LogInfo "End"
exit $rc

おわりに

今回は訳あってcron設定はしないけれど,場当たり的になバックアップは無くなるはず.

やはりRasPi-NFSはちと遅いな.