*

rsyncで毎日自動差分バックアップを構成

公開日: : 最終更新日:2014/07/05 サーバ運用, 備忘録 , , , ,

この記事の所要時間:約4分52秒

毎日の明け方に、外付けHDDにrsyncバックアップをするようにした。rsyncを実行するシェルスクリプトを書いて、それをcrontabに登録するという流れ。

rsyncの仕組み

rsyncとは、ファイルを同期するために使うコマンドで、通常は以下のように使う。

$ rsync -av dir0 dir1

dir2(バックアップ先)の中にdir1(バックアップ元)と同じ物を一つ作る。オプション-aはアーカイブモードと言って、オプション-rlptgoDと同じ意味になる。-rは再帰、-lはシンボリックリンクをコピーする、など、基本的なオプションがまとまっているかたち。-vは、コピー中のファイルを標準出力に出力するオプション。

これに–link-destというオプションでディレクトリを指定してやると、その中に同じ物がある場合はデータはコピーされず、代わりにハードリンクが置かれる。つまり、容量を節約しながら複数回のスナップショットを保存できるというわけ。インクリメンタルバックアップと言う。

$ rsync -av --link-dest=../dir1 dir0 dir2

–link-destで指定するディレクトリは、バックアップ先(~/dir2)との相対パスを書く。この例ではdir1とdir2が同じディレクトリにいる。

シェルスクリプトの作成

このrsyncを使った一連の操作を、覚えたてというか、付け焼刃のシェルスクリプトを駆使して以下のようにスクリプト~/backup_rsync.shを作った。/var/www、/home、/rootのディレクトリを、外付けHDDの/mnt/backup_exHDDの中に日毎に作成したディレクトリにバックアップする。

#!/bin/bash

# バックアップ先ディレクトリ名
BACKUPDIR=/mnt/backup_exHDD
mkdir -p $BACKUPDIR

# バックアップログファイル名
BACKUPLOG=/var/log/backup.log
rm -f $BACKUPLOG
touch $BACKUPLOG
chmod 400 $BACKUPLOG

# 異常終了処理関数定義
# 今後もっと拡張する
error_exit () {
exit 1
}

# バックアップ実行
echo "`date` backup start" >> $BACKUPLOG
LASTBACKUP=`ls -t $BACKUPDIR | grep backup | head -1`
NEWBACKUP=`date +%Y%m%d`backup

mkdir $BACKUPDIR/$NEWBACKUP
rsync -av --delete --link-dest=../$LASTBACKUP /home /var/www /root $BACKUPDIR/$NEWBACKUP >> $BACKUPLOG 2>&1
code=$?
if [ $code -ne 0 ]; then
    cat $BACKUPLOG | mail -s "BACKUP NG CODE IS $code" root
    rm -rf $BACKUPDIR/$NEWBACKUP
    error_exit
fi
echo "`date` backup end" >> $BACKUPLOG

一番必要なのはLASTBACKUPとNEWBACKUPを指定して、きちんと差分を取れるようにしてやるところ。そのうちバックアップするディレクトリは別ファイルにリストとして保存しておくようにしたい。そのうち。

cronに毎日AM5時に実行してもらう

このスクリプト~/backup_rsync.shをcronに登録する。

crontabに書き込むとかcron.dailyにスクリプトを保存するとかいろいろやり方はあるみたいだが、ここではcron -eを使う方法をとる。これは結局/var/spool/cron/ユーザ名というファイルを編集するのと同じ意味になる。

# crontab -e
(viの編集画面)
0 5 * * * /root/backup_rsync.sh

これでおしまい。あとは明後日の夜にきちんとバックアップがされているかを確認して終わり。

関連記事

N825_hakisaretake-bururui500-thumb-750x500-2224

Cent OSサーバを起動するたびにいろいろとプロセスがクラッシュする問題

いつからか、Cent OSサーバを再起動するたびに件名が" full clash repor

記事を読む

no image

/tmpパーティションの領域の拡大をしてみる

今回拡大するのは/tmpパーティション。学校のデータベースの講義でDB2 express-cを使うか

記事を読む

a0002_001091

ドメインを取得してとりあえず使えるようにする手順

ドメイン名。ウェブページの顔ですね。ちょっとネットワークに詳しい人なら結構意識していると思います。

記事を読む

no image

自前のDropbox、ownCloudをインストールしてみる

自前のサーバを用意したら、ファイルサーバを作ってみたいと思うもの。 そこでなんと、ownClo

記事を読む

no image

MySQLからツイートを選択してツイートするPHPコード

Twitter escultura de arena / Rosaura Ochoa Ap

記事を読む

ケーキ

CakePHPディレクトリを他サーバに移転する際に困ったこと

まだ解決できていないが、CakePHPで作ったアプリケーションを別のレンタルサーバーに移転し

記事を読む

no image

ApacheでSSLを有効に(mod_ssl)

動機は、ownCloudをインストールしたこと。自分しか使わないとはいえブラウザでアクセスできるオン

記事を読む

no image

Postfixに新規ユーザを追加する場合の手順

送受信どちらも問題なくできるようになり、ひとまず安心。 サブで使ってるユーザアカウントの方のア

記事を読む

no image

Safariでキーボードのみのブラウジングを実現するショートカットたち

iMacのキーボード / salchu ある程度パソコンを触っていた期間が長い人なら、誰で

記事を読む

no image

Apacheの起動が失敗する

ブログの重さが改善されるかと思いapacheのKeepAliveをonにして、restart。 し

記事を読む

AnsibleLogo_transparent_web
ChefとAnsibleの比較 〜Ansibleはじめました〜

今まで個人のMacの環境構築には、Brewfileなるものを作成してい

no image
モチベ低い大学院生でも院進学で得られたもの

つい今月の頭に修士論文を提出して、長いプレッシャーから解放されました。

Thunderbolt Display
Apple Thunderbolt Displayを使って30分で理解した利点3つ

今まで研究室ではMac ProとDellのちゃちな21インチモニタで作

nc62150
ニコニコ動画の動画上部のニュースを非表示にするSafari機能拡張

作りました。 HideNicoVideoNews http:/

Tokyo tower
TOKYO HACKATHONが面白そう

最近発見したTOKYO HACKATHONという学生向けハッカ

→もっと見る

  • follow us in feedly
PAGE TOP ↑