您的位置:首页 > 其它

unison实现文件双向同步

2015-11-11 11:46 507 查看

unison简介

  Unison是一款跨windows/linux/MAC OS平台的文件同步工具,不仅支持本地对本地同步,也支持通过SSH、RSH和Socket等网络协议与远程主机进行同步。最主要的是,Unison支持双向同步操作,即任何一端数据发生改变,都会更新到对端;但是,unison无法实现实时双向同步。

  与rsync区别:rsync同步是单向的,客户端同步服务器端,而客户端进行文件的删除、修改等操作无法同步到服务端。

unison特性

1.支持跨平台同步

2.双向同步,自动更新两份副本中没有冲突的部分,有冲突的部分由用户选择更新策略

3.支持增量同步,每次同步完成后会记录文件状态,下次同步时,以上次的状态为起点开始同步

unison安装

[root@test src]# mkdir -p /usr/local/src/unison
[root@test src]# cd /usr/local/src/unison
#安装ocaml编译器
[root@test src]# yum install ctags-etags -y
[root@test src]# wget http://caml.inria.fr/pub/distrib/ocaml-4.02/ocaml-4.02.3.tar.gz [root@test src]# tar -zxvf ocaml-4.02.3.tar.gz
[root@test src]# cd ocaml-4.02.3
[root@test src]# ./configure
[root@test src]# make world opt
[root@test src]# make install
#安装unison
[root@test src]# wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.48.3.tar.gz [root@test src]# tar -zxvf unison-2.48.3.tar.gz
[root@test src]# cd unison-2.48.3
[root@test src]# make UISTYLE=text THREADS=true
[root@test src]# make -p /root/bin
[root@test src]# mkdir install
[root@test src]# mkdir -p /usr/local/unison
[root@test src]# cp /root/bin/unison /usr/local/unison


unison使用说明

unison示例

1.同步本地的两个文件

unison /test1 /test2

执行命令后会有相关提示,询问是否执行更新操作,输入“y”后更新。

2.将本地的目录/test1同步到远程主机上

unison /test1 ssh://10.10.10.56//test2

友情提示:

1.异地同步双向同步需要两台主机配置互相ssh无密码登录,在此就不做演示。

2.在与远程主机同步时,我们执行同步命令后出现以下报错:

Contacting server...
bash: unison: command not found
Fatal error: Lost connection with the server


这是由于我们在编译安装unison后,可执行文件在/root/bin下,在进行远程同步时需要指定其路径,如:

unison /test1 ssh://10.10.10.56//test2 -servercmd /root/bin/unison
或
unison /test1 ssh://10.10.10.56//test2 -servercmd /usr/local/unison/unison


否则会出现上面的错误。而在本次安装过程中,我们的unison虽copy在/usr/local/unison下,但直接执行unison命令使用的是/root/bin/unison。

unison参数

-testserver

测试连通性,不执行具体操作。如unison /test1 ssh://10.10.10.56//test2 -testserver - servercmd /usr/local/unison/unison

-servercmd

通知unison的具体执行路径

-auton

接受缺省的动作,然后等待用户确认是否执行

-batch

全自动模式,接受缺省动作,并执行。

-ignore xxx

增加 xxx 到忽略列表中

-path xxx

只同步 -path 参数指定的子目录以及文件,而非整个目录。-path 可以多次出现

-follow xxx

是否支持对符号连接指向内容的同步

owner = true (保持同步过来的文件属主)

group = true (保持同步过来的文件组信息)

perms = -1 (保持同步过来的文件读写权限)

repeat = 1 (间隔1秒后,开始新的一次同步检查)

retry = 3 (失败重试)

sshargs = -C (使用ssh的压缩传输方式)

xferbycopying = true

-immutable xxx

不变目录,扫描时可以忽略

-silent

安静模式

-times

同步修改时间

true表示同步时通过文件的创建时间来比较两地文件,若为false,则比较两地文件的内容。建议true

以上只是部分常用参数,还有其他参数需要我们具体了解。

unison配置文件

unison除了可以使用命令参数外,也可以调用配置文件的方式使用。

配置文件在/root/.unison下,缺省的配置文件为: “default.prf”。

执行方式如:

unison

unison会到在 ~/.unison 目录下查找 “.prf” 配置文件。

如果不带参数执行 unison,则查找 “default.prf” 文件

[root@test unison]# vim /root/.unison/test.prf
root = /test1
#要同步的文件夹
root = ssh://10.10.10.56//test2
#要同步的文件夹
#force = /test1
#以本地文件为标准,将该目录同步到远程主机,开启后则变成单项同步
path = web1
path = web2
#只同步/test1目录下的web1和web2目录
ignore = tmp
#忽略同步/test1/tmp目录
#prefer = ssh://10.10.10.56//test2
batch = true
#全自动模式,接受并执行默认动作
maxthreads = 300
#同步时最大线程数
repeat = 1
#间隔一秒后,开始新一次同步检查
retry = 3
#重试次数
owner = true
group = true
perms = -1
#保持同步过来读写权限
sshargs = -C
#使用ssh压缩传输方式
perms = -1
fastcheck = false
#true表示同步时通过文件的创建时间来比较两地文件,若为false,则比较两地文件的内容。建议true
rsync = false
#debug = verbose
xferbycopying = true
confirmbigdel = false
#默认值是true,表示当需要同步的两个目录一个为空时,unison将停止,这里设置为false,即便为空unison也不会停止运转
log = true
logfile = /tmp/unison.log


总结

  经过以上介绍,我们大体知道了unison的使用方法。它的双向同步的确给我们带来了极大的方便,但同时也有一个缺点:对于一个文件在两个同步文件夹中都被修改时,unison是不会去同步的,因为unison无法判断以那个为准
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: