rsyncで毎日自動差分バックアップを構成
この記事の所要時間:約4分52秒
毎日の明け方に、外付けHDDにrsyncバックアップをするようにした。rsyncを実行するシェルスクリプトを書いて、それをcrontabに登録するという流れ。
rsyncの仕組み
rsyncとは、ファイルを同期するために使うコマンドで、通常は以下のように使う。
1 | $ rsync -av dir0 dir1 |
dir2(バックアップ先)の中にdir1(バックアップ元)と同じ物を一つ作る。オプション-aはアーカイブモードと言って、オプション-rlptgoDと同じ意味になる。-rは再帰、-lはシンボリックリンクをコピーする、など、基本的なオプションがまとまっているかたち。-vは、コピー中のファイルを標準出力に出力するオプション。
これに–link-destというオプションでディレクトリを指定してやると、その中に同じ物がある場合はデータはコピーされず、代わりにハードリンクが置かれる。つまり、容量を節約しながら複数回のスナップショットを保存できるというわけ。インクリメンタルバックアップと言う。
1 | $ rsync -av --link-dest=.. /dir1 dir0 dir2 |
–link-destで指定するディレクトリは、バックアップ先(~/dir2)との相対パスを書く。この例ではdir1とdir2が同じディレクトリにいる。
シェルスクリプトの作成
このrsyncを使った一連の操作を、覚えたてというか、付け焼刃のシェルスクリプトを駆使して以下のようにスクリプト~/backup_rsync.shを作った。/var/www、/home、/rootのディレクトリを、外付けHDDの/mnt/backup_exHDDの中に日毎に作成したディレクトリにバックアップする。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #!/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/ユーザ名というファイルを編集するのと同じ意味になる。
1 2 3 | # crontab -e ( vi の編集画面) 0 5 * * * /root/backup_rsync .sh |
これでおしまい。あとは明後日の夜にきちんとバックアップがされているかを確認して終わり。
-
Nasupl 2017/08/22
-
unique120 2015/03/10
-
tajima_taso 2015/02/19
-
ozzwar 2014/10/16
-
ottonove 2014/04/24
-
tuki0918 2014/03/28
-
monochrome_K2 2013/12/13
-
mtr8080 2013/11/20
関連記事
-
-
ApacheでSSLを有効に(mod_ssl)
動機は、ownCloudをインストールしたこと。自分しか使わないとはいえブラウザでアクセスできるオン
-
-
玄人志向のHDDケースを買った。
先日、ふとしたきっかけで500GBのSATAのHDDが手に入ったので、HDDケー
-
-
Postfixに新規ユーザを追加する場合の手順
送受信どちらも問題なくできるようになり、ひとまず安心。 サブで使ってるユーザアカウントの方のア
-
-
Postfixのroot宛のメールを全て特定のユーザに
はじめての英語論文もいちおう書き上がったので、サーバいじりを再開。 /etc/aliase
-
-
自前のDropbox、ownCloudをインストールしてみる
自前のサーバを用意したら、ファイルサーバを作ってみたいと思うもの。 そこでなんと、ownClo
-
-
Safariでキーボードのみのブラウジングを実現するショートカットたち
iMacのキーボード / salchu ある程度パソコンを触っていた期間が長い人なら、誰で
-
-
CentOS6.4でホスト名・ドメイン名の変更に伴う諸々の設定変更
以前に新しいドメインikuwow.comを取得して、とりあえずサブのアドレスとしてホームページに飛ん
-
-
OP25Bを越えてメールの送信を可能にする手順
やっと出来るようになりました。この本のお陰ですほんとに。 送信関連でやったことは、SM
-
-
メールサーバが少しできた。
いよっしゃああああああ!!!! 受信だけは問題なくできるようになりました。受信だけです
-
-
Twitterで自動フォロー返しをするPHPコード
Apple信者の毒舌な妹botで使用している自動フォロー返しのコードをメモ。前提は Githu