2014/02/01

Linux rsyncで差分バックアップの実装

基本的な使い方
 $ rsync -av /コピー元 /コピー先
フルパスで行けた。

差分バックアップについては、
rsync -av --delete --link-dest=../<<比較元>> <<バックアップ元>> /<<バックアップ先>>
で行ける。(比較元のパスはバックアップ先から相対パスで指定すること

cronで毎日稼働させるようであれば、次のように修正して稼働させればよい。
既に先人が偉大な資料を残してくれているので、参考に作成した。


--link-dest コマンド:インクリメンタルバックアップ
ハードリンクを作ってくれるので、ディスク圧迫を防げるので、コマンド採用している。

Webエンジニア・インフラエンジニアゐくをの日常 様のほぼそのままです。

詳しくは、この方のWEBサイトを確認してください。


□□□□□□シェルスクリプトの内容ここから□□□□□□□

#!/bin/bash

# バックアップ先を指定
back_up_dir=/<<バックアップ先のディレクトリのパス>>/dailyBack
mkdir -p $back_up_dir

# バックアップログ名
backup_log=/<<ログを残すディレクトリ>>/log/rsync_backup.log
rm -f $backup_log
touch $backup_log
chmod 600 $backup_log

# エラー処理 あった方がよさそうなので、そのまま使わせて頂いた。
error_exit () {
exit 1
}

# バックアップ実行
echo "毎日のバックアップ開始" >> $backup_log
#このあたりは素敵な感じ。当初別の方法で書いたが、ゐくをさんの方法の方が分かりやすいので、パクった。
latest=`ls -t $back_up_dir | grep backup | head -1`
newly=`date +%Y%m%d`backup

mkdir $back_up_dir/$newly
rsync -av --delete --link-dest=../$latest /<<バックアップ元のディレクトリ>> $newly/$latest >>

#ここから下もそのまま利用させて頂いた。

$backup_log 2>&1
code=$?
if [ $code -ne 0 ]; then
    cat $backup_log | mail -s "BACKUP NG CODE IS $code" root
    rm -rf $back_up_dir/$newly
    error_exit
fi
echo "毎日のバックアップ完了" >> $backup_log


□□□□□□□□ここまで□□□□□□□□□

0 件のコメント:

コメントを投稿