1. Rsync介绍

1.1 什么是Rsync?

Rsync是一款开源的,快速的,多功能的,可实现全量及增量本地或远程数据同步备份的优秀工具。Rsync软件适用于unix/linux/windows等多种操作系统平台。

官网:https://www.samba.org/ftp/rsync/rsync.html

1.2 Rsync简介

  • Rsync英文全称Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能,这个功能类似ssh带的scp命令,但又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝
  • 当然,Rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令,但同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。

小提示:利用Rsync还可以实现删除文件何目录的功能,这又相当于rm命令!

  • 一个rsync相当于scp,cp,rm,但是还优于他们每一个命令。

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

提示:传统的cp,scp工具拷贝每次均为完整的拷贝,而rsync除了可以完整拷贝外,还具备增量拷贝的功能,因此,从同步数据的性能及效率上,Rsync工具更胜一筹。

  • CentOS5,rsync2.x比对方法,把所有的文件比对一遍,然后进行同步。

  • CentOS6,rsync3.x比对方法,一边比对差异,一边对差异的部分进行同步。

 

1.3 Rsync的特性

Rsync的特性如下:

  • 支持拷贝特殊文件,如链接文件,设备等。
  • 可以有排除(tar?find?)指定文件或目录同步的功能,相当于打包命令tar的排除功能(--exclude=PATTERN)
  • 可以做到保持原文件或目录的权限,时间,软硬链接,属主,组等属性均不改变-p
  • 可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)
  • 可以使用rcp,rsh,ssh等方式来配合传输文件(rsync本身不对数据加密)
  • 可以通过socket(进程方式)传输文件和数据(服务端和客户端)
  • 支持匿名的或认证(不需要系统用户,不需要超级用户)的进程模式传输,可实现方便安全的进行数据备份及镜像

 

1.4 Rsync的企业工作场景说明

1.1.4.1 两台服务器之间数据同步(定时任务+备份数据)即crond+rsync

生产场景集群架构服务器备份方案项目

借助crond+rsync把所有客户服务器数据同步到备份服务器

通过本地打包备份,然后rsync结合inotify应用把全网数据统一备份到一个固定存储服务器,然后在存储服务器上通过脚本检查并报警管理员备份结果。

 

1.1.4.2 实时同步,实时备份(解决存储服务器等的单点问题)

利用rsync结合inotify的功能做实时的数据同步,根据存储服务器上目录的变化,把变化的数据通过inotify或sersync结合rsync命令实时同步到备份服务器,还可以通过drbd方案以及双写的方案实现双机数据同步。

  • sersync + rsync
  • inotify + rsync
  • Irsyncd + rsync

 


2. Rsync的工作模式

一般来说,Rsync大致使用三种主要的传输数据的方式。分别为:

  • 单个主机本地之间的数据传输(此时类似于cp命令的功能)
  • 借助rcp,ssh等通道来传输数据(此时类似于scp命令的功能)
  • 以守护进程(socket)的方式传输数据(这个是rsync自身的重要功能)

以上的几种rsync的工作方式,我们可以通过man rsync帮助或查看官方的手册获得。

rsync - a fast, versatile, remote (and local) file-copying tool

语法:

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::DEST
        rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
Usages with just one SRC arg and no DEST arg will list the source files instead of copying.

 

 

2.1 本地数据传输模式(local-only mode)

语法

Local:  rsync [OPTION...] SRC... [DEST]

说明:

  • Rsync为同步的命令;
  • [OPTION]为同步时的参数选项
  • SRC为源,即待拷的分区,文件或目录等;
  • [DEST]为目的分区,文件或目录等;

参数:

  • -v, --verbose    详细模式输出,传输时的进度等信息
  • -z, --compress   传输时进行压缩,以提高传输效率,--compress-level=NUM可按级别压缩
  • -a, --archive   归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgDl
  • ------------------------------------------------------------------
  • -r, --recursive  对子目录以递归模式,即目录下的所有目录都同样传输,注意是小写r
  • -t, --times  保持文件时间信息
  • -o, --owner  保持文件属主信息
  • -g, --group  保持文件数组信息
  • -p, --perms   保持文件权限
  • -D, --devices  保持设备文件信息
  • -l, --links   保持软连接
  • -------------------------------------------------------------------
  • -P, --progress   显示同步的过程及传输时的进度等信息
  • -e, --rsh=COMMAND  使用的信道协议,指定替代rsh的shell程序。如:ssh
  • --exclude=PATTERN   指定排除不需要传输的文件模式(和tar的排除参数用法一样)
  • --exclude-from=file   文件名所在的目录文件(和tar参数一样)
  • --bwlimit=RATE   限速,限制socket I/O带宽 bandwidth(rsync,scp,ftp等都有限速功能)
  • --delete    让目标目录DST和 源目录数据SRC 一致。
  • --partial  断点续传

 

示例:

  • rsync /etc/hosts /tmp/ # 将/etc/hosts文件拷贝到本地的/tmp/目录下
  • rsync /etc/hosts /opt 
  • rsync -avz /opt /mnt  把opt目录拷贝到/mnt目录下,相当于cp -ap /opt /mnt
    • 保持同步目录和文件属性
    • -avz相当于-vzrtopgDI
    • 生产环境常用参数选项为-avzP(或-vzrtopgP)
    • 如果是在脚本中,也可以把-v和-P去掉
  • rsync -avz --bwlimit=100 dbfile 192.16.1.41:/backup  
    • 限制带宽做远程备份
  • rsync -avz --delete /old/ /tmp/  删除功能,相当于rm命令
    • 相当于同步的功能,即本地不存在,则删除目标dist
    • 若本地存在,远端会同步
    • 非常危险的操作,如果不对,会导致差异化数据的丢失。
[root@oldboy dir1]# tree -L 2  # 数据模拟,显示模拟数据结构
.
|-- dir2
|   |-- t1
|   |-- t2
|   |-- t3
|   `-- t4
`-- dir2.ori
    |-- t11
    |-- t12
    |-- t13
    `-- t14

2 directories, 8 files

[root@oldboy dir1]# rsync -avz --delete dir2/ dir2.ori/  # 同步数据,若源数据没有,则远端删除;同时需要同步
sending incremental file list
./
deleting t14
deleting t13
deleting t12
deleting t11  # 删除了目标远端中与本地差异化的数据
t1
t2
t3
t4   # 将源数据同步到远端

sent 209 bytes  received 91 bytes  600.00 bytes/sec
total size is 0  speedup is 0.00
[root@oldboy dir1]# tree -L 2   
.
|-- dir2
|   |-- t1
|   |-- t2
|   |-- t3
|   `-- t4
`-- dir2.ori
    |-- t1
    |-- t2
    |-- t3
    `-- t4

2 directories, 8 files

 

注意点:rsync的目录的格式有无“/”的区别:

请注意以下两条命令的差别:
1) rsync -avz /opt/ /tmp/
2) rsync -avz /opt /tmp/
1)中/opt/的意思是,仅把/opt/目录里面的内容同步过来,opt目录本身并不同步;而后者2)中/opt表示把opt本身及其内部内容全都同步到/tmp下,仅一个/(斜线之差),意义大不相同,请同学们注意使用的差别。
2)在后边要讲的通过远程shell进行数据传输的内容也会有类似的问题,请牢记。

 

2.2 借助ssh通道在不同主机之间传输数据

 语法:

Access via remote shell:
  Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] # 拉取数据,从远端拉取数据
  Push: rsync [OPTION...] SRC... [USER@]HOST:DEST   # 推送数据到远程目标服务器

参数:

  • -e 指定所要使用的远程shell程序,默认为ssh;如果端口号修改过,也要通过-p指定端口号
    • -e 'ssh -p 22' 表示以ssh的方式通过22端口推送,如不写,默认为22端口
    • 可选参数,不使用-e参数,默认使用ssh的22端口。

示例:

1. 将当前主机内容推送到远程主机192.168.0.109的目录/tmp/下

  rsync -avzP -e 'ssh -p 22' /etc/ root@192.168.0.109:/tmp/

  rsync -avzP -e 'ssh -p 22' /etc/ root@192.168.0.109:/tmp/ ssh key (一般结合ssh key免密钥传输,结合定时任务)

注意:主机ip地址可以用/etc/hosts配置好映射的主机名。

[root@backup-41 /]# rsync -avz -e 'ssh -p 22' /oldboy root@192.168.0.109:/tmp/
The authenticity of host '192.168.0.109 (192.168.0.109)' can't be established.
RSA key fingerprint is 5f:5b:6a:b0:88:dc:69:d3:f3:50:27:2c:86:6f:21:14.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.109' (RSA) to the list of known hosts.
root@192.168.0.109's password:   # 开始同步
sending incremental file list
oldboy/
oldboy/1.sh
oldboy/10.sh
oldboy/2.sh
oldboy/3.sh
oldboy/4.sh
oldboy/5.sh
oldboy/6.sh
oldboy/7.sh
oldboy/8.sh
oldboy/9.sh
oldboy/test.txt

sent 581 bytes  received 225 bytes  39.32 bytes/sec
total size is 7  speedup is 0.01

 

2. 将远程主机内容拉取到当前主机

rsync -avzP -e 'ssh -p 22' root@192.168.0.109:/etc/hosts /tmp/

通过root用户从192.168.0.109的/etc/hosts文件拉取到本机的/tmp/目录下

 

更多内容会在ssh中讲解。

 

2.2 以守护进程(socket)的方式传输数据(重点) 

2.2.1 部署环境

[root@backup-41 tmp]# cat /etc/redhat-release 
CentOS release 6.7 (Final)  # 操作系统
[root@backup-41 tmp]# uname -r  # 内核版本
2.6.32-573.el6.x86_64

 

主机网络参数设置:

  • 主机名:backup-41  ip地址:192.168.0.41 充当rsync客户端,A-Server
  • 主机名:nfs-31   ip地址:192.168.0.31   充当rsync服务端,B-Server

默认子网掩码都是255.255.255.0。

 

2.2.2 具体要求

要求在A-Server上以rsync守护进程的方式部署rsync服务,使得所有rsync节点客户端主机,可以把本地数据通过rsync的方式备份到数据备份服务器A-Server上。

本例的客户端仅以B-Server,C-Server为例。

 

 

 

2.2.3 部署rsync服务-Rsync服务器端

1. 确认是否安装了rsync服务:

[root@backup-41 tmp]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64

2. 创建rsyncd.conf文件,并添加如下内容(文件默认不存在)

注意:man rsyncd.conf可以查询里面的参数。

[root@backup-41 tmp]# cat /etc/rsyncd.conf
# rsync_config____start
# created by zoe 
## rsyncd.conf start ##

uid = 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  # 日志文件位置

######
[backup] # 模块名称
path = /backup/   # 服务器端提供访问的目录
ignore errors  # 忽略错误
read only = false  # 只读false,即:可读,可写
list = false   # 阻止远程列表(不让通过远程方式查看服务端有啥,不让使用ls这样的命令)
hosts allow = 192.168.0.31/24   # 允许IP
hosts deny = 0.0.0.0/32  # 禁止IP ,如果冲突导致ip连接失败,可以注释掉hosts deny
auth users = rsync_backup  # 虚拟用户,不是系统内真正创建的虚拟用户,是用来客户端和服务端传输数据,创建socket时的虚拟用户,相当于字符串约定的口令
secrets file = /etc/rsync.password  # 虚拟用户,存放用户和密码的文件

##rsync_config____end ## 

 3. 添加rsync程序用户

[root@backup-41 tmp]# useradd -M -s /sbin/nologin rsync
[root@backup-41 tmp]# tail -1 /etc/passwd
rsync:x:503:503::/home/rsync:/sbin/nologin
[root@backup-41 tmp]# id rsync
uid=503(rsync) gid=503(rsync) 组=503(rsync)

4. 创建共享目录/backup,更改属主和数组

[root@backup-41 tmp]# mkdir /backup
[root@backup-41 tmp]# chown rsync.rsync /backup/  # 更改属主和数组,确保客户端通过rsync用户连接时对/backup目录有相关权限  
[root@backup-41 tmp]# ls -ld /backup/
drwxr-xr-x 2 rsync rsync 4096 Nov 30 19:14 /backup/

 

5. 启动服务:rsync --daemon

 

[root@backup-41 tmp]# rsync --daemon # 启动服务
[root@backup-41 tmp]# ps -ef|grep rsync|grep -v grep  # 查看进程是否存在
root      4637     1  0 19:10 ?        00:00:00 rsync --daemon
[root@backup-41 tmp]# netstat -lntup|grep rsync  # 查看网络状态
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      4637/rsync          
tcp        0      0 :::873                      :::*                        LISTEN      4637/rsync          

注意:可以加启动服务,加入到rc.local,开机自启动。

如何重启rsync服务?

  • pkill rsync #关闭rsync服务
  • rsync --daemon #启动rsync服务

6. 创建虚拟用户rsync_backup

[root@backup-41 tmp]# echo "rsync_backup:123456" >/etc/rsync.password # 将虚拟用户和密码以此格式写入密码配置文件

[root@backup-41 tmp]# ll /etc/rsync.password 
-rw-r--r-- 1 root root 20 Nov 30 19:25 /etc/rsync.password
[root@backup-41 tmp]# chmod 600 /etc/rsync.password   # 由于密码是明文,所以更改权限600,提高安全性
[root@backup-41 tmp]# ll /etc/rsync.password        
-rw------- 1 root root 20 Nov 30 19:25 /etc/rsync.password

 

--------服务端配置完毕--------

2.2.4 部署rsync服务--客户端B-Server

[root@nfs-31 ~]# rpm -qa rsync # 查看rsync是否安装
rsync-3.0.6-12.el6.x86_64
[root@nfs-31 ~]# echo "123456" > /etc/rsync.password # 添加虚拟用户的密码文件,仅密码 [root@nfs-31 ~]# chmod 600 /etc/rsync.password # 更改权限 [root@nfs-31 ~]# ll -d /etc/rsync.password -rw------- 1 root root 7 Nov 30 19:40 /etc/rsync.password

---------客户端配置完毕------

 

2.2.5 Rsync同步测试

语法:

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::DEST
        rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
Usages with just one SRC arg and no DEST arg will list the source files instead of copying.

 

推送push测试:将客户端指定目录内容推送到服务器端rsync指定目录下。

测试命令:

mkdir /backup/  # 创建文件夹用作中转站,可以创建也可以不创建,看习惯
cd /backup/  
touch nfs_test_file_{01..100}  # 创建测试文件


# Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync -avz /backup/ rsync_backup@192.168.0.41::backup/  # 需要输入虚拟用户rsync_backup的密码,才能执行
# -avz 同步的参数选项,各属性保持不变,详细的输出和压缩提升效率
# /backup/ 本机的源文件路径 #
rsync_backup rsync服务端的虚拟用户
# 192.168.0.41 rsync服务器的IP地址 # backup 是rsync服务器端的配置文件rsyncd.conf中的[backup]模块名
# backup后面的“/”最好要加,不加也能成功,但是有的场景会出错。“/”后面接小目录。

rsync -avz /backup/ rsync_backup@192.168.0.41::backup/ --password-file=/etc/rsync.password
# --password-file 指定密码文件位置,可以免交互输入密码。定时任务必选参数

rsync -avz /backup/ rsync://rsync_backup@192.168.0.41:873/backup/ --password-file=/etc/rsync.password  # 和上面等价的写法

   

拉取pull测试:将rsync服务器端指定目录全部内容同步到客户端

测试命令:

rsync -avz rsync_backup@192.168.0.41::backup /backup/ --password-file=/etc/rsync.password 

和推送push相比,只是两个目录换了个位置

 

小结:

推送:

  • rsync -avz /backup/ rsync_backup@192.168.0.41::backup/ --password-file=/etc/rsync.password 
  • rsync -avz /backup/ rsync://rsync_backup@192.168.0.41:873/backup/ --password-file=/etc/rsync.password 

拉取:

  • rsync -avz rsync_backup@192.168.0.41::backup/ /backup/ --password-file=/etc/rsync.password 
  • rsync -avz rsync://rsync_backup@192.168.0.109:873/backup/ /backup/  --password-file=/etc/rsync.password

注意:主机IP地址后面接的backup是模块名(在/etc/rsyncd.conf配置文件),不是路径

 


2.2.6 rsync常见问题排错

  • 部署流程步骤熟练
  • rsync原理理解
  • 学会看日志,rsync命令行输出,日志文件/var/log/rsyncd.log

【服务端排错思路】

  1. 查看rsync服务配置文件路径是否正确,正确的默认路径为:/etc/rsyncd.conf
  2. 查看配置文件里host allow,host deny,允许的IP网段是否是允许客户端访问的ip网段【拒绝和允许二选一】
  3. 查看配置文件中path参数里的路径是否存在,权限是否正确(正常应为配置文件中的UID参数对应的属主和组)
  4. 查看rsync服务是否启动。查看命令为:ps -ef|grep rsync。端口是否存在netstat -antup |grep 873 或 lsof -i :873
  5. 查看iptables防火墙和selinux是否开启允许rsync服务通过,也可以考虑关闭
  6. 查看服务端rsync配置的密码文件是否为600的权限,密码文件格式是否正确,正确格式为:用户名:密码,文件路径和配置文件里的secrect files参数对应。
  7. 如果是推送数据,要查看下,配置rsyncd.conf文件中用户是否对模块下目录有可读写的权限。

【客户端排错思路】

  1. 查看客户端rsync配置的密码文件是否600的权限,密码文件格式是否正确,注意:仅需要有密码,并且和服务器端的密码保持一致。
  2. 用telnet连接rsync服务器ip地址873端口,查看服务是否启动(可测试服务端防火墙是否阻挡)telnet 192.168.197.129 873
  3. 客户端执行命令时:rsync -avzP rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password
  4. 此命令的细节要记清楚,尤其192.168.197.129::backup 处的双冒号及其后的backup为模块名称

 

2.2.7 rsync服务模式增加多模块实战

[root@backup-41 /]# cp /etc/rsyncd.conf{,.bak}
[root@backup-41 /]# ls /etc/rsyncd.*
/etc/rsyncd.conf  /etc/rsyncd.conf.bak
[root@backup-41 /]# vi /etc/rsyncd.conf

 

备份rsyncd.conf配置文件,然后增加模块内容如下:

[root@backup-41 /]# sed -nr '/\[backup\]/,50p' /etc/rsyncd.conf       
[backup]
path = /backup/
ignore errors
read only = false
list = false 
hosts allow = 192.168.0.31/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password


[multi_module_1]
path = /multi_module_1/
ignore errors
read only = false
list = false
hosts allow = 192.168.0.31/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password   # 不同模块之间通用的参数可以放在所有模块上面,作为全局参数使用。

 

然后创建multi_module_1对应的path目录,更改目录的属主和数组(chown rsync.rsync /multi_module_1).

 

想要不同模块实现不同的密码,可以更改指定的secrets file文件名。


 

2.2.8 rsync服务:排除和无差异同步

【排除同步】主要参数:--exclude,--exclude-from

【客户端】

  • 排除单个文件:
    • rsync -avz --exclude=a /backup/ rsync_backup@192.168.0.41::backup --password-file=/etc/rsync.password
  • 排除多个文件:
    • rsync -avz --exclude={a,b} /backup/ rsync_backup@192.168.0.41::backup --password-file=/etc/rsync.password
    • rsync -avz --exclude=a --exclude=b /backup/ rsync_backup@192.168.0.41::backup --password-file=/etc/rsync.password
    • rsync -avz --exclude={a..g} /backup/ rsync_backup@192.168.0.41::backup --password-file=/etc/rsync.password
    • rsync -avz --exclude-from=a.txt /backup/ rsync_backup@192.168.0.41::backup --password-file=/etc/rsync.password

【无差异同步】主要参数:--delete

rsync -avz --delete /backup/ rsync_backup@192.168.0.41::backup --password-file=/etc/rsync.password

服务端会以本地源数据的/backup/目录作为基准,如果服务端有新增的差异文件,则会被删除,风险大。

 

始终保持一致的意思是说,当Rsync服务器共享目录增加文件,那么客户端指定目录也增加,服务器端共享目录删除文件,那么客户端指定目录也删除文件

特别说明:
执行--delete参数从rsync服务器端往rsync客户端拉取数据时,一定要小心,最好不用,它比从rsync客户端带--delete参数往rsync服务端推送危险的多。

客户端带--delete参数往服务端推送仅删除服务端模块下的数据,而前者有能力删除rsync客户端本地的所有数据包括跟下的所有目录。

 

rsync推送企业工作场景:
1)备份 --delete 风险
本地有啥,远端就有啥,本地没有的远端有也要删除。服务器端的目录数据可能丢失。

rsync拉取企业工作场景:
1)代码发布,下载。--delete风险
远端有啥,本地(客户端)就有啥,远端没有的本地有也要删除。本地的目录数据可能丢失。

rsync无差异同步的生产场景应用:

一般是有需要两台服务器之间,必须要求数据一致,且实时性又不是很高的情况下,如两台负载均衡下面web服务器之间的同步,或者高可用双机配置之间的同步等,rsync无差异同步非常的危险,而且,有很多的替代方案,因此,生产场景没有特殊的需求,应避免使用。切记,有很多朋友都已经有了血的教训。


 

2.2.9 限速 和 断点续传

  • --bwlimit 限速 每秒字节数
rsync --bwlimit=100 -avz --progress /home/hadoop/auth_data hadoop@192.168.1.98::auth_data 
rsync -avz --bwlimit=100 dbfile 192.168.0.41:/backup #限定了带宽

限速100kb/s同步数据

  • --partial参数 断点续传
    • 默认rsync在传输中断时会删除只传输了一部分不完整文件(partial file)。
    • 在某些环境下,可能希望保留这些已传输的部分。"--partial"选项,告诉rsync保留这些部分,这可以使得下一次传输只传输剩余部分,从而加快传输速度。
  • --partial-dir=DIR
    • 比直接使用"--partial"更好的做法是指定一个存放不完整数据(partial file)的目录DIR,下次再传输时,rsync将使用一个文件来寻找到该DIR中的文件,以便提高传输速率,当数据真正传输完整且传输真正完成后,该DIR将被删除。
    • 注意,如果指定了"--whole-file"选项(后者隐含了该选项),则所有的"partial-dir"中正在更新的文件都会被删除,因为rsync此时没有使用增量传输算法来传输文件。
    • rsync如果发现DIR不存在,则自动创建(但不是递归创建整个目录路径),这使得rsync在需要时能更方便地使用相对路径在文件所在目录下直接创建partial-dir(例如"--partial-dir=.rsync-partial"),并且在partial file被删除时自动移除该目录。
    • 更多说明见参数解释。

3. rsync的优缺点

rsync优点:

  1. 增量备份,支持socket(daemon),集中备份(支持推拉,都是以客户端为参照物)。
  2. 远程SHELL通道模式还可以加密(SSH)传输,socket(daemon)需要加密传输,可以利用vpn服务或ipsec服务

rsync缺点:

  1. 大量小文件时候同步的时候,比对时间较长,有的时候,同步过程中,rsync进程可能会停止。
  2. 同步大文件,10G这样的大文件有时也会出问题,中断。未完整同步前,是隐藏文件,可以通过续传(--partial)等参数实现传输
  3. 一次性远程拷贝可以用scp,大量小文件要打成一个包再拷贝。(重要)

 

posted on 2019-11-30 13:16  Zoe233  阅读(1299)  评论(0编辑  收藏  举报