热门标签 | 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] //是否忽略文件名大小写

推荐阅读
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
  • GSIOpenSSH PAM_USER 安全绕过漏洞
    漏洞名称:GSI-OpenSSHPAM_USER安全绕过漏洞CNNVD编号:CNNVD-201304-097发布时间:2013-04-09 ... [详细]
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社区 版权所有