rsync学习

jopen 10年前

一、示例

以下面两个目录为例子
src目录结构
➜  tree src  src  └── demo.py
dest目录结构
➜  tree dest   dest  └── hello.py
1. 文件同步
➜  rsync -v src/demo.py dest  demo.py  sent 85 bytes  received 35 bytes  240.00 bytes/sec  total size is 0  speedup is 0.00
2. 目录同步
➜  rsync -av src/  dest  sending incremental file list  ./  demo.py  sent 118 bytes  received 38 bytes  312.00 bytes/sec  total size is 0  speedup is 0.00
3. 远程目录同步
➜  rsync -av src/  wyq@localhost:~/dest  wyq@localhost's password:   sending incremental file list  ./  demo.py  sent 118 bytes  received 38 bytes  34.67 bytes/sec  total size is 0  speedup is 0.00

二、介绍

    rsync(remote sync)远程同步工具. 使用rsync算法,只传送两个文件不同的部分, 而不是每次都整份传送,因此速度相当快. 运行Rsync服务器的机器也叫备份服务,一个Rsync服务器可同时备份多个客户端的数据; 也可以多个Rsync服务器备份一个客户端的数据。
    rsync服务器打开873端口, 等待对方Rsync连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。
    rsync支持大多数linux系统,windows也有相应版本,比较知名的有cwRsync和Sync2NAS。

三、基本特点

1.可以镜像保存整个目录树和文件系统;
2.可以很容易做到保持原来文件的权限、时间、软硬链接等;
3.无须特殊权限即可安装;
4.优化的流程,文件传输效率高;
5.可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
6.支持匿名传输。

四、语法

本地:  rsync [OPTION...] SRC... [DEST]  Access via remote shell(ssh)    获取: rsync [OPTION...] [USER@]HOST:SRC... [DEST]    推送: rsync [OPTION...] SRC... [USER@]HOST:DEST  Access via rsync daemon:(rsync服务器)    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
* ":"   分隔符就启动这种模式
* "::"  分隔符启动daemon模式
* 传输方式有两种:rsync-daemon、ssh. daemon方式缺乏灵活性;ssh方式,灵活,速度快,安全性高,但是cpu消耗高.一般用ssh.

五、选项

一般都使用azv选项
-v, --verbose 详细模式
-a, archive  归档模式,表示以递归方式传输文件,并保持所有文件属性
-r, --recursive 对子目录以递归方式处理
-z, --compress 传输时对数据进行压缩
-b, --backup 创建备份,存在同名文件,将老的重新命名为~filename. 可以使用--suffix指定不同的备份文件前缀.
-l, --links 保留软链接
-L, --copy-links  像对待常规文件一样处理软链接
-e, --rsh=COMMAND 指定使用rsh, ssh方式进行数据同步
--force 强制删除目录,即使不为空
-u, --update  仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
-t, --time  保持文件时间信息
-o, --owner 保持文件属主信息
-p, --perms 保持文件权限
-g, --group 保持文件属组信息
-q, --quiet 精简输出模式
-c, --checksum 打开校验模式,强制对文件传输进行校验
--progress 显示数据镜像同步的过程
--delete   以rsync服务器端为基础进行数据镜像同步,保持与rsync服务器目录完全一致.
--delete-excluded  同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--exclude=PATTERN  排除不需要传输的文件类型
--partial  保留因故没有完全传输的文件,以加快随后的再次传输
--port=PORT 指定其它rsync服务器端口
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second

六、优点与缺点

优点
安全、备份迅速、增量备份,可以解决实时性要求不高的需求.
缺点
    rsync需要扫描所有文件后进行对比,然后进行查量传输,如果文件很大,扫描文件非常耗时,而且发生变化的文件往往是很少一部分,因此比较低效.
    rsync不能实时监测,两次触发动作会有时间差,导致服务器和客户端数据出现不一致。