2014/11/08

TimeCapsuleのバックアップをrsyncでとる

TimeCapsuleのバックアップについてです。「バックアップのバックアップ?」と一瞬思われるかもしれません。しかし、TimeCapsuleをNASとして使っていると、そこにはiTunesライブラリやiPhotoライブラリなどが入っています。データが消失したら一大事ですね。

TimeCapsuleのバックアップ大事です。TimeCapsuleは壊れやすいと評判で、私のも1度壊れたのでそれ以来気をつけるようにしています。

TimeCapsuleにはTimeCapsuleにUSB接続されたストレージにアーカイブする機能が付いていますが、おそらくこの機能では差分バックアップができません。毎回すべてのファイルをコピーしてしまいます。さらに、バックアップするデータのサイズは合計で1テラバイトを超えますから、途中で失敗する事もしばしばあります。バックアップ処理中はTimeCapsuleの中のデータにアクセスする事もできないのでこれも不便です。
このように、TimeCapsuleのアーカイブ機能は決して便利という事のできるものではありません。

そこで、私はrsyncを使ってバックアップをとることにしました。このrsyncは、ファイルなどの同期を行うソフトウェアで、再開機能や、差分コピー機能などの便利な機能を備えています。

バックアップ用シェルスクリプト

簡単なバックアップ用シェルスクリプトを作ってみました。これをcronなどに登録して、定期的に実行すればいい感じになると思います。バックアップ先のディスクはTimeCapsuleにUSBで接続されていることを前提にしています。
スクリプトの利用は自己責任でお願いします。これを利用することによって発生した被害に対して一切の責任を負いません。

使い方

  1. 下のスクリプトをダウンロードして適当な所に置く
  2. スクリプトに実行権限がついていなければ
    chmod 755 timecapsule_backup.sh
    
    する
  3. SOURCEからPASSWORDまでの変数の中身を自分の環境に合わせて書き換える(アカウント名・パスワードは、AirMacユーティリティで設定したアカウントのもの)
  4. スクリプトを実行する
今の所エラーになった(マウントに失敗したとか、途中で接続が切れたとか)場合にリトライする機能はついてないです。

#!/bin/bash
SOURCE="バックアップ元"
DEST="バックアップ先"
TIMECAPSULE_ADDR="TimeCapsuleのIPアドレス"
USER="アカウント名"
PASSWORD="パスワード"
s_check=`mount -t afpfs | grep /Volumes/$SOURCE`
d_check=`mount -t afpfs | grep /Volumes/$DEST`
if [ "$s_check" = "" ]; then
#マウントされていなければ
mkdir /Volumes/$SOURCE
mount -t afp afp://$USER:$PASSWORD@$TIMECAPSULE_ADDR/$SOURCE /Volumes/$SOURCE
if [ $? -ne 0 ]; then
rmdir /Volumes/$SOURCE
exit 1
fi
fi
if [ "$d_check" = "" ]; then
#マウントされていなければ
mkdir /Volumes/$DEST
mount -t afp afp://$USER:$PASSWORD@$TIMECAPSULE_ADDR/$DEST /Volumes/$DEST
if [ $? -ne 0 ]; then
rmdir /Volumes/$DEST
exit 1
fi
fi
rsync -avv --progress --partial --append /Volumes/$SOURCE /Volumes/$DEST/backup/
umount /Volumes/$SOURCE
umount /Volumes/$DEST
exit 0

まとめ

こんな感じでバックアップをとることができます。再開可能というのが心強いですね。また、1回フルバックアップが終わったあとは、同様の手順で行うと差分だけバックアップしてくれます。
TimeCapsuleのバックアップで悩んでいた方はぜひ1度お試しください。