The net is vast
プログラミングや、コンピュータなどの備忘録です。 主にRuby, Java, Linux, 等を扱います。アルゴリズムも扱いたいな。
0:00

dreamhost(linux) + rsyncで差分バックアップをする方法

Category: By jx
中学校の頃からデジカメで写真を撮ってきて、バックアップをろくにとっていませんでした。いつもバックアップしようと思うのですが、当時はCD-Rに入りきらないし、DVD-Rがでてもその頃にはDVD-Rにも入りきらない状態でした。だからいつも億劫になってしまってバックアップを取ってこなかったのです。

それじゃまずいだろということで、さすがに良い歳にもなったのでそろそろまじめにバックアップを考えました。調べてみると最近はいろいろと手段があるようでした。WebサービスであればDropboxが有名ですが、これは容量制限が結構小さいので無理ですし、最近でてきたトレンドマイクロ オンラインストレージ SafeSyncもあまり使い勝手が良くないようです。

ここは、技術者の端くれとしてバックアップスクリプトを自分で書くのだということで、調べているとrsyncがバックアップしてくれるらしい記述を発見。--link-destというオプションをつけると、差分バックを取ってくれるようです。仕組みは意外とシンプルで、linuxの仕組みを使っていて感心しました。

ext2系のファイルフォーマットではi-nodeという仕組みでファイルを管理しています。ハードリンクを使うと同じi-nodeを指し示す別名のファイルを作成する事ができるのです。つまり、ファイル名は異なっても指し示しているファイルは同じ物です。つまり、このrsync --link-destを使ってバックアップを使用している限り、任意の時点からの差分バックアップが簡単にとれるのです。

また、私はDreamHostでサーバをレンタルしているのですが、このDreamHostはディスク容量が無制限なので、自由にバックアップする事ができます。しかし、本当に無制限で大丈夫なんでしょうかね?まぁちゃんとunlimited diskと書いてあるのでありがたく使わせてもらいましょう。

肝心のスクリプトですが、こんな感じになりました。これを定期的に実行すればバックアップは完璧ですね!
SOURCE_DIR=~/Documents/backuped
DEST_HOST=user@dreamhost.com
DEST_DIR=/home/user/backup
DATE=`TZ=JST-9 date "+%Y%m%d%H%M%S"`

CURRENT=$DEST_DIR/current
RELATIVE_CURRENT=../current
THIS_TIME=$DEST_DIR/$DATE

rsync -av --delete --link-dest $RELATIVE_CURRENT $SOURCE_DIR $DEST_HOST:$THIS_TIME
ssh $DEST_HOST "rm -fr $CURRENT; ln -s $THIS_TIME $CURRENT"
 

0 comments so far.

Something to say?