2009年02月22日(日)
ファイル同期ツールに関するまとめとUnisonを入れてみたメモ [Mac鯖管理]
デスクトップとノートを両方使っていると,悩ましいのがファイルの同期。どちらのマシンのファイルが最新なのか油断するとすぐ分からなくなってしまいますねー。解決策としては,以下のような方法が考えられると思いますが,どれも一長一短あります。
(1)すべてのドキュメントをファイルサーバやNASなどのネットワーク上のディスクに置いて直接編集する
<メリット>
- 大元のファイルを直接編集するので同期を考えなくてよい
- (一部のNASでは)iPhoneなどからもファイルを参照できる
<デメリット>
- ローカルにファイルを置かないので,ネットワーク接続が常時必要(オフラインでは参照できない)
- オリジナルのファイルを直接編集するので,同時に複数のマシンから開かないように注意する必要がある(編集競合が起きる危険性)
- 自前のネットワークディスクの場合,ファイルのバックアップ方法を別途検討する必要がある
- 外部のネットワークディスクを利用する場合,機密性の高いファイルを置くことに抵抗感がある
- セキュリティを常に意識する必要がある
(2)オンラインのファイル同期サービス(iDiskやDropboxなど)を利用する
<メリット>
- 編集すると変更ファイルが他の同期対象マシンに短時間で反映される(iDiskやDropboxなど)
- ローカルにファイルを置いておき変更したファイルのみを更新する方式が多いので,オフラインでも利用可能(iDiskやDropboxなど)
- 変更履歴が残り,過去のバージョンにさかのぼれるサービスもある(Dropbox,ZumoDriveなど)
- 少ない容量なら無料で使えるサービスもある(Dropbox,ZumoDriveなど)
- Mac/Windows/Linux間のクロスプラットホームで同期可能なサービスもある(Dropbox,ZumoDriveなど)
- iPhoneなどからファイルを参照できるサービスもある(Dropbox,ZumoDriveなど)
<デメリット>
- iDiskの場合:アップロード速度が遅い,追加・変更・削除が正しく反映されないケースがあった,(MobileMeのサービスの一部であるが)有料かつ割高(20GB:9,800円/年),ローカルにファイルがコピーされるので,同期マシンの台数分のディスク容量を使う
- Dropboxの場合:リソースフォークや拡張属性といったMac固有のファイル情報が失われる,.weblocなどのロケーションファイルやファイルバンドルが正しく同期されない,編集競合に考慮していない,同期ポイントが限定される(~/Dropbox 以下),ローカルにファイルがコピーされるので,同期マシンの台数分のディスク容量を使う
- 全般:機密性の高いファイルをネットワーク上に置くことに抵抗感がある,セキュリティを常に意識する必要がある
(3)ファイル同期ソフトを使用する
<メリット>
- 任意のタイミングで同期が可能
- 複数のマシンのローカルディスクにファイルがコピーされるのでバックアップにもなる
<デメリット>
- ファイルの変更が同期のトリガにならない(ソフトが多い)ので,同期が面倒
- ローカルにファイルがコピーされるので,同期マシンの台数分のディスク容量を使う
- 変更箇所が多い場合,同期する際にファイルの確認が面倒な場合もある
- ネットワーク越しに同期する場合,対応ソフトが限定される
(4)バージョン管理ソフトを使用する(Subversionなど)
<メリット>
- 変更履歴が残り,過去のバージョンにさかのぼれる
- 編集競合(コンフリクト)が起きた場合,手動で解消することができる
- オープンソースのソフトウェアが多いので,環境を無料で構築することができる(ドネーションは別)
- 複数のマシンのローカルディスクにファイルがコピーされるのでバックアップにもなる
<デメリット>
- 環境構築に手間がかかる
- 概念の理解にやや時間がかかる
- 単なるドキュメントファイルの同期ツールとして使うにはやや大げさ
- チェックアウト(データの書き出し)やコミット(データの反映)を意識する必要がある
- コンフリクトの解消が面倒な場合もある
いろいろなサービスを試してみたところ,Dropboxが高速で使い勝手もよく,同期作業を意識せずに行え,おまけにバージョニング(履歴管理)も自動的に行ってくれて言うことなかったのですが,惜しむらくはMac固有のメタデータが正しくシンクロされないこと。クラウドコンピューティングな時代にいまだにリソースフォークを引きずっているのもどうかと思いますが,Mac間の同期を行う場合,いろいろと不都合な面もあるのです(作成したソフトで開いてくれない,アイコンが失われるなど)。そんなわけで(Mac固有のファイル情報を失うことなく)ファイル同期を可能な限りスマートに行う方法が他にないかを検討したところ,オープンソースのファイル同期プログラム“Unison”がなかなかよさそうだったので,Mac OS X(Leopard)上での導入手順をメモがてらまとめておきます。
Unison導入メモ
1. MacPortからunisonをインストール。同期元・同期先に同じバージョンのunisonが入っていないと動作しないので,両方に導入する。MacPortについてはこのエントリやこちらのサイトを参照されたし
※インストール時には関連プログラムも組み込まれるため,意外と時間がかかるので注意。またport経由でインストールしたプログラムは必ずしも最新版とは限りませんが,とりあえず気にしないでください(笑)
$ sudo port install unison $ mkdir ~/.unison
2. UnisonにはGUIラッパーもあるのだけど(こちら),正直使い勝手がよろしくなく,かつインストール時に組み込まれるコマンドラインツールが私の環境では正しく動作しなかったので,一応入れてはみたものの結局削除しました
※ホームディレクトリのライブラリ>>Application Support にUnison フォルダがあると,こちらの環境設定を優先するようなので,コマンドラインでのみ利用する場合は削除しておいた方がいいかも知れません
$ rm -r /Applications/Unison.app $ rm -r ~/Library/Application¥ Support/Unison/ $ rm ~/Library/Preferences/edu.upenn.cis.Unison.plist $ sudo rm /usr/bin/unison ※“Application¥ Support”の¥マークは正しくはバックスラッシュ
3. /usr/bin にunisonのシンボリックリンクを作成する
※/usr/bin/unison がないと,ネットワーク越しの同期に失敗するため
$ sudo ln -s /opt/local/bin/unison-X.XX /usr/bin/unison ※X.XXはportでインストールしたunisonのバージョン
4. 同期対象やオプションを指定する設定ファイルを作成する
$ vi ~/.unison/test.prf ※任意のGUIエディタで設定ファイルを作成し, ホームディレクトリ直下の.unison/ 以下に保存してもよい
<設定例 :test.prf>
#ローカルアカウントhogeのDocuments以下と #リモートマシンpiyoのアカウントhogeのDocuments以下とを同期 root = /Users/hoge/Ducuments/ root = ssh://hoge@piyo//Users/hoge/Documents/ #ファイル名の大文字小文字を区別しない ignorecase = true #リソースフォークを有効 rsrc = true #更新日の新しいファイルを残す prefer = newer #ファイルの更新時刻をシンクロする times = true #バッチモードで実行する #batch = true #何も表示しない #silent = true #隠しファイルを除外する ignore = Name ._* ignore = Name .DS_Store ignore = Name .localized
5. ファイル同期を実行する
$ unison test.prf
初回同期時は説明文が表示されるので一読し,retrunキーを押します。どちらのファイルをコピーするか聞いてきた場合は,以下のように指定します。
Press return to continue.[<spc>] Waiting for changes from server Reconciling changes local piyo <---- dir / [f]
- ローカルからリモートへコピー:キーボードの「>」
- リモートからローカルへコピー:キーボードの「<」
- unisonの推奨に従う:キーボードの「f」
- すべて自動で実行する:キーボードの「g」
- スキップする:キーボードの「/」
- 同期をキャンセルする:キーボードの「q」
- ヘルプを見る:キーボードの「?」
何回か試してみて問題ないようであれば,設定ファイル(*.prf)の batch = true と #silent = true を有効化し,確認なしで実行するようにしてもいいと思います。また設定ファイルをUTF-8で保存すると,パス名に日本語を含んでいても問題なく同期されるようです(Leopard環境のみで確認)。
毎回コマンドラインから実行するのが面倒な場合は,任意のエディタで以下のようなスクリプトを書き,拡張子に.commandをつけて保存すれば,Finder上からダブルクリックで実行可能です。
※実行前にchmodで実行権限(x)をつけておいてください
#!/bin/bash cd /Users/hoge/.unison unison test
もっとも双方向ではなく常時片方にしか同期しないのであれば,unisonよりもrsyncの方が便利だと思います。例えば以下のようなコマンドで実行すると,リモートからローカルにファイルがコピーされるのでご参考まで。
$ rsync -avzE -e ssh hoge@piyo:~/Documents ~/Documents
参考にしたページ
- Unisonマニュアル私的日本語訳(ハチハチイチナナイチ)
- Unison - Tools for Mac OS X(Tools for Mac OS X)
- Mac で unison を使う時に除外するファイル [mac](Peace Pipe)
- unison/References/Preferences(PC説教講座)
- unison によるファイル、ディレクトリの同期(ひゃまだのテキストで行こう)
- Unison??ラップトップとPC間で使えるファイル同期ユーティリティ(SourceForge.JP Magazine)
追記
同期のたびにリモート先のパスワードを入力するのが面倒な場合は,あらかじめ公開鍵認証を設定しておくと幸せになれます(笑)。具体的な手順はここでは説明しないので,各自調べてくだされ(このあたりが分かりやすいかも)。
※すべてAt your own riskでヨロシクねっ。
Posted by 神海 螢 / コウミ ケイ at 2009年02月22日(日) 17時17分 コメント ( 0 )