検索

Google
Web www.icefree.org

RSS of recent changes

 

Unisonを使った双方向同期

2017-06-20 (火) 23:23:54 (2991d)

 このページは旧サイトからの転載です。元ページはJan 2001頃にかかれました。


インストール

 同期を行う双方のマシンにUnisonをインストールする必要があります。

 FreeBSD の パッケージがあるので、それを利用します。
 ports にもあるが、うまくコンパイルできませんでした。

unisonでの同期

簡単な例

同期を取るディレクトリを、

host1:/home/unison/sync
host2:/home/unison/sync

とします。

host2% unison -batch ssh://username@host1//home/unison/sync /home/unison/sync

で同期が取れます。双方向同期なので、host1から行っても同じです。

ホームディレクトリが、/home/unison ならば、

host2% unison -batch ssh://username@host1/sync /home/unison/sync

でも構いません。つまり、絶対パスのときは、// にすることが重要です。ローカルのパスは普通に指定できます。例では絶対パスしか使っていませんが、相対パスも使えます。

使用法

client% unison ssh://username@server//absremotedir /localdir
client% unison ssh://username@server/relremotedir /localdir

 上が絶対パスで指定する場合で、下が相対パスで指定する場合の例です。

推奨オプション

  • -batch またはautoを付けないと、質問を大量にするので注意。

使用できそうなオプション

  • -auto コンフリクトファイル以外の質問をしません。
  • -backups 変更されたファイルに対しバックアップファイルを作成します
  • -batch 質問なし。コンフリクトファイルはスキップ。
  • -silent 通常出力なし

定期的に同期を取る

 外部のWEBとローカルの編集用の同期をとる例です。
 間違ってProfileを消してしまったので復旧作業中です。

sync_web.sh

/usr/local/bin/unison web_down
/usr/local/bin/unison web_up
/usr/local/bin/unison web_d_up

 なぜ3種類あるのか忘れました。
 unisonは双方向同期なので、基本的には一発で大丈夫なはずなのですが。

 コンフリクトはバッチ処理時には無視して、あとで手動で直す方針です。

 profileを使ってパラメータを指定しています。以下は個々のprofileです。

.unison/web_down.prf

#download
root = /path/public_html
root = ssh://user@server//path/public_html
#
ignore = Name *~
ignore = Name .*~
ignore = Name *.LCK
#
batch = true
#
log = true

.unison/web_up.prf

.unison/web_d_up.prf

Appendix

1日に可能な転送量(理論値。オーバヘッドなし)

 同期を取れる限界値の参考に、ビットレートからの1日に転送可能なデータ量への変換表を用意しました。ただ単位が変わっているだけです。

1日= 24時間 = 1440分 = 86400秒
1M = 1024k, 1G = 1024M = 1048576kB

1kbps = 10.55MB/day
5kbps = 52.73MB/day
10kbps = 105.5MB/day
30kbps = 316.4MB/day
64kbps = 675MB/day
128kbps = 1350MB/day = 1.32GB/day
256kbps = 2700MB/day = 2.64GB/day
512kbps = 5400MB/day = 5.27GB/day
1Mbps = 10800MB/day = 10.55GB/day
1.5Mbps = 16200MB/day = 15.82GB/day
3Mbps = 32400MB/day = 31.64GB/day
8Mbps = 86400MB/day = 84.36GB/day