はじめに
TimeMachineはMacのデータをHDDにバックアップしてくれますが、別々のTimeMachineを個別に運用する事はできません。例えば「iTunes や iPhoto は HDD-A」「開発フォルダは HDD-B」「ホームディレクトリは HDD-C」といった運用です。TimeMachineに紐づいたHDD自体は複数存在出来ますが、TimeMachineとして複数存在する事は出来ません。
特にiTunesのようなデータは容量が膨大なので、通常のTimeMachineとは分離して運用したいところです。
そこで、rsync コマンドを使ってこれをどうにかしてみようと思います。
rsync
単純にコピーを生成しますが、オプションにより挙動が変わります。SSHを使ってリモート経由でバックアップすることも可能ですが、今回は外付けHDDに対してコピーを作ることを前提とします。
$ rsync -auE --delete <バックアップ元ディレクトリ/> <バックアップ先ディレクトリ/>
オプション | 意味 |
---|---|
-a, --archive | 基本オプション詰め合わせ (-rlptgoD) |
-u | 更新されたファイル、ディレクトリのみをコピー |
-E | 拡張属性を維持。リソースフォークもコピー。Finderの属性などを残したい場合はこれ |
-r | 再帰的にコピー |
-l | シンボリックリンクをそのまま維持 |
-p | パーミッションを維持 |
-t | タイムスタンプを維持 |
-g | グループを維持 |
-o | オーナーを維持 |
-D | 特殊なファイルをコピー |
-n, --dry-run | 実際に変更は行わず、結果の出力だけ行う |
--delete | 元にない、あるいは削除されたファイルを先でも削除。つまり同期する |
--link-dest= | 変更が無いファイルのハードリンクを作成 |
--delete オプションやディレクトリを/で閉じるか閉じないかは割と鬼門のようなので、使用には気をつけるべきです。
詳しい説明は省きます。
TimeMachine風スクリプト
同じ事を考えている人はいるもので、探してみると目的にあったスクリプトを公開してくれている人が見つかります。どちらも --hard-link オプションでハードリンクを生成することにより最低限の容量しか消費しないようになっています。また、バックアップ時点のフォルダを作るので、スナップショット的に運用する事も可能になっています。
今回は rsync-time-machine を少し改造して使う事にしました。
rsync-time-machine
rsync-time-backup
rsync-time-machineを改造する
rsync-time-machineは記事執筆時点では引数で入力を取ってくれません。ディレクトリパスの指定はスクリプトを書き換えろとのことです。これだと少々面倒なので改造してみます。
Finder属性を維持する
-E を追加して、Finderの「ラベル」や「属性」を維持するようにします。
RSYNC_OPTIONS="-auE --partial --progress --human-readable"
引数を取れるようにする
# 引数1, バックアップもとディレクトリ
SOURCE="${1%/}"
# 引数2, バックアップ先ディレクトリ
DESTINATION="${2%/}/$HOST"
# 引数3, 除外定義ファイル. 未指定でも可(新規追加)
EXCLUDEDFILES="${3%/}"
# --exclude-from=$SOURCE/.rsync/exclude \
--exclude-from=$EXCLUDEDFILES \
第3引数で除外設定ファイルを指定するようにしてみました。
運用
とりあえずいまは手動でいいので適当なところにスクリプトファイルを置いて、適当なときに実行します。
sh rsync-time-machine.sh /Volumes/HDDA/iTunes/ /Volumes/HDDB/bk_iTunes/
実行する度にフォルダが作られ、変更が無いファイルはハードリンクが設定されます。一見、同一ファイルの複製が大量に作られているようにも見えますが、それはたんなるリンクで実態は同じです。これでバックアップ先の容量も節約出来ます。
必要に応じて自動化も検討してみたいと思います。
資料
http://samdoran.com/2013/04/09/rsync-time-machine/
http://news.mynavi.jp/column/osxhack/044/