Chinaunix首页 | 论坛 | 博客
  • 博客访问: 806612
  • 博文数量: 142
  • 博客积分: 10288
  • 博客等级: 上将
  • 技术积分: 2905
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-03 13:19
文章分类

全部博文(142)

文章存档

2019年(2)

2009年(51)

2008年(89)

分类:

2008-04-22 13:33:30

1
使用unison 同步文件
一:Unison 简介
Unison 是windows 和unix 平台下都可以使用的文件同步工具,它能使两个文件夹(本地或
网络上的)保持内容的一致。unison 拥有其它一些同步工具或文件系统的相同特性,但也
有自己的特点:跨平台使用;对内核和用户权限没有特别要求;unison 是双向的,它能自
动处理两分拷贝中更新没有冲突的部分,有冲突的部分将会显示出来让用户选择更新策略;
只要是能连通的两台主机,就可以运行unison,可以直接使用socket 连接或安全的ssh 连
接方式,对带宽的要求不高,使用类似rsync 的压缩传输协议。Unison 有文字界面和图形
界面,这里只介绍如何在文字界面下使用.
二:安装unison
unison 各种版本下载地址:
~bcpierce/unison//download.html
unison 编译器下载地址:

其它有用链接;

~bcpierce/unison//contrib.html
~bcpierce/unison/download/releases/stable/unison-manua
l.html#rshmeth
%3D1%26amp%3
Bfilter%3Dreward
从以上地址可以下载各种平台,各种版本的unison,有基于源码安装的,有二进制的,我下载
的是二进制的,可以直接使用.这里介绍源码安装:
源码安装unison
Linux 下从源码包编译安装,需要一个叫做Objective Caml compiler 的工具,版本至少
3.0.7,可以从这里下载:
Ocaml 安装脚本如下:
# tar -zxf ocaml-3.09.3.tar.gz
# cd ocaml-3.09.3
# ./configure
# make world opt
# make install
Unison 对版本要求很高,进行同步的两台主机需要相同版本的unison,所以这里使用和
windows 一致的版本2.13.16,unison-2.13.16.tar.gz
安装脚本如下:
# tar -zxf unison-2.13.16.tar.gz
# cd unison-2.13.16
# make UISTYPE=text
# make install
之后将生成可执行文件unison,将其cp 到系统PATH 即可。
# cp ./unison /usr/local/bin
三:配置双机ssh 信任
由于unison 在远程同步文件夹要登陆远程服务器,因此要配置两机互相信任
例如:
2
本地机为:202.198.192.177(solaris9)
远程机:202.198.192.178(solaris9)
1.在两台机器上创建RSA 密钥,以下操作要在本地机和远程机上都执行一遍
(1)以root 用户登录
(2)在root 用户的主目录内创建.ssh 目录并设置正确的权限
# mkdir ~/.ssh
# chmod 700 ~/.ssh
(3)使用ssh-keygen 命令生成第2 版本的SSH 协议的RSA 密钥
# ssh-keygen -t rsa
注意:在提示保存私钥(key)和公钥(public key)的位置时,使用默认值。如果需要私
钥密码(passphrase),则输入一个私钥密码(如果使用私钥密码,使用ssh 执行远程命令
时需要输入私钥密码,因此,本案例中未使用私钥密码),因此,直接回车即可。
在202.198.192.177 上执行时,得到如下结果:
Generating public/private rsa key pair.
Enter file in which to save the key (//.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in //.ssh/id_rsa.
Your public key has been saved in //.ssh/id_rsa.pub.
The key fingerprint is:
85:03:98:7a:40:ee:9a:4b:75:d5:fc:4f:91:d6:5a:e3 root@portal0
在202.198.192.178 上执行时,得到如下结果:
Enter file in which to save the key(//.ssh/id_rsa):
Generating public/private rsa key pair.
Enter passphrase(empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in //.ssh/id_rsa.
Your public key has been saved in //.ssh/id_rsa.pub.
The key fingerprint is:
md5 1024 75:35:40:af:8b:61:90:1e:a4:81:f0:ac:0b:0f:54:fd root@BBS-WEB
2. 添加密钥到授权密钥文件(authorized key file)中
(1)以root 用户登录
(2)在本地机上执行
# cd ~/.ssh
# ssh 202.198.192.177 cat //.ssh/id_rsa.pub >> authorized_keys
# ssh 202.198.192.178 cat //.ssh/id_rsa.pub >> authorized_keys
# scp authorized_keys 202.198.192.178://.ssh/
(3)在远程机202.198.192.178 上:
# chmod 600 //.ssh/authorized_keys
(4)测试
在本地机上执行
# ssh 202.198.192.177 date
3
Thu Sep 6 21:54:39 CST 2007 # ssh 202.198.192.178 date
# ssh 202.198.192.178 date
2007 年09 月06 日星期四21 时13 分07 秒CST
如果不需要输入密码就出现系统日期,说明SSH 配置成功。
四.使用
default.prf 文件内容如下:
# Unison preferences file
root = /data/www/bbs
root = ssh://root@202.198.192.178//global/data/bbs_backup
force = /data/www/bbs
batch = true
repeat = 1
fastcheck = true
log = false
logfile = /data/www/bbs_backup.log
在本地机器上执行
# unison -batch -silent &
这样两台机器上的文件同步就完成了。
尽管可以完全通过命令行的方式来指定unison 运行所需要的参数,但我们还是推荐使用配
置文件来进行配置使用unison,原因很简单,看配置文件比看命令行容易理解,而且可管
理性更强。
默认的配置文件夹位于~currentuser/.unison,即当前用户的home 目录下,windows 则位
于C:\Documents and Settings\currentuser\.unison,默认的配置文件名是default.prf.
运行这样的命令:
#unison exitgogo
Unison 将默认读取~currentuser/.unison/exitgogo.prf 文件里的配置信息.我的配置信息在
/root/.unison/exitgogo.prf,因此我们可以根据上面参数的介绍,把所有的参数配置信息写入
到一个.prf 的文件中.
下面是我的一个web 应用中两个文件夹同步的配置信息:
root = /sina/webdata
root = ssh://root@192.168.60.121//sina/webdata
#force =/sina/webdata
ignore = Path as/*
#prefer = ssh://root@192.168.60.121//sina/webdata
batch = true
#repeat = 1
#retry = 3
owner = true
group = true
perms = -1
fastcheck=false
rsync =false
4
#debug=verbose
sshargs = -C
xferbycopying = true
log = true
logfile = /root/.unison/sina_122.1547.log
说明如下:
两个root 表示需要同步的文件夹
force 表示以本地的/var/www/bbsnew 文件夹为标准,将该目录同步到远端。注意,如果指定
了force 参数,那么unison 就变成了单项同步了,也就是说会以force 指定的文件夹为准进行
同步.
Unison 本身是可以双向同步的,但是要做到双向同步,就不要设置force 参数,如果设置了
force 参数,就成了单项同步了,此时unison 类似与sync.
Unison 双向同步基本原理是:假如有A B 两个文件夹,A 文件夹把自己的改动同步到B,B 文
件夹也把自己的改动同步到A,最后A B 两文件夹的内容相同,是A B 文件夹的合集.
Unison 双向同步的一个缺点是,对于一个文件在两个同步文件夹中都被修改时,unison 是不
会去同步的,因为unison 无法判断以那个为准.
ignore = Path 表示忽略/sina/webdata 下面的WEB-INF/tmp 目录,即同步时不同步它。
batch = true,表示全自动模式,接受缺省动作,并执行
-fastcheck true 表示同步时使用文件的创建时间来比较两地文件,如果这个选项为false,
unison 则将比较两地文件的内容.建议设置为true
log = true 表示在终端输出运行信息。
logfile 则指定了同时将输出写入log 文件。
五:unison FAQ
如何在和远程服务器同步大量数据,上传一部分数据后,超时:
9% 559:15 ETARead from remote host bluehost: Connection reset by peer
Fatal error: Lost connection with the server
实际操作中,最好的方法是,第一次先把要上传的文件打成包,用ftp 上传,然后展开到服
务器中,之后执行一次unison 同步即可。
阅读(1092) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~