温故知新 linux実践講座

温故知新 linux実践講座

温故知新。linuxを使いこなしてみよう。

ホーム » コマンド入門 » rsync でバックアップ

— 広告 —


— 広告 —

rsync でバックアップ

所要時間 約 9分

rsync は,ファイルやディレクトリをバックアップ/同期するための人気のあるツールです。変更分を検出して差分のみを転送することで、ネットワーク経由でも効率的にバックアップ/同期が行える点や、sshなどのリモートシェル経由での利用が可能です。

 rsync [オプション] コピー元 コピー先

コピー元のディレクトリ名の扱い

rsync -av ~/hoge /mnt/backupdisk
 hogeディレクトリのなかみと、そのディレクトリ自体がコピーされる。
rsync -av ~/hoge/ /mnt/backupdisk
 hogeディレクトリの中身はコピーされるが、ディレクトリはこぴーされない。

リモートホストへのバックアップ/同期

$ rsync -av ~/hoge  backupuser@hogehoge.com:/backupdir/

●同期する

$ rsync -av --delete ~/hoge backupuser@hogehoge.com:/backupdir/

●WindowsからLinuxへrsyncすると日本語が化ける

$ rsync -avzu --iconv=CP932,UTF-8 src dest

rsync 以外の自動バックアップ スクリプト

バックアップスクリプト:参照元 自動バックアップ運用(tar+GnuPG+rsync/ftp)

[root@centos ~]# vi backup.sh ← バックアップスクリプト作成
#!/bin/bash
 
#
# ローカル内でバックアップ
#
 
LANG=C
 
#
# 設定開始
#
 
# バックアップ対象リスト名
# ※バックアップ対象をフルパスで記述したリスト
BACKUPLIST=/root/backuplist
[ ! -s $BACKUPLIST ] && echo "$BACKUPLIST is not found" && error_exit
 
# バックアップ対象外リスト名
# ※バックアップ対象外をフルパスで記述したリスト
BACKUPNOLIST=/root/backupnolist
 
# バックアップ先ディレクトリ名
BACKUPDIR=/backup
mkdir -p $BACKUPDIR
 
# バックアップ保存世代数
# ※当日分を含めた過去分バックアップを保存する世代数
# ※過去分バックアップを保存しない場合は1を指定する
BACKUPGEN=8
 
# 暗号化・復号化パスフレーズ
# ※指定がないときは暗号化しない
PASS=''
 
# バックアップログファイル名
BACKUPLOG=/var/log/backup.log
 
#
# 設定終了
#
 
# 異常終了処理関数定義
error_exit () {
    rm -f $TMPBACKUPNOLIST
    exit 1
}
 
# バックアップファイルをバックアップ対象外リストに追加
# ※バックアップ先ファイルをバックアップしないようにする
TMPBACKUPNOLIST=`mktemp`
[ -s $BACKUPNOLIST ] && cat $BACKUPNOLIST > $TMPBACKUPNOLIST
echo "$BACKUPDIR/*backup.tar.bz2" >> $TMPBACKUPNOLIST
 
# 前回バックアップをリネーム
cd $BACKUPDIR
OLDBACKUPFILE=`ls backup.tar.bz2* 2>/dev/null`
if [ -f $OLDBACKUPFILE ]; then
    TIMESTAMP=`ls --full-time $OLDBACKUPFILE|awk '{print $6}'|tr -d -`
    mv $BACKUPDIR/$OLDBACKUPFILE $BACKUPDIR/${TIMESTAMP}$OLDBACKUPFILE > /dev/null 2>&1
fi
 
# バックアップログファイル作成
rm -f $BACKUPLOG
touch $BACKUPLOG
chmod 400 $BACKUPLOG
 
# バックアップ実行
echo "`date` backup start" >> $BACKUPLOG
tar cjvfP $BACKUPDIR/backup.tar.bz2 -T $BACKUPLIST -X $TMPBACKUPNOLIST >> $BACKUPLOG 2>&1
code=$?
if [ $code -ne 0 ]; then
    cat $BACKUPLOG | mail -s "BACKUP NG CODE IS $code" root
    rm -f $BACKUPDIR/backup.tar.bz2
    error_exit
fi
echo "`date` backup end" >> $BACKUPLOG
 
# バックアップ暗号化(暗号化・復号化パスフレーズ指定時のみ)
if [ ! -z $PASS ]; then
    echo "`date` encrypt start" >> $BACKUPLOG
    mkdir -p $HOME/.gnupg
    echo $PASS|gpg --passphrase-fd 0 --batch -c $BACKUPDIR/backup.tar.bz2 > /dev/null 2>&1
	code=$?
	if [ $code -ne 0 ]; then
	    cat $BACKUPLOG | mail -s "BACKUP NG CODE IS $code" root
	    rm -f $BACKUPDIR/backup.tar.bz2*
	    error_exit
	fi
    rm -f $BACKUPDIR/backup.tar.bz2
    echo "`date` encrypt end" >> $BACKUPLOG
fi
 
# バックアップ保存世代を超えた古いバックアップを削除
if [ $(ls $BACKUPDIR/*backup.tar.bz2*|wc -l) -gt $BACKUPGEN ]; then
    OLDBACKUPCNT=`expr $(ls $BACKUPDIR/*backup.tar.bz2*|wc -l) - $BACKUPGEN`
    for file in `ls -t $BACKUPDIR/*backup.tar.bz2*|tail -n $OLDBACKUPCNT`
    do
        rm -f $file
    done
fi
 
# バックアップ対象外リスト削除
rm -f $TMPBACKUPNOLIST
 
[root@centos ~]# chmod 700 backup.sh ← バックアップスクリプトへ実行権限付加

バックアップ定期自動実行設定:※毎日5:00にバックアップを実行する

echo "0 5 * * * root /root/backup.sh" > /etc/cron.d/backup

参考URL

はじめてrsyncを使う方が知っておきたい6つのルール
rsync でディレクトリの同期(バックアップ)
rsyncを使った熟練者レベルのバックアップ
自動バックアップ運用(tar+GnuPG+rsync/ftp)
rsync 世代管理バックアップ

-- 広告 -- -- 広告 --

 

この記事に関連する記事一覧

アフィリエイトで稼ぐ
プロフィール

ぴよふぁくとりぃです。

職業は自宅でサーバ管理、資格は薬剤師です。
趣味も職業もパソコンラブです。
よろしくね。
連絡先: admin@arakanoj.com
URL: http://piyofactory.com

検索
人気ページ
東京電力予想最大電力(万kW)
twitter
使い方を知れば知るほど楽しく使える Linux。
Linux の基本を覚えてもっともっと楽しいコンピュータの使い方を身につけましょう。