`
hqman
  • 浏览: 363015 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

linux文件同步工具Unison的使用

阅读更多

linux文件同步工具Unison的使用

:Unison 简介


Unison windows unix 平台下都可以使用的文件 同步工具 ,它能使两个文件 夹(本地或网络 上的)保持内容的一致。 unison 拥有其它一些同步工具或文件系统 的相同特性,但也有自己的特点:


跨平台使用;


对内核和用户 权限 没有特别要求;


unison
是双向的,它能自动 处理两分拷贝中更新没有冲突的部分,有冲突的部分将会显示出来让用户选择更新策略;



只要是能连通的两台主机 ,就可以运行 unison ,可以直接使用 socket 连接或安全的 ssh 连接方式,对带宽 的要求不高,使用类似 rsync 的压缩传输协议。
Unison 有文字界面和图形界面,这里只介绍如何在文字界面下使用 .

: 安装 unison

unison 各种版本下载 地址:
http://www.seas.upenn.edu/~bcpierce/unison//download.html
unison 编译器下载地址:
http://caml.inria.fr/pub/distrib/ocaml-3.10
其它有用链接;
http://worldhello.net/doc/bcp/unison.html
http://www.seas.upenn.edu/~bcpierce/unison//contrib.html
http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#rshmeth
http://linux.chinaunix.net/bbs/viewthread.php?tid=888250&extra=page%3D1%26amp%3Bfilter%3Dreward
从以上地址可以下载各种平台 , 各种版本的 unison, 有基于源码安装的 , 有二进制的 , 我下载的是二进制的 , 可以直接使用 . 这里介绍源码安装 :
源码安装 unison
Linux 下从源码包编译安装,需要一个叫做 Objective Caml compiler 的工具,版本至少 3.0.7 ,可以从这里下载: http://caml.inria.fr/
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 UISTYLE=text
# make install
之后将生成可执行文件 unison ,将其 cp 到系统 PATH 即可。
# cp ./unison /usr/local/bin

: 配置双机 ssh 信任


由于 unison 在远程同步文件夹要登陆远程服务 , 因此要配置两机互相信任
本例假设本地机为: 10.178.1.132(linux)

远程机: 10.178.1.110(solaris)
1.
在两台机器上创建 RSA 密钥
以下操作要在本地机和远程机上都执行一遍

1 )以 root 用户登录

2 )在 root 用户的
主目录内创建 .ssh 目录并设置 正确的权限

[root@gsgatzhapp1 ~]# mkdir ~/.ssh


[root@gsgatzhapp1 ~]# chmod 700 ~/.ssh


3 )使用 ssh-keygen 命令 生成第 2 版本的 SSH 协议的 RSA 密钥

[root@gsgatzhapp1 ~]# ssh-keygen -t rsa


Generating public/private rsa key pair.


Enter file in which to save the key (/root/.ssh/id_rsa):


Enter passphrase (empty for no passphrase):


Enter same passphrase again:


Your identification has been saved in /root/.ssh/id_rsa.


Your public key has been saved in /root/.ssh/id_rsa.pub.


The key fingerprint is:


17:e4:7c:79:8d:a0:00:3b:d9:f7:7a:56:f3:ac:54:4d oracle@gsgatzhapp1


在提示保存私钥( key )和公钥( public key )的位置时,使用默认值。
如果需要私钥密码 passphrase ),则输入一个私钥密码(如果使用私钥密码,使用 ssh 执行远程命令时需要输入私钥密码,因此,本案例中未使用私钥密码),因此,直接回车即可。

2.
添加密钥到授权密钥文件( authorized key file )中

1 )以 root 用户登录

2 )在本地机上执行

[root@gsgatzhapp1 ~] # cd ~/.ssh


[root@gsgatzhapp1.ssh ]#ssh 10.178.1.132 cat /root/.ssh/id_rsa.pub >> authorized_keys


[oracle@gsgatzhapp1.ssh ]#ssh 10.178.1.110 cat /root/.ssh/id_rsa.pub >> authorized_keys


[oracle@gsgatzhapp1.ssh ]#scp authorized_keys 10.178.1.110:/root/.ssh/

[oracle@gsgatzhapp1 .ssh]# chmod 600
/root/.ssh/authorized_keys

3 )在远程机 10.178.1.110 上:

bash-2.05# chmod 600
/root/.ssh/authorized_keys


4 )测试

完成后,在 gsgatzhapp1 上执行:

[root@gsgatzhapp1 ~]# ssh 10.178.1.132
date


[root@gsgatzhapp1 ~]#ssh 10.178.1.110 date


如果不需要输入密码就出现系统日期,说明 SSH 配置成功。


:unison 的使用


Unison 可以在一台主机上使用,同步两个文件夹,也可以在网络上是用。
1: 本地使用
使用方法:
#unison
111 222
#
同步本地的 111 222 文件夹
Contacting server...
Looking for changes
Warning: No archive files were found for these roots.
This can happen either

because this is the first time you have synchronized these roots,
or because you have upgraded Unison to a new version with a different
archive format.

Update detection may take a while on this run if the replicas are
large.
Unison will assume that the 'last synchronized state' of both replicas
was completely empty.
This means that any files that are different

will be reported as conflicts, and any files that exist only on one
replica will be judged as new and propagated to the other replica.
If the two replicas are identical, then no changes will be reported.
Press return to continue.[<spc>] Reconciling changes
111
222


<---- file
aaaaaaaaaaaaa
[f] ?

Commands:

<ret> or f or <spc>
follow unison's recommendation (if any)


I
ignore this path permanently


E
permanently ignore files with this extension


N
permanently ignore paths ending with this name


m
merge the versions


d
show differences


x

show details


l
list all suggested changes


p or b
go back to previous item


g
proceed immediately to propagating changes


q
exit unison without propagating any changes



/
skip


> or .
propagate from left to right


< or ,
propagate from right to left


<---- file
aaaaaaaaaaaaa
[f] f


Proceed with propagating updates? [] y
Propagating updates

UNISON started propagating changes at 15:06:08 on 27 Aug 2007
[BGN] Copying aaaaaaaaaaaaa

from /222


to /111

[END] Copying aaaaaaaaaaaaa
UNISON finished propagating changes at 15:06:08 on 27 Aug 2007
Saving synchronizer state
Synchronization complete
(1 item transferred, 0 skipped, 0 failures)

如果检测到两个文件夹有所不同, unison 会提示,让你选择相应的操作。如上例所示 .
表示右边 222 的文件夹有新的文件,是否同步到左边的 111 文件夹, f 表示 force ,然后将确认 , 进行更新 , 如果输入?会有更详细的介绍。
2: unison 远程使用
使用方法:
# unison < 本地目录 > ssh://remotehostname(IP)/< 远程目录的绝对路径 >
例如 :
# unison /home/AAA ssh://username@remotehostname(ip)//DB/path/BBB
表示将本机的目录 /home/AAA 和远端主机的 /DB/path/BBB 进行同步。一般的,需要两台机能 ssh 连接。
注意
在主机和目录间又多加了一个 "/"
3:unison 参数说明
Unison 有很多参数 , 这里只介绍经常使用的几个 , 详细的请参看 unison 手册 :
"
-testserver

测试连通性,连接到服务器即退出。示例 :
$ unison / ssh://opensou1@bluehost/
-servercmd=~/bin/unison -testserver

如果服务器端 unison 可执行文件不在默认目录下,甚至没有 unison 命令(需要你编译一个上传到服务器),则需要使用 -servercmd 参数告诉要执行的服务器 unison 命令位置。
使用 -testserver 参数,则成功链接即退出,也不会去执行目录的比较等后续操作。
"
-servercmd xxx

告诉 unison
服务器端的 unison 命令是什么。参见上面的示例。
"
-auto

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

batch mode, 全自动模式,接受缺省动作,并执行。
"
-ignore xxx

增加 xxx 到忽略列表中
"
-ignorecase [true|false|default]

是否忽略文件名大小写
"
-follow xxx

是否支持对符号连接指向内容的同步
"
owner = true (
保持同步过来的文件属主 )
"
group = true (
保持同步过来的文件组信息 )
"
perms = -1
(
保持同步过来的文件读写权限 )
"
repeat = 1
(
间隔 1 秒后 , 开始新的一次同步检查 )
"
retry = 3
(
失败重试 )
"
sshargs = -C (
使用 ssh 的压缩传输方式 )
"
xferbycopying = true


"
-immutable xxx

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

安静模式
"
-times

同步修改时间
"
-path xxx
参数
只同步 -path 参数指定的子目录以及文件,而非整个目录。 -path 可以多次出现 , 例如

unison /home/username ssh://remotehost//home/username \


-path shared \


-path pub \


-path .netscape/bookmarks.html

4: 通过配置文件来使用 unison
尽管可以完全通过命令行的方式来指定 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
#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 同步即可。
分享到:
评论

相关推荐

    Linux文件同步工具Unison

    Linux文件同步工具Unison是Unix和Linux系统中广泛使用的双向文件同步工具,它允许用户在两台或多台计算机之间保持文件和目录的一致性。Unison不仅能够进行单向的文件复制,还支持双向同步,这意味着即使在多台机器上...

    Linux文件同步工具unison

    Unison是Windows、Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致。本附件是从官网下载的已编译OK的对应Linux系统的二进制文件最高版本(稳定版)

    unison双向同步文件工具可在linux下和window系统下

    Unison是一款强大的、跨平台的文件同步工具,它支持Linux和Windows操作系统,使得用户能够在不同系统之间方便地进行文件和目录的同步。Unison的独特之处在于它的双向同步功能,这意味着两个同步端的数据改动都可以被...

    Unison使用手册

    综上所述,Unison 是一款功能强大且易于使用的文件同步工具,它不仅支持本地文件同步,还支持跨平台和远程同步。通过深入理解其提供的各项功能和配置选项,用户可以根据自己的需求灵活配置 Unison,以实现高效稳定的...

    Linux unison+inotify 文件实时双向同步

    unison是一款开源的文件同步工具,支持双向同步,而inotify是Linux内核提供的一个事件驱动的文件系统通知机制。 【标签】:“源码 工具” 这里的标签提示了文章可能涉及了unison和inotify的源码分析以及如何使用这...

    unison实现双系统文件实时同步

    Unison是一款强大的文件同步工具,可在多个操作系统之间,如Windows、Linux之间实现文件的双向同步。Unison的独特之处在于它的跨平台性、低系统要求、双向同步功能以及对冲突处理的智能策略。本文将详细介绍如何在双...

    unison文件同步for windows

    Unison是一款跨windows/linux/MAC OS平台的文件同步工具,不仅支持本地对本地同步,也支持通过SSH、RSH和Socket等网络协议进行同步。更棒的是,Unison支持双向同步操作,你既可以从A同步到B,也可以从B同步到A,这些...

    Unison是OSX,Unix和Windows的文件同步工具

    Unison是OSX,Unix和Windows的文件同步工具。它允许的文件和目录的集合的两个副本被存储在不同的主机(或在同一主机上不同的磁盘),改性分开,然后通过传播在每个副本到其他带来的变化是最新的。 一致地共享多个...

    unison文件同步for windows-part2

    Unison是一款跨windows/linux/MAC OS平台的文件同步工具,不仅支持本地对本地同步,也支持通过SSH、RSH和Socket等网络协议进行同步。更棒的是,Unison支持双向同步操作,你既可以从A同步到B,也可以从B同步到A,这些...

    unison文件同步for windows-part1

    Unison是一款跨windows/linux/MAC OS平台的文件同步工具,不仅支持本地对本地同步,也支持通过SSH、RSH和Socket等网络协议进行同步。更棒的是,Unison支持双向同步操作,你既可以从A同步到B,也可以从B同步到A,这些...

    linux文件同步.zip

    2. **unison**: Unison是一个双向文件同步工具,支持断点续传和冲突解决。它可以在两台机器之间保持两个目录的一致性。Unison的使用需要在两台机器上都安装,并配置相应的profile文件。 3. **inotifywait**: ...

    LINUX远程工具上传下载文件

    除此之外,还有一些其他的工具,比如`lrzt`(LazyRsyncTool),它是一个快速的、基于rsync的文件同步工具,特别适合大型文件的传输。还有`unison`,它是一个双向同步工具,可以在两个目录之间保持一致性,包括Linux...

    inotify+unison rpm安装包,包含所有依赖包

    2. **Unison**: Unison是一款跨平台的文件同步工具,支持在不同的Unix-like系统(包括Linux和macOS)以及Windows之间同步文件和目录。它使用了Inotify技术来检测本地文件系统的更改,并通过网络与远程主机上的Unison...

    可以直接在Linux和windows下复制文件的工具

    6. **rsync**:rsync是Linux世界中广泛使用的文件同步工具,尽管它通常在命令行下使用,但也可以通过一些图形界面工具(如GRsync)在Windows上使用。rsync以其高效的数据同步算法著称,能快速同步变化的文件。 这些...

    unison源码包

    Unison是一款强大的文件同步工具,尤其适合于处理跨网络的文件同步任务。它由法国巴黎第七大学的Frédéric Back设计并开发,以MIT许可证开源发布。Unison的主要功能是确保两个或多个文件系统的同步,无论是本地硬盘...

    docker-unison:基于Alpine Linux的轻量级Docker统一服务器,用于文件同步

    然后,您可以使用以下命令将本地文件夹同步到容器中的$UNISON_DIR (默认值: /data )。 $ unison . socket:// &lt; docker&gt; :5000/ -auto -batch 接下来,您可以启动一个与/data下的卷连接的容器。 $ docker run -...

    unison(2.48.4)+infotity(3.14)+ocaml

    标题中的"unison(2.48.4)"是指Unison文件同步工具的特定版本,这是一个用OCaml编程语言编写的开源软件。Unison能够实现跨平台的双向文件同步,这意味着在两个不同的系统间,无论是文件的修改、添加或删除,都能在两...

    unison-2.27.57.tar.gz

    Unison是一款强大的、开源的文件同步工具,尤其在Linux环境下被广泛使用。它允许用户在两台或多台计算机之间进行双向同步,确保数据的一致性和完整性。标题中的"unison-2.27.57.tar.gz"表示的是Unison的特定版本2.27...

    file_sync_linuxfilesync_filesync_文件同步_linux_properly61r_

    在Linux下实现文件同步,一般会采用rsync、unison或inotifywait等工具。rsync以其高效性和增量同步特性著称,能快速同步两个目录之间的差异;unison则支持双向同步,并具有冲突解决机制;inotifywait则是基于Linux...

Global site tag (gtag.js) - Google Analytics