rsync 简介

什么是rsync

rsync是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具。

全量:将全部数据,进行传输覆盖
增量:只传输差异部分的数据

实现增量复制原理

Rsync通过其独特的“快速检查”算法,实现增量传输数据

[root@backup ~]#man rsync
Rsync  finds  files  that  need  to  be transferred using a “quick check” algorithm (by default)  that  looks  for  files  that  have changed  in  size  or  in  last-modified time.  Any changes in the other preserved attributes (as requested by options) are  made  on the  destination file directly when the quick check indicates that the file’s data does not need to be updated.

在同步备份数据时,默认情况下,Rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限,属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可以实现快速的同步备份数据。

centos 5 rsync 2.x 先比对再同步,速度较慢
centos 6 rsync 3.x 一边比对,一边对差异部分进行同步

软件版本

[root@mico ~]# rsync --version
rsync  version 3.1.2  protocol version 31
Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,append, ACLs, xattrs, iconv, symtimes, preallocrsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details

rsync 软件功能介绍

类似于 cp 命令 -- 实现本地备份传输数据
类似于scp 命令 -- 远程备份传输数据
类似于 rm 命令 -- 实现无差异同步备份
类似于 ls 命令 -- 本地文件信息查看

rsync 命令属于1 v 4 的命令

rsync==cp

[root@mico practices]# cp -a /root/practices/source/tmp_file.txt  tmp/
cp:是否覆盖"tmp/tmp_file.txt"?
[root@mico practices]# rm -rf tmp/tmp_file.txt
[root@mico practices]# cp -a /root/practices/source/tmp_file.txt  tmp/
[root@mico practices]# ls tmp/
tmp_file.txt
[root@mico practices]# rm tmp/tmp_file.txt
rm:是否删除普通空文件 "tmp/tmp_file.txt"?
[root@mico practices]# rsync /root/practices/source/tmp_file.txt tmp/
[root@mico practices]# ls tmp/
tmp_file.txt
[root@mico practices]# ls tmp/tmp_file.txt
tmp/tmp_file.txt

rsync == scp

使用scp实现

检查对端服务器目标位置上是否有该文件

root@vicodona practices]# ls tmp/tmp_file.txt
ls: cannot access tmp/tmp_file.txt: No such file or directory

从本地拷贝到远端服务器上

[root@mico practices]# ls tmp/tmp_file.txt
tmp/tmp_file.txt
[root@mico practices]# scp -rp /root/practices/source/tmp_file.txt 47.107.108.121:/root/practices/tmp/
The authenticity of host '47.107.108.121 (47.107.108.121)' can't be established.
ECDSA key fingerprint is SHA256:XRAgcbGsezufwlo5zaYbN4gO/8tS7pHAcNtfc7T1URA.
ECDSA key fingerprint is MD5:e0:07:d1:80:ae:1f:8c:58:46:69:15:d6:46:0e:76:4f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '47.107.108.121' (ECDSA) to the list of known hosts.
root@47.107.108.121's password:
tmp_file.txt                               100%    0     0.0KB/s   00:00
[root@mico practices]#

检查远端服务器上的结果

[root@vicodona practices]# ls tmp/tmp_file.txt
tmp/tmp_file.txt
使用rsync实现
[root@mico practices]# rsync -rp /root/practices/source/tmp_file.txt 47.107.108.121:/root/practices/tmp/
root@47.107.108.121's password:
[root@mico practices]# 

检查远端服务器上的结果

[root@vicodona practices]# ls tmp/tmp_file.txt
tmp/tmp_file.txt

rsync==rm

rm 操作
[root@mico practices]# ls source/tmp_file.txt
tmp/tmp_file.txt
[root@mico practices]# rm -rf source/tmp_file.txt
[root@mico practices]# ll source/tmp_file.txt
ls: 无法访问source/tmp_file.txt: 没有那个文件或目录
[root@mico practices]# 
rsync操作

创建一个空目录,使用空目录进行无差异同步

[root@mico practices]# ll tmp/
总用量 0
-rw-r--r-- 1 root root 0 7月  12 15:17 tmp_file.txt
[root@mico practices]# mkdir null
[root@mico practices]# rsync --delete null/ tmp/
rsync: --delete does not work without --recursive (-r) or --dirs (-d).
rsync error: syntax or usage error (code 1) at main.c(1567) [client=3.1.2]
[root@mico practices]# rsync -a --delete null/ tmp/
[root@mico practices]# ll tmp/
总用量 0

rsync==ls -l

使用 rsync 可以实现与ls类似的功能

[root@mico practices]# ls -l source/tmp_file.txt
-rw-r--r-- 1 root root 0 7月  12 15:44 source/tmp_file.txt
[root@mico practices]# rsync source/tmp_file.txt
-rw-r--r--              0 2019/07/12 15:44:57 tmp_file.txt
[root@mico practices]# 

rsync 命令特性(7个)

  • 支持拷贝普通文件与特殊文件如链接文件,设备等。
  • 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
   #tar zcvf backup_1.tar.gz  /opt/data  -exclude=mico   说明:在打包/opt/data时就排除了mico命名的目录和文件。
  • 可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变-p。
  • 可实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar -N)
    # 将备份/home 目录自 2008-01-29 以来修改过的文件# tar -N 2008-01-29 -zcvf /backups/inc-backup_$(date +%F).tar.gz /home# 将备份 /home 目录昨天以来修改过的文件# tar -N $(date -d yesterday "+%F") -zcvf /backups/inc-backup_$(date +%F).tar.gz /home# 添加文件到已经打包的文件# tar -rf all.tar *.gif说明:这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
  • 可以使用rcp、rsh、ssh等方式来配合进行隧道加密传输文件(rsync本身不对数据加密)
  • 可以通过socket(进程方式)传输文件和数据(服务端和客户端)*****。重点掌握。
  • 支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。

rsync 的企业工作常见说明

  • 两台服务器之间数据同步(定时任务cron+rsync)
    同步网站内部人员数据信息(定时任务最小周期为1分钟)

  • 两台服务器之间数据同步(实时任务inotify/sersync/lrsyncd+rsync)
    同步网站用户人员数据信息

rsync的使用方式

rsync软件工作方式

SYNOPSIS本地数据同步方式Local:  rsync [OPTION...] SRC... [DEST]远程数据同步方式Access via remote shell:Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]Push: rsync [OPTION...] SRC... [USER@]HOST:DEST守护进程方式同步数据Access via rsync daemon:Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]Push: rsync [OPTION...] SRC... [USER@]HOST::DESTrsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

本地数据同步方式(类似于cp)

Local:  rsync [OPTION...] SRC... [DEST]
参数 含义
rsync 数据同步命令
[OPTION...] rsync命令参数信息
SRC 要同不得数据信息(文件或目录)
[DEST] 将数据传输到什么位置

实例演示命令

[root@backup ~]# rsync  /etc/hosts /tmp/
[root@backup ~]# ls /tmp/hosts
/tmp/hosts

远程数据同步方式(类似scp)---又称为隧道传输

Access via remote shell:Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

说明:需要进行交互传输数据。如果想实现免交互传输数据,需要借助ssh+key方式实现

pull: 拉:
[USER@] : 以什么用户身份传输数据信息
HOST: 远程主机信息(IP地址信息 主机名称信息)
SRC: 远端要恏过来的数据信息
[dest] 恏到本地什么位置
push:推:
SRC: 本地要怼过去的数据信息
DEST 怼到远端什么位置

【实践操作】pull拉

从远端拉文件到当前目录

[root@vicodona tmp]# touch 1.txt
[root@vicodona tmp]# ll
total 0
-rw-r--r-- 1 root root 0 Jul 13 16:00 1.txt
[root@vicodona tmp]# pwd
/root/practices/tmp
----------------------------------------
[root@mico tmp]# rsync 47.107.108.121:/root/practices/tmp/1.txt .
root@47.107.108.121's password:
[root@mico tmp]# ll
总用量 0
-rw-r--r-- 1 root root 0 7月  13 16:03 1.txt
【实践操作】push推(目录)

将本地的tmp目录推到远端服务器上

[root@vicodona practices]# ls tmp
ls: cannot access tmp: No such file or directory
----------------
[root@mico practices]# rsync -r /root/practices/tmp  47.107.108.121:/root/practices
root@47.107.108.121's password:
----------------------------
[root@vicodona practices]# ll
total 4
drwxr-xr-x 2 root root 4096 Jul 13 16:11 tmp

如果仅是推送目录下的文件并不包括目录本身,使用/tmp/

/tmp --表示将tmp目录本身及目录下的内容进行传输
/tmp/ --表示只传输tmp目录下面的内容信息

守护进程方式同步数据

Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DESTrsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

配置rsync守护进程方式(需要有服务端跟客户端)

  1. vicodona 服务器作为rsync服务端
  2. 以rsync客户端作为参照物,将数据推到rsync服务器上

配置rsync服务端(将服务端配置到vicodona服务器上)

第一步:检查软件是否存在

[root@vicodona ~]# rpm -qa|grep rsync
rsync-3.1.2-4.el7.x86_64

第二步:进行软件服务配置

[root@vicodona ~]# cat /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode# See rsyncd.conf man page for more options.# configuration example:# uid = nobody
# gid = nobody
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2# [ftp]
#        path = /home/ftp
#        comment = ftp export areauid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 47.107.108.121/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
fake super = yes
[backup]
comment = "backu dir by vicodona"
path = /backup

第三步:创建rsync用户

[root@vicodona ~]# id rsync
id: rsync: no such user
[root@vicodona ~]# useradd -s /sbin/nologin -M rsync

第四步:创建数据备份存储目录,目录修改属主

[root@vicodona ~]# mkdir /backup/
[root@vicodona ~]# chown -R rsync.rsync /backup/

第五步:创建认证用户密码文件

[root@vicodona ~]# echo "rsync_backup:vicodona123">>/etc/rsync.password
[root@vicodona ~]# chmod 600 /etc/rsync

第六步:启动rsync服务

[root@vicodona ~]# rsync --daemon

查看启动的服务

[root@vicodona ~]# ps -ef|grep rsync
root      7860     1  0 08:58 ?        00:00:00 rsync --daemon
root      7863  7841  0 08:58 pts/19   00:00:00 grep --color=auto rsync
[root@vicodona ~]# netstat -lntup |grep rsync
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      7860/rsync
tcp6       0      0 :::873                  :::*                    LISTEN      7860/rsync      

配置rsync客户端(其他服务器作为客户端)

第一步:查看软件是否存在

[root@mico ~]# rpm -qa|grep rsync
rsync-3.1.2-4.el7.x86_64

第二步:创建认证文件
客户端认证文件只需要有密码即可

[root@mico ~]# echo "vicodona123">>/etc/rsync.passwd
[root@mico ~]# chmod 600 /etc/rsync.passwd 

第三步:实现数据传输
交互式

[root@mico practices]# rsync -azvP /root/practices/tmp/1.txt rsync_backup@47.107.108.121::backup
Password:
sending incremental file list
1.txt0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)sent 88 bytes  received 43 bytes  29.11 bytes/sec
total size is 0  speedup is 0.00

非交互式

[root@mico practices]# rsync -azvP /root/practices/tmp/1.txt rsync_backup@47.107.108.121::backup --password-file=/etc/rsync.passwd
sending incremental file list
1.txt0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)sent 88 bytes  received 43 bytes  262.00 bytes/sec
total size is 0  speedup is 0.00

rsync守护进程传输数据原理

rsync 命令同步参数选项和特殊参数

目录参数 参数说明
-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run 现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--max-delete=NUM 最多删除NUM个文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名
--timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 绑定到特定的地址
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
--progress 在传输时现实传输过程
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, --help 显示帮助信息

保持同步目录及文件属性:

这里的-avzP相当于 -vzetopdDlP,生产环境常用的参数为 -avzP
在脚本中可以报-vP去掉
--progress可以用-P代替

daemon启动扩展参数

参数 说明
--daemon daemon表示以守护进程的方式启动rsync服务。
--address 绑定指定IP地址提供服务。
--config=FILE 更改配置文件路径,而不是默认的/etc/rsyncd.conf
--port=PORT 更改其它端口提供服务,而不是缺省的873端口

特殊参数实践

指定ip

[root@vicodona backup]# rsync --daemon --address=47.107.108.121
[root@vicodona backup]# netstat -lntup|grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      7860/rsync
tcp6       0      0 :::873                  :::*                    LISTEN      7860/rsync        --------------------
[root@mico practices]# rsync -azvP /root/practices/tmp/1.txt rsync_backup@47.107.108.121::backup --password-file=/etc/rsync.passwd
sending incremental file list
1.txt0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)sent 88 bytes  received 43 bytes  262.00 bytes/sec
total size is 0  speedup is 0.00

服务端指定服务端口

[root@vicodona  ~]# rsync --daemon --port=5222
[root@vicodona  ~]# netstat -lntup|grep rsync
tcp        0      0 0.0.0.0:5222      0.0.0.0:*           LISTEN      2598/rsync
tcp        0      0 :::5222            :::*                 LISTEN      2598/rsync      

转载于:https://www.cnblogs.com/vicodona/p/11175833.html

Rsync学习之旅上相关推荐

  1. 如何系统地自学python100天_Github上发布了一个Python学习秘笈,从萌新到王者的100天Python学习之旅...

    北京千锋互联科技有限公司成都分公司骆昊(jackfrued)在Github上发布了一个Python学习秘笈,从萌新到王者的100天Python学习之旅. 简单的说,Python是一个"优雅& ...

  2. hadoop学习之旅1

    大数据介绍 大数据本质也是数据,但是又有了新的特征,包括数据来源广.数据格式多样化(结构化数据.非结构化数据.Excel文件.文本文件等).数据量大(最少也是TB级别的.甚至可能是PB级别).数据增长 ...

  3. 基于设计模式的学习之旅-----访问者模式(附源码)

    基于设计模式的学习之旅-----访问者模式 1.初始访问者模式 2.什么是访问者模式 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 3.模 ...

  4. WCF学习之旅—WCF服务的WAS寄宿(十二)

    上接    WCF学习之旅-WCF服务部署到IIS7.5(九) WCF学习之旅-WCF服务部署到应用程序(十) WCF学习之旅-WCF服务的Windows 服务程序寄宿(十一) 八.WAS宿主 IIS ...

  5. java message bus_【Microsoft Azure学习之旅】消息服务Service Bus的学习笔记及Demo示例...

    今年项目组做的是Cloud产品,有幸接触到了云计算的知识,也了解并使用了当今流行的云计算平台Amazon AWS与Microsoft Azure.我们的产品最初只部署在AWS平台上,现在产品决定同时支 ...

  6. 新手神器!不用部署深度学习环境、上传数据集!(附代码视频教程)

    来源:大数据文摘 作者:Emil Wallnér 本文长度为4600字,建议阅读7分钟 本文带你快速创建神经网络,开启深度学习之旅. 前言 深度学习的浪潮在五年前开始兴起.随着计算能力的爆炸型增长和几 ...

  7. 基于 Android NDK 的学习之旅----- C调用Java

    2019独角兽企业重金招聘Python工程师标准>>> 基于 Android NDK 的学习之旅----- C调用Java 许多成熟的C引擎要移植到Android 平台上使用 , 一 ...

  8. 我的angularjs源码学习之旅2——依赖注入

    依赖注入起源于实现控制反转的典型框架Spring框架,用来削减计算机程序的耦合问题.简单来说,在定义方法的时候,方法所依赖的对象就被隐性的注入到该方法中,在方法中可以直接使用,而不需要在执行该函数的时 ...

  9. NGUI从入门到实战第1章开启NGUI学习之旅

    NGUI从入门到实战第1章开启NGUI学习之旅 NGUI是Unity最重要的插件之一.使用NGUI可以高效地为游戏添加界面.本书将带领大家学习NGUI.作为NGUI学习之旅的第一站,本章会在整体上介绍 ...

最新文章

  1. HashTab---Windows资源管理器的文件属性窗口中添加了一个叫做”文件校验”的标签...
  2. 全球及中国卫星通信设备市场应用需求分析与投资潜力预测报告2022年
  3. ATPCS和AAPCS
  4. 杂项相关工具的使用方法(边刷题边更新...)
  5. 【effective c++】继承与面向对象设计
  6. 本地方法栈线程公有_Java运行时区域,哪些区域是线程私有的?哪些是共有的?...
  7. 基于express和vue框架的校园商品交易平台 答辩PPT免费下载
  8. UGUI的表格布局组件
  9. MFC BMP设置Bitmap的分辨率DPI为600点 gdiplus 生成标签
  10. Linux应用开发自学之路
  11. 用计算机怎么按四分之三次方等于多少,八十一分之十六的负四分之三次方怎么算,要具体过程,答案是多少?...
  12. Linux之VNC远程桌面安装和使用
  13. 智力测验题(面试用)
  14. 论文学习 AInnoFace:Accurate Face Detection for High Performance
  15. 如何在Google表格中直接使用Google翻译
  16. js直接调用系统打印机进行打印
  17. 华为云教程(弹性云服务器ECS)
  18. Win8.1 安装NLTK及nltk数据
  19. BZOJ 1812 IOI 2005 riv
  20. c语言处理用户错误输入,C语言实现用户输入

热门文章

  1. 如何将外部的obj模型导入OpenGL
  2. 程序员进阶之算法练习(一)
  3. 解决outlook无法启动
  4. [转载红鱼儿]kbmmw 开发点滴:kbmMWQuery插入记录
  5. [Winodows Phone 7控件详解]Silverlight toolkit for Windows Phone 7.1控件-3
  6. Flutter轮播图
  7. Mr.J-- HTTP学习笔记(七)-- 缓存
  8. Vertica系列:从一些细节看Vertica为什么是一个优秀的数据仓库平台
  9. 【bzoj1532】[POI2005]Kos-Dicing 二分+网络流最大流
  10. clover 在win10下工作不正常