rsync用法

1. Rsync的基本介绍
开源,快速,多功能。
可实现全量、增量的本地或远程的数据同步(数据备份)
(最重要的特点:能够实现远程增量备份)
支持windows/Linux/Unix多平台
 
 
在本地备份时,rsync就类似与cp(全量拷贝), 但是,rsync能够实现增量拷贝。
在远程备份时,rsync就类似与scp(全量拷贝),但是,rsync能够实现增量拷贝。
 
rsync还能实现删除功能。
 
2. rsync的增量同步:
通过"quick check"算法,能够实现:
1)同步大小
2)同步最后修改时间发生变化的文件、目录。
3)根据权限的变化而同步。
4)能够只同步一个文件内发送变化的部分。
 
3. Rsync的使用场景
(1)定时备份
   1.1)两台服务器之间的数据同步。
       比如,工作服务器和备用服务器之间的数据同步。
   1.2)把所有服务器的数据,同步到一个”备份服务器"中。
 (2) 实时备份
     数据发生变化后,自动的及时进行备份。
     方式1:rsync结合inotify
     方式2:rsync结合sersync
     注意:inotify和sersync都是用来监控变化的。
 
4. Rsync的工作方式
1)在单个主机(本地)内实现数据备份(类似cp)
2) 远程备份,是借助rcp(远程文件拷贝)或ssh通道来传输数据。
   类似与scp (但是具有增量同步功能)
3)以守护进程的方式数据备份。
 
 
5. Rsync的安装
   1)检查是否已经安装rsync
     # rpm -qa rsync
  
      检查版本
      # rsync --version
   
   2) 如果还没有安装,就需要安装:
     # yum install  rsync
  
   3) rsync的配置
      配置文件:/etc/rsyncd.conf
 
      如果不使用守护进程的方式来使用rsync,就不需要配置rsync
  
6. Rsync实现本地备份
  1)备分一个文件
  # rsync /data/test.txt   /tmp
    把/data/目录下的test.txt, 备份到/tmp目录下。
   
  2)备份一个目录(文件夹)
  # rsync -r /data/user_data  /tmp 
    把/data目录下的文件夹user_data, 备份到/tmp目录下。
    注意:user_data目录本身以及该目录下的所有文件, 都备份到/tmp目录下   
  
  # rsync -r  /data/user_data/  /tmp
    把/data/user_data/下面的所有文件(包括子目录),都备份到/tmp目录下
 
    注意: 
    rsync -r  /data/user_data/  /tmp 
    和
    rsync -r  /data/user_data/  /tmp/ 
    是等效的!   
 
  3)能够删除
    注意: #  rsync -r  /root/user_data  /tmp/
              将把user_data目录下所有文件以及这个目录本身,拷贝到/tmp目录下。
              如果/tmp目录下,已经有user_data文件夹了,
              那么/tmp/user_data中存在但是/root/user_data没有的文件,不会删除!
              那如何删除呢?
 
              使用 --delete
            
              rsync -r --delete /root/user_data  /tmp/
           
  补充:rsync的常用选项,
     -r 用于对目录的备份。即对子目录做递归处理。
     -t 用来保持文件的时间信息
     -o 用来保持文件的属主信息
     -P 用来显示同步的过程和进度信息
     -D 用来保持设备文件信息
     -l 用来保持软链接
     -v 输出详细信息 
     -z 在传输时之前,进行压缩,对端接收后将自动解压。
     -e 指定使用的通道(比如使用ssh通道)
     -a 就是相当与 -rtopgDL
        实际同步时,常常使用-avz
      
     --bwlimit 用来限制速度
         比如: --bwlimit=100k
      用于排除文件
      --exclude 
     --exclude-from
  
7. 使用Rsync实现远程同步(基于ssh通道)
   注意:使用ssh通道,传输的是增量拷贝的内容
 
   实例:
   推(上传)
   rsync -r -e  -avz 'ssh -p 50000'  /data  liubei@192.168.1.120:~
   说明: -e 'ssh -p 50000' 表示使用ssh通道进行传输
 
   拉(下载)
   rsync -ravz -e 'ssh -p 50000'  liubei@192.168.1.120:~/data    /tmp
   
   补充:
   查询某个服务的端口号
   1)netstat -lntup  |  grep 服务名
     比如:
     # netstat -lntup | grep ssh
   2) lsof -i  |  grep 服务名
     比如:
     # lsof -i | grep ssh
 
8. 以守护进程的方式启动rsync
   必须先编辑好rsync的配置文件
    
   #vim  /etc/rsyncd.conf
---------------------------------
uid = rsync        用户名id
gid = rsync        用户组id
use chroot = no    安全选项,在内网,一般选择no
max connections = 200   同时可并发访问的客户端数量
timeout = 300            超时时间
pid file = /var/run/rsyncd.pid   存放rsync进程的进程号 
lock file = /var/run/rsync.lock  锁文件,用来实现互斥
log file = /var/log/rsyncd.log
日志文件,如果不指定该文件,默认日志文件就是/var/log/messages
[data]     自定义模块,以后客户端同步时,可以指定模块名
path = /data/    该模块的根目录
ignore error     忽略错误
read only = false  可写
list = false       可列表
host allow = 192.168.1.0/24   哪些主机可以连接到该服务器
host deny = 0.0.0.0/32        哪些主机不可以连接到该服务器
auth users = rsync_backup     rsync的虚拟用户
secrets file = /etc/rsync.password    该虚拟用户的密码保存在哪个文件
-------------------------------------
 
该配置文件如果某一个有语法错误,那么后面的配置就无效!
就使用默认配置! 
 
  
9. 启动Rsync
  以守护进程的方式启动Rsync
  # rsync  --daemon
 
  检查是否成功:
  1)查看rsync的日志
     cat /var/log/rsyncd.log
 
  2) ps -ef | grep rsync
     查看rsync这个进程是否启动
 
  3)netstat -lntup | grep rsync
 
10. 根据配置文件,完善相关设置
  1)创建rysnc用户
     useradd  rsync -s /sbin/nologin
  2) 创建模块指定的目录
     mkdir  /data
     并授权给rsync以只读的权限
     chown  -R rsync.rsync  /data
  3) 设置虚拟帐号的密码文件
     echo "rsync_backup:123456" > /etc/rsync.password
     表示,虚拟帐号rsync_backup的密码是123456
      
     并降低这个密码文件的权限
     chmod 600 /etc/rsync.password
 
  4) 关闭防火墙,或则让防火墙开放rsync的端口(873)
     否则,远程的客户端无法连接进来。
 
  5)关闭selinux
     selinux, 是内核强制访问控制安全系统。
     开启selinux后,一些软件可能受到影响。
 
     检查是否已经关闭selinux
     # getenforce
      
     关闭selinux:
     修改/etc/sysconfig/selinux
     把 SELINUX=enforcing
     修改为: SELINUX=disabled
     再重启系统
 
11) 可以在开机时就自动把Rsync设置为守护进程
     echo "/usr/bin/  /etc/rc.local
 
12) 客户端的设置
    (1)先检查是否已经安装rsync
     (2) 设置密码
         以使用守护进程rsync时,需要使用虚拟用户rsync_backup
         所以,在客户端,需要设置这个虚拟账户所使用的密码
        
         echo "123456" > /etc/rsync.password
         chmod 600  /ect/rsync.password
   
13) 在客户端使用Rsync
      方式1:(推荐)
    
      推(上传)
      rsync -avz -r /data  rsync_backup@192.168.1.4::data --password-file=/etc/rsync.password
      表示,把本地的/data目录,通过守护进程Rsync,上传到Rsync服务器192.168.1.4,
            保存到服务器端的data模块的根目录
 
      拉(下载)
      rsync -avz -r  rsync_backup@192.168.1.4::data /tmp --password-file=/etc/rsync.password 
       
      方式2:
      rsync -avz -r  rsync://rsync_backup@192.168.1.4/data  /tmp --password-file=/etc/rsync.password      
      注意:192.168.1.4/data 中data是Rsync服务器端的模块名
11. rsync的排除选项
  rsync的各种选项,在3个模式下都可以使用。
 
  --exclude
  --exclude-from
 
  1) --exclude的使用
    在同步时,希望某些文件(文件夹)不被同步。
   
    rsync -r  --exclude=5.txt  /data  /tmp/
    把/data目录同步到/tmp下,同时排除5.txt(使用相对路径)
 
    rsync --exclude={3.txt,5.txt,6.txt}  -r /data /tmp/
    排除了多个文件,中间用逗号分隔,外面用{ }括起来
 
    rsync --exclude={3..6}.txt  -r /data /tmp/
    排除3.txt,4,txt,...6.txt
 
    注意:被排除的文件,使用相对路径!
 
  2) --exclude-from
    当需要排除很多而且文件名没有规律的文件时,可以使用--exclude-from
    rsync -r --exclude-from=/root/mylist /data  /tmp
    排除文件存放在/root/mylist文件中.
    --------------/root/mylist-----------------
    1.txt
    5.txt
    a.txt
    d.txt
   -------------------------------------------
    
   注意:--exclude-from后的文件,使用绝对路径。
         该文件内存放需要排除的文件,
         一个文件占用一行(使用相对路径)
 
12. 在rsync的服务器端也可以设置排除
    在rsync的配置文件中设置。
    --------------/etc/rsyncd.conf--------------
    ........
    exclude = 1.txt 6.txt c.txt
    .......
    --------------------------------------------
    多个文件之间使用空格分隔,使用相对路径
    
    在服务器端配置后,就永久有效,而且在客户端就不需要使用--delete选项。
 
    注意:一般都在客户端使用排除选项。
 
有差异同步和无差异同步
   一般同步时,可能造成客户端和服务端的数据不一致,即有差异同步。
   使用 --delete选项,即可实现无差异同步!
 
   推(上传)
   使用--delete, 可以删除服务的部分文件。
   使用场景:备份。
 
   拉(下载)
   使用--delete, 可以删除本地的部分文件。
   使用场景:主要用于代码发布。
 
rsync共享多个目录
  即服务器端配置多个模块。
  /etc/rsyncd.conf
  -------------------------
  各模块的公共配置
  [模块名]
  该模块的配置
  [模块名]
  该模块的配置
  [模块名]
  该模块的配置
  -------------------------
  注意, 以及配置必须在模块内定义
  ignore errors
  host allow = 192.168.1.0/24
  host deny = 0.0.0.0/32
   
rsync守护进程方式下的常见错误排查
1)首先应该查看 rsync的日志文件
   根据日志中的错误提示解决。
2)再检查rsync的配置文件
   注意某些配置必须在模块内定义
3)检查模块的根目录需要对rsync用户授权
4)本地的密码文件的权限不能太高,应该是600
5) 防火墙
   先关闭防火墙 
原文地址:https://www.cnblogs.com/The-day-of-the-wind/p/12063800.html