一 rsync

​  rsync全称remote sync,是一种更高效、可以本地或远程同步的命令,之所以高效是因为rsync会对需要同步的源和目的进度行对比,只同步有改变的部分,所以比scp命令更高效,但是rsync本身是一种非加密的传输,可以借助-e选项来设置具备加密功能的承载工具进行加密传输。

工作模式

  1. shell模式,也称作本地模式,用于同步本地的文件或者目录。

    rsync [OPTION...] SRC... [DEST]
    
  2. 远程shell模式,此时可以利用ssh协议承载其数据传输过程,类似scp,去同步远程主机的目录或者文件。

    Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]  ## 与scp类似
    Push: rsync [OPTION...] SRC... [USER@]HOST:DESTPush: 表示上传    Pull: 表示下载
    例如:将远程主机的一个目录同步到本地
    rsync -avP --delete billapp@10.135.134.184:/data12/data/20190704 /data12/data/20190704
    
  3. 列表模式,其工作方式与ls相似,仅列出源目录的内容。

    rsync [OPTION...] SRC...     ## 不要填写[DEST]
    
  4. 服务器模式(C-S模式),此时,将rsync在服务端作为守护进程启动,绑定端口(默认873,可通过配置文件修改)。监听收客户端的数据请求;同时,客户端可使用rsync命令把文件发送到守护进程,也可以像服务器请求获取文件,类似于git上的push、pull。客户端与服务端都有配置文件,默认是 /etc/rsync.conf,当然也可以在选项参数中指定配置文件路径。具体通过 man 1 rsync 查看帮助。

    Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]    ##  ::SRC 是指定一个模块(对应一个特定目录)rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
    Push: rsync [OPTION...] SRC... [USER@]HOST::DESTrsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
    

命令选项

-v, 详细输出模式,–verbose
-a,–archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于 -rlptgoD
-r,,–recursive 对子目录以递归模式处理
-l, --links 保留文件的符号链接
-p,–perms 保持文件权限
-t, --times 保持文件时间信息
-g,–group 保持文件属组信息
-o,–owner 保持文件属主信息
-D,–devices 保持设备文件信息
-P, 等同于 --partial --progress 显示备份过程
–delete,将源和目标服务器上有差异的部分删除掉
–daemon,以守护进程形式启动
–port= ,指定端口
–config=,指定配置文件路径
–bwlimit=KBPS,限制带宽

配置文件

## /etc/rsync.conf
## 服务端和客户端可配置成同样的配置文件uid = billapp     #系统用户
gid = sngrp            #用户所属组
use chroot = no        #是否禁锢用户家目录
max connections = 7        #最大连接用户数
pid file  = /sngrp/billapp/download/logs/rsyncd.pid        #设置rsync运行时pid文件的位置
lock file = /sngrp/billapp/download/logs/rsync.lock        #设置rsync运行时lock文件的位置
log file  = /sngrp/billapp/download/logs/rsyncd.log        #设置rsync运行时log文件的位置[download]       # 一个模块表示一个备份目录或者文件
path = /sngrp/billapp/download     # 备份目录位置
ignore errors                      # 是否忽略错误
read only = true                  # 只读,适用于Client端pull场景
list = false                      # 是否允许列出名单

启动脚本

start_rsync_server.sh 启动服务端守护进程

#!/bin/bash# rsync为了防止重复启动守护进程,建立了rsyncd.pid文件,重新启动时需要删除
rm ${HOME}/download/logs/rsyncd.pidPORT=5000
rsync --daemon --port=$PORT --config=${HOME}/users/etc/rsync.conf

stop_rsync_server.sh 停止服务端守护进程

#!/bin/bashWHOAMI=`whoami`
kill -9 `ps -ef | grep $WHOAMI | grep rsync | grep -v grep | awk '{print $2}'`

sync.sh 客户端同步脚本,启动同步

#!/bin/bash# 10.135.139.41是服务端的IP
# download是模块名
start=`date '+%Y-%m-%d %H:%M:%S'`
rsync --port=5000 -avP --delete @10.135.139.41::download /sngrp/billapp/downloadend=`date '+%Y-%m-%d %H:%M:%S'`
echo "$start  >>>>>>  $end download!" >> ${HOME}/download/logs/sync.log

rsync同步文件时如何排除指定文件夹或多个目录

参考链接:Rsync同步文件时如何排除指定文件夹或多个目录

  如果使用rsync同步目录时,需要路过某些目录下的一些子目录或者文件,可以在sync.sh脚本启动的配置项中添加这些选项:

–exclude  ## 排除特定文件或目录,可以进行模式匹配
–include   ## 包含特定文件或目录,可以进行模式匹配
–exclude-from  ## 将需要排除特定文件或目录写入到一个文件列表中,通过文件列表来查找(文件较多时应用)
–files-from      ## 将需要包含特定文件或目录写入到一个文件列表中,通过文件列表来查找(文件较多时应用)

举例:

##   排除特定目录或文件
rsync -a --exclude 'dir1' src_directory/ dst_directory/## 只排除目录内容,但不是目录本身
rsync -a --exclude 'dir1/*' src_directory/ dst_directory/##   排除多个文件或目录
##  排除file1.txt,排除目录dir/*,排除目录dir2
##  方法一:指定多个--exclude选项
rsync -a --exclude 'file1.txt' --exclude 'dir1/*' --exclude 'dir2' src_directory/ dst_directory/##    方法二:用括号{}列出您想要排除的文件和目录,中间用逗号隔开
rsync -a --exclude={'file1.txt','dir1/*','dir2'} src_directory/ dst_directory/## 方法三:将指定要排除的文件和目录写入一个文本文件中,并将文件传递给--exclude-from选项
vi exclude-file.txt
##  编辑exclude-file.txt文件,加入以下内容:
file1.txt
dir1/
dir2
##  rsync添加--exclude-from选项,并将文件名exclude-file.txt传递给它
##  执行结果与上面的方法相同
rsync -a --exclude-from='exclude-file.txt' src_directory/ dst_directory/##   基于匹配文件或目录名称的模式排除文件和目录。
##  例如,rsync要排除同步复制.jpg图片文件
rsync -a --exclude '*.jpg*' src_directory/ dst_directory/##   假设您只想排除 除了.jpg结尾的文件 之外的所有其他文件和目录,使用以下命令:
rsync -a -m --include='*.jpg' --include='*/' --exclude='*' src_directory/ dst_directory/
##  解析:
##  -m - 移除空目录
##  当使用多个包含/排除选项时,应用第一个匹配规则。
##  --include='*.jpg' - 首先,我们应该包括所有的.jpg 文件。
##  --include='*/' - 然后我们指定包含src_directory目录中的所有子目录。没有这个,rsync将只复制顶层目录中的*.jpg文件。##    另一个选项是通过管道将find命令的输出传输到rsync:
find src_directory/ -name "*.jpg" -printf %P\\0\\n | rsync -a --files-from=- src_directory/ dst_directory/## -printf %P\\0\\n - 将从文件路径中删除src_directory/。
##  --files-from=- - 意味着只包含来自标准输入的文件(从find命令传递的文件)。##  --files-from 和 --include 的作用正好与 --exclude 和 --exclude-from 相反
##  它们使用的方法相同

  也可以使用 --files-from=‘include-file.txt’ 参数,将你需要包含的所有子目录和文件写入 include-file.txt 文件中。例如:

##   修改sync.sh
#!/bin/shstart=`date '+%Y-%m-%d %H:%M:%S'`rsync --port=11000 -avP -r --files-from='home-include-file.txt' @10.135.139.43::download /sngrp/billappend=`date '+%Y-%m-%d %H:%M:%S'`
echo "$start  >>>>>>  $end download!" >> /sngrp/billapp/rsync/logs/sync.log## ------------------------------------------------------------------------
##  把--delete选项去掉,防止有些目录没有包含,导致删除本地已有的目录,比如删除本地的隐藏目录
##  添加-r选项,这样才能递归拷贝深层子目录中的数据!!!!!!vim home-include-file.txt
##  添加如下内容:
dir1    ##  如果写成dir1/*,会报错,不能匹配到该类型的文件,他不支持'*'这种模式匹配
dir2
file1
file2

常见问题

错误1: rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(794) [receiver=3.0.2]
解决:很大可能是服务器端没有开启 rsync 服务。开启服务。 或者开启了防火墙指定的端口无法访问。 错误2:@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2]
解决:服务器端同步目录没有权限,cwrsync默认用户是Svcwrsync。为同步目录添加用户Svcwrsync权限。 错误3:@ERROR: failed to open lock file
rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2]
解决:服务器端配置文件 rsyncd.conf中添加 lock file = rsyncd.lock 即可解决。 错误4:@ERROR: invalid uid nobody
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.2]
解决:在rsyncd.conf文件中添加下面两行即可解决问题
UID = 0
GID = 0 错误5:@ERROR: auth failed on module test2
rsync error: error starting client-server protocol (code 5) at main.c(1296) [receiver=3.0.2]
解决:服务端没有指定正确的secrets file,请在 [test2]配置段添加如下配置行:
auth users = coldstar #同步使用的帐号
secrets file = rsyncd.secrets #密码文件 错误6:password file must not be other-accessible
解决:客户端的pass文件要求权限为600, chmod 600 /etc/rsync.pass 即可。 错误7:rsync: chdir /cygdrive/c/work failed
: No such file or directory (2)
解决:服务器端同步文件夹路径或名称写错了,检查path。


二 md5校验目录是否一致

creat_md5.sh 将目录下所有的普通文件生成md5校验码,子目录不考虑

#!/bin/bashDate=$(date +%Y%m%d%H%M%S)##    由于md5sum对大型文件需要耗费很长的时间,所以跳过大于50M的文件
find ./ -maxdepth 1 -type f -size -50M | while read filename
domd5sum $filename >> mymd5.$Date;
doneexit 0

​ 将这个脚本事先在需要同步的目录下运行一遍,生成myd5文件,然后同步到客户端。通过md5sum校验:

md5sum -c mymd5.*

rsync同步远程主机目录,并通过md5校验目录相关推荐

  1. rsync同步技巧---跳过指定文件或目录

    前言 当我们对大量的文件做同步的时候,有时我们并不一定是需要目录中的所有文件,这时候我们就需要对这部分文件和目录(例如:临时文件或者缓存文件)进行剔除,使同步过来的文件中不包含这些杂质.下面要介绍的就 ...

  2. linux rsync 目录同步,linux下使用rsync同步目录

    本文描述了linux下使用rsync单向同步两个机器目录的问题. 使用rsync同步后可以保持目录的一致性(含删除操作). 数据同步方式 1.从主机拉数据 备机上启动的流程 同步命令: rsync - ...

  3. linux 目录md5校验,【我的Linux,我做主!】浅谈MD5校验文件完整一致性

    目录: (一)MD5介绍 (二)md5sum命令 (三)实战演练 (一)MD5介绍 (1.1)MD5即Message-Digest Algorithm 5(信息-摘要算法 第5版),用于确保信息传输完 ...

  4. 如何在linux下用rsync同步文件以及它的用法和scp的用法

    如何在linux下用rsync同步文件以及它的用法和scp的用法 2010年06月06日 root@legend-laptop:/home/legend/httpd~/cgi-bin# rsync - ...

  5. lqc_必备技能rsync同步备份

    第十三章实验(一):必备技能rsync同步备份 注意:还原192.168.100.150和192.168.100.151 1.rsync同步备份 1)了解rsync rsync是一个开源快速备份工具 ...

  6. rsync同步服务实验讲解

    rsync 同步服务 复制: 源所有数据 同步: 只传输变化数据 • 命令用法 – rsync [选项...] 源目录 目标目录 • 本地同步 – rsync [选项...] 本地目录1 本地目录2 ...

  7. 在Windows中配置Rsync同步

    在Windows中配置Rsync同步 Rsync是一款不错的文件免费同步软件,可以镜像保存整个目录树和文件系统,同时保持原来文件的权限.时间.软硬链接.第一次同步时 rsync 会复制全部内容,下次只 ...

  8. linux rsync同步 --delete参数 删除目标目录比源目录多余文件

    在日常运维工作中,我们经常用到rsync这个同步神器.有时在同步两个目录时,会要求删除目标目录中比源目录多出的文件,这种情况下,就可用到rsync的--delete参数来实现这个需求了. 实例说明: ...

  9. Linux同步自己的配置,Linux学习心得之——Rsync同步配置

    Linux学习心得之--Rsync同步配置 1 使用软件 类unix系统下的数据镜像备份工具:rsync. 2 安装说明 2.1 获取rsync 下载最新版本的rsync-3.0.8.tar.gz 2 ...

最新文章

  1. MIME types [记录]
  2. BZOJ 3994: [SDOI2015]约数个数和 [莫比乌斯反演 转化]
  3. all resources based on handshake
  4. 高级concurrent包
  5. 跟我学调试-必备神器:Postman
  6. 11.乘最多水的容器
  7. 别傻了,人家离职你也离
  8. Eclipse-无法引用maven依赖的类/没有MavenDependencies/没有buildpath
  9. 安徽省2012年下半年计算机水平考试(二级 c语言程序设计),安徽省计算机等级级考试真题C语言2012年12月.doc...
  10. 虹膜识别与虹膜定位(续)算法实现
  11. 天天学到夜里12点,感觉越学越迷茫,怎么办?
  12. luajit日记-配置说明
  13. sqlserver 'sa'密码忘记,windows集成身份验证都登录不了解决办法
  14. 易优超级字典生成器 v3.35 下载
  15. 华为网络拒绝接入_为何华为手机网络拒绝接入
  16. 360 度测试:Kafka 会丢数据么?其高可用是否满足需求?
  17. VS2012(2013、2015) OpenCV “HEAP:Invalid Address specified to RtlValidateHeap( 000D0000, 019FEF18 )
  18. 阿里Java后端开发面经,面试官都替我感到绝望
  19. 京东金融支持的银行卡只有几张
  20. 华为eNsp 配置ospf协议

热门文章

  1. Raspberry Pi构建Android示波器
  2. 基于STM32CubeIDE 开发 FATFS + SD卡 + USB 的读卡器功能
  3. android 获取wifi主频,史上最全最详细无线通信频率分配表(绝对收藏)
  4. 【数据分析】基于matlab GUI齿轮箱振动数据分析【含Matlab源码 2122期】
  5. C语言中的整型数据类型(你真的了解吗)
  6. 终端配置多网卡实现同时访问内外网
  7. python爬虫---酷安(安卓app的聚集地)
  8. ps cs5 gif 动画 分解
  9. PAT-小技巧-一行输出,空格分隔,末尾(最后一位)无空格格式
  10. Microsoft Visual C++运行库下载地址 2008~2017等各版本下载