热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Linux下实现文件双向同步

一、Unison简介Unison是Windows、Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致。Unison拥有与其它一些同步工具或文件系统的相同的特性,但也有自身的特点:1.跨平台使用;2.对内核和用户权限没有

一、Unison简介
Unison是Windows、Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致。Unison拥有与其它一些同步工具或文件系统的相同的特性,但也有自身的特点:
1.跨平台使用;
2.对内核和用户权限没有特别要求;
3.Unison是双向的,它能自动处理两分拷贝中更新没有冲突的部分,有冲突的部分将会显示出来让用户选择更新策略;


4.只要是能连通的两台主机,就可以运行unison,可以直接使用socket连接或安全的ssh连接方式,对带宽的要求不高,使用类似rsync压缩传输协议。

环境如下:
www.linuxidc.com:10.13.114.19
www.linuxidc.net:10.13.114.32

二、编译安装Unison
Linux下通过源码包编译安装Unison时,需要用到Objective Caml compiler。
通过以下方式安装
[root@www.linuxidc.com ~]# wget http://caml.inria.fr/pub/distrib/ocaml-3.12/ocaml-3.12.1.tar.gz
[root@www.linuxidc.com ~]# tar -xzvf ocaml-3.12.1.tar.gz
[root@www.linuxidc.com ~]# cd ocaml-3.12.1
[root@www.linuxidc.com ocaml-3.12.1]# ./configure
[root@www.linuxidc.com ocaml-3.12.1]# make world opt
[root@www.linuxidc.com ocaml-3.12.1]# make install

编译安装Unison
[root@www.linuxidc.com ~]# wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.40.63.tar.gz
[root@www.linuxidc.com ~]# tar -xzvf unison-2.40.63.tar.gz
[root@www.linuxidc.com ~]# cd unison-2.40.63
[root@www.linuxidc.com unison-2.40.63]# make UISTYLE=text
[root@www.linuxidc.com unison-2.40.63]# make install

在执行make install的过程中,可能会出现以下错误提示:
mv: cannot stat \'/root/bin//unison\': No such file or directory
make: [doinstall] Error 1 (ignored)
cp unison /root/bin/
cp: cannot create regular file \'/root/bin/\': Is a directory
make: *** [doinstall] Error 1

出现错误的原因在与Unison默认是将文件Copy到/root/bin目录,但Linux默认是没有该目录的,因此我们需要将生成的可执行文件unison复制到系统的PATH目录。
[root@www.linuxidc.com unison-2.40.63]# cp unison /usr/local/bin



将可执行文件unison上传到远程主机10.13.114.32
[root@www.linuxidc.com unison-2.40.63]# scp unison root@10.13.114.32:/root/
通过SSH登陆到远程主机,再将unison复制到www.linuxidc.net的PATH目录
[root@www.linuxidc.net ~]#cp unison /usr/local/bin

三、配置ssh key信任
建议通过普通用户进行操作,理由是通过root操作本身就危险,免密码登陆的root就更危险了。

在两台服务器上创建admin用户
[root@www.linuxidc.com ~]# useradd -m admin
[root@www.linuxidc.com ~]# passwd 12345
[root@www.linuxidc.net ~]# useradd -m admin
[root@www.linuxidc.net ~]# passwd 123456

在www.linuxidc.com上创建key并配置www.linuxidc.net的信任
[root@www.linuxidc.com ~]# su ? unison
[admin@www.linuxidc.com ~]$ ssh-keygen -t rsa
在提示保存私钥(key)和公钥(public key)的位置时,使用默认值;
在提示是否需要私钥密码(passphrase)时,直接敲回车,即不使用私钥密码。
之后,将生成一对密钥,id_rsa(私钥文件)和id_rsa.pub(公钥文件),保存在/home/unison/.ssh/目录下。

将公钥添加到www.linuxidc.net的 authorized_keys 文件中
将文件上传到www.linuxidc.net
[admin@www.linuxidc.com ~]$ scp ~/.ssh/id_rsa.pub unison@10.13.114.32:/home/unison/

使用rsync用户SSH到登陆到远程主机,并将公钥添加到 authorized_keys 文件中
[admin@www.linuxidc.net ~]$ mkdir .ssh
[admin@www.linuxidc.net ~]$ chmod 700 .ssh
[admin@www.linuxidc.net ~]$ mv ~/id_rsa.pub ~/.ssh/authorized_keys
[admin@www.linuxidc.net ~]$ chmod 600 ~/.ssh/authorized_keys

同理,执行以下步骤在www.linuxidc.net上创建key并配置www.linuxidc.com的信任
[root@www.linuxidc.net ~]# su ? admin
[admin@www.linuxidc.net ~]$ ssh-keygen -t rsa

将文件上传到www.linuxidc.com
[admin@www.linuxidc.net ~]$ scp ~/.ssh/id_rsa.pub unison@10.13.114.19:/home/unison/

使用rsync用户SSH到登陆到www.linuxidc.com,并将公钥添加到 authorized_keys 文件中
[admin@www.linuxidc.com ~]$ mv ~/id_rsa.pub ~/.ssh/authorized_keys

重启SSH服务
[root@www.linuxidc.com ~]# /etc/init.d/sshd restart
[root@www.linuxidc.net ~]# /etc/init.d/sshd restart

四、Unison的配置与使用
在两台服务器上创建test目录,用于测试
[root@www.linuxidc.com ~]# su - admin
[unison@www.linuxidc.com ~]$ mkdir test
[root@www.linuxidc.net ~]# su - unison
[unison@www.linuxidc.net ~]$ mkdir test

在两台服务器上分别执行一次unison,如果出现提示确认,则直接敲回车选择默认值
[unison@www.linuxidc.com ~]$ unison /home/admin/test/ ssh://admin@10.13.114.32//home/admin/test/
[unison@www.linuxidc.net ~]$ unison /home/admin/test/ ssh://admin@10.13.114.19//home/admin/test/

修改两台服务器的unison配置文件,输入以下内容
[unison@www.linuxidc.com ~]$ vim /home/unison/.unison/default.prf
 

  1. #Unison preferences file 
  2. root = /home/admin/test 
  3. root = ssh://admin@10.13.114.32//home/admin/test/ 
  4. #force = 
  5. #ignore = 
  6. batch = true 
  7. #repeat = 1 
  8. #retry = 3 
  9. owner = true 
  10. group = true 
  11. perms = -1 
  12. fastcheck = false 
  13. rsync = false 
  14. sshargs = -C 
  15. xferbycopying = true 
  16. log = true 
  17. logfile = /home/unison/.unison/unison.log 



[unison@www.linuxidc.net ~]$ vim /home/unison/.unison/default.prf

  1. #Unison preferences file 
  2. root = /home/admin/test 
  3. root = ssh://admin@10.13.114.19//home/admin/test/ 
  4. #force = 
  5. #ignore = 
  6. batch = true 
  7. #repeat = 1 
  8. #retry = 3 
  9. owner = true 
  10. group = true 
  11. perms = -1 
  12. fastcheck = false 
  13. rsync = false 
  14. sshargs = -C 
  15. xferbycopying = true 
  16. log = true 
  17. logfile = /home/unison/.unison/unison.log 



相关注解如下:
force表示会以本地所指定文件夹为标准,将该目录同步到远端。这里需要注意,如果指定了force参数,那么Unison就变成了单项同步了,也就是说会以force指定的文件夹为准进行同步,类似与rsync。
Unison双向同步基本原理是:假如有A B两个文件夹,A文件夹把自己的改动同步到B,B文件夹也把自己的改动同步到A,最后A B两文件夹的内容相同,是AB文件夹的合集。
Unison双向同步的一个缺点是,对于一个文件在两个同步文件夹中都被修改时,unison是不会去同步的,因为unison无法判断以那个为准。
ignore = Path表示忽略指定目录,即同步时不同步它。
batch = true,表示全自动模式,接受缺省动作,并执行。
-fastcheck true 表示同步时仅通过文件的创建时间来比较,如果选项为false,Unison则将比较两地文件的内容。
log = true 表示在终端输出运行信息。
logfile 指定输出的log文件。

另外,Unison有很多参数,这里仅介绍常用的几个,详细的请参看Unison手册。
-auto //接受缺省的动作,然后等待用户确认是否执行。
-batch //batch mode, 全自动模式,接受缺省动作,并执行。
-ignore xxx //增加 xxx 到忽略列表中
-ignorecase [true|false|default] //是否忽略文件名大小写

推荐阅读
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 本文介绍如何通过SSH协议使用Xshell远程连接到Ubuntu系统。为了实现这一目标,需要确保Ubuntu系统已安装并配置好SSH服务器,并保证网络连通性。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • Git管理工具SourceTree安装与使用指南
    本文详细介绍了Git管理工具SourceTree的安装、配置及团队协作方案,旨在帮助开发者更高效地进行版本控制和项目管理。 ... [详细]
author-avatar
记录生活点滴1988_234
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有