Rync是单向的,即client只保持与server的数据同步. 如果client自己增加或删除了某些文件,server端好像不会更新本地文件的。
如何建立双向同步邮件服务器?实现双向传输,并且为了节省带宽,只传输变动了的电子邮件。
Unison是一个能够在unix和windows下运行的文件同步工具。它能够在两个不同的主机之间,或是通一台机器的两个不同的目录之间进行文件和目录的同步。它也能够有选择的对某一些或单个文件修改进行同步。
Unison能够以文本和图形两种方式运行。文本方式显然更符合我们的要求,因为可以方便的以脚本的方式运行。
Unison提供两种方法进行远程通信,一种是远程shell方式(Remote shell method),另一种是socket方式(socket method)。远程shell 方式可以使用工具ssh来完成,使用这种方式非常的简单,而且安全。这种方法我们后面马上要介绍到。Socket方式要求通过发送tcp包在两地之间进行通信,而且,这种方式是不能保证安全的。我们这里不是用这种方式,也不作介绍。
直接运行一下unison,就会创建空的配置文件$HOME/.unison/default.prf了,unison的配置文件很有意思,默认的叫default.prf,还可以任意创建多个单独的配置文件(在unison文档中,这些被叫做preference file),在调用的时候,可以指定不同的配置文件,这一点还是非常方便的。
现在,来创建一个配置文件mail2home.prf,用来同步家里和公司电脑上的$HOME/mail目录,就是mutt的邮件存储目录,内容如下:
# Sync between these too folders
# .prf file cannot recoginize ~, and NOTICE // in ssh address
root = /home/fwolf/
root = ssh://address_of_company_pc//home/fwolf/
# Only process these sub-directories
path = mail
path = .muttrc
path = .unison/default.prf
path = .unison/mail2home.prf
# Include another perference file(.prf)
#Include foo
# ignore all .mp3 files anywhere
ignore = Name *.mp3
# ignore all files with .unison somewhere in their full path
#ignore = Path .unison
# Fastcheck can be open if both side are linux
#fastcheck = yes
log = true
logfile = /home/fwolf/log/unison.log
# imports settings from default.prf
include default
这样,我就可以用一行命令来同步邮件了,注意同步的两台电脑上都要安装unison:
unison mail2home -testserver
#正常运行,有文件需要传输时会提示
unison mail2home
#批模式运行,没有需要merge的情况就不提示啦
unison mail2home -batch
unison通过在$HOME/.unison下创建控制文件来记忆两端的文件状态,并且控制文件在同步的两端也是同步的,所以如果这个文件变得庞大无比,在一次全部同步并保证两端都暂时不会改变的情况下,应该可以删除这个控制文件并且重新开始同步。注意我还没遇到过这种情况,也没有测试过是否可行。
同步位置中有ssh地址时,会提示用户输入ssh的密码,如果ssh能够配置为使用key登录,应该就更方便了,也可以放到cron中定时执行了。
unison同步的速度还是很快的,不过要注意使用-batch同步的时候,一般是以文件最后修改时间来判断覆盖关系的,所以一是要让两端电脑的时间都别太错得离谱,二是记得要使用其他手段备份重要数据!