rsyncで毎日自動差分バックアップを構成
この記事の所要時間:約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
これでおしまい。あとは明後日の夜にきちんとバックアップがされているかを確認して終わり。
関連記事
-
-
Apacheの起動が失敗する
ブログの重さが改善されるかと思いapacheのKeepAliveをonにして、restart。 し
-
-
Twitterbotのlogファイルの肥大化を防ぐためのlogrotateの設定
abrAsus 保存するメモ帳 / ytoApple信者の毒舌な妹botはcronで定期的にphpを
-
-
新サーバにMaildirディレクトリを移動させたときのトラブル
サーバを作りなおした件で、Postfix・Dovecotサーバもリストアしました。 新サーバで
-
-
MySQLからツイートを選択してツイートするPHPコード
Twitter escultura de arena / Rosaura Ochoa Ap
-
-
NVR500でフレッツサービス情報サイト(NGN IPv4)に接続するための設定
安定性に定評のあるYAMAHAのNVR500たんを買ってもう3ヶ月になりますが、やっとこさフレッツサ
-
-
DiCEの設定の仕方まとめ
DDNSを利用している皆さんはいつもお世話になるであろう、自動IP通知ツールDiCEの登録の一部始終
-
-
Cent OSサーバを1から再構成しなおした。
リストアしちゃいました。 再構成するきっかけになったのは、/パーティションをなんと2GBしかと
-
-
ApacheでSSLを有効に(mod_ssl)
動機は、ownCloudをインストールしたこと。自分しか使わないとはいえブラウザでアクセスできるオン
-
-
Twitterで自動フォロー返しをするPHPコード
Apple信者の毒舌な妹botで使用している自動フォロー返しのコードをメモ。前提は Githu
-
-
Safariでキーボードのみのブラウジングを実現するショートカットたち
iMacのキーボード / salchu ある程度パソコンを触っていた期間が長い人なら、誰で