バックアップスクリプトを書く

/usr/local/bin/backupに以下のスクリプトを作成

#!/bin/sh
USAGE=`cat <<EOF
Usage backup [option] \n
  -v:  Verbose mode. \n
  -d:  Delete extraneous files from destination dirs. \n
  -h:  Show this help.
EOF`

DEST_HOST=ホスト名(IPアドレスでもいい)
DEST_USER=ユーザー名
DEST_DIR="/home/$DEST_USER/backup/"
PING='/bin/ping'
AWK='/usr/bin/awk'
GREP='/bin/grep'
# host check
PACKET_LOSS=`$PING -c 1 $DEST_HOST | $GREP 'packets' | $AWK '{print $6}'`
if [ "$PACKET_LOSS" != '0%' ];then
    exit
fi

RSYNC='/usr/bin/rsync'
SSH='/usr/bin/ssh'
SSH_KEY=SSHキーのパス。あらかじめssh-copy-idしておく必要あり

EXCLUDE_LIST=`cat << EOF
/user/.local/share/Trash
/user/.mozilla/firefox/brl53l0e.development/Cache
EOF`
for EXCLUDE in $EXCLUDE_LIST; do
    EXCLUDES="$EXCLUDES --exclude='$EXCLUDE'"
done
GETOPT='/usr/bin/getopt'
RSYNC_OPT='--timeout=60 -az'
for OPT in `$GETOPT 'vhd' $*`;do
    case $OPT in
        '-h')
            echo $USAGE
            exit
            ;;
        '-v')
            RSYNC_OPT="${RSYNC_OPT}v"
            ;;
        '-d')
            DELETE_FLAG=1
            ;;
    esac
done

if [ "1" = "$DELETE_FLAG" ];then
    RSYNC_OPT="$RSYNC_OPT --delete"
fi

TARGETS='/etc /home/user'
for TARGET in $TARGETS;do
   $RSYNC $RSYNC_OPT $EXCLUDES -e "$SSH -i $SSH_KEY" $TARGET ${DEST_USER}@${DEST_HOST}:${DEST_DIR}
done

除外するディレクトリEXCLUDE_LISTで指定できる。
たまにdオプションを渡して起動すると余計なファイルが掃除できる仕様。


これをシャットダウンの時に起動するようにする

$ sudo chmod 744 /usr/local/bin/backup
$ sudo ln -s /usr/local/bin/backup /etc/init.d/
$ sudo update-rc.d backup stop 0 0 .