0%

rsync命令

一、基本介绍

rsync命令是一个可用来进行远程/本地文件复制的工具,它的功能非常强大,它采取了“差异复制”机制,即只复制“差异数据”,这使得复制数据量大大减少。
使用rsync命令复制数据,一般可采用“通过RSH隧道或者SSH隧道”模式,也可采用“C/S”模式。前者搭建方便,但是杀鸡用了宰牛刀,需要能够建立RSH隧道或者SSH隧道;后者搭建繁杂,但是没有前述要求。因此,一般基于“C/S”模式使用rsync命令复制数据。

二、rsync client

2.1、常用用法

1
2
rsync -vzrt --copy-links [--delete] [--contimeout=600] --log-file=FILEPATH --port=PORT --password-file=FILEPATH [USER@]HOST::SRC... DEST
rsync -vzrt --copy-links [--delete] [--contimeout=600] --log-file=FILEPATH --port=PORT --password-file=FILEPATH SRC... [USER@]HOST::DEST

2.2、含义与选项

2.2.1、含义

第一行命令表示:从“远端”复制文件到“本地”,“远端”作为发送端,“本地”作为接收端。
第二行命令表示:从“本地”复制文件到“远端”,“本地”作为发送端,“远端”作为接收端。

2.2.2、选项

“v”:打印日志,“v”越多,打印日志信息越详细,一般使用3个“v”进行调试(rsync 3.0.6版本有个bug,加上“v”选项可能导致卡死)。
“z”:传输过程中,压缩文件。
“r”:递归传输。
“t”:保存“mtime”值,要开启“快速比较(quick check)”需要用到这个属性值。
“–copy-links”:当发送端遇到“软符号链接文件”,发送指向文件数据(包括“一般文件”和“目录文件”)。
“–delete”:接收端删掉多余的文件,用于同步模式。
“–contimeout=600”:“rsync client”等待与“rsync daemon”建立连接的超时时间,这里的值为600毫秒。
“–log-file=FILEPATH”:指定日志文件,可结合“–log-file-format”选项进行日志格式控制。
“–port=PORT”:指定“rsync daemon”监听的端口号。
“–password-file=FILEPATH”:指定包含连接“rsync daemon”所需密码的文件,特别需要注意的是,该文件的权限必须设为“600”,否则会出现验证失败错误
“USER”:不需要是真的系统用户,只需是允许使用rsync服务的用户。
“HOST”:远端“rsync daemon”运行主机。
“SRC”:“远端”为发送端,则为远端机器上的模块路径;“本地”为发送端,则为本地机器上的目录路径。
“DEST”:“本地”为接收端,则为本地机器上的目录路径;“远端”为接收端,则为远端机器上的模块路径。
需要注意的是,以上“::”后面跟随的是以“模块名称”为开始的模块路径,而不是具体的目录路径。“rsync daemon”以模块为配置单元,使得配置更加灵活。

三、rsync daemon

3.1、常用用法

1
rsync --daemon --config=rsyncd.conf

3.2、含义与选项

3.2.1、含义

加载“rsyncd.conf”文件中的配置,运行“rsync daemon”。

3.2.2、选项

“–daemon”:以“rsync daemon”模式运行。
“–config=rsyncd.conf”:加载“rsyncd.conf”文件中的配置。

3.3、“rsyncd.conf”配置文件语法

“rsyncd.conf”配置文件语法描述如下:

1
2
3
4
5
6
7
全局参数配置(key=value)
[模块1]
针对模块1的参数配置(key=value)
[模块2]
针对模块2的参数配置(key=value)

以“零到多个前导空格符+#”字符开头的行是注释行

一个样例配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#rsync daemon进程pid记录文件
pid file=/home/dsl/Desktop/rsync/rsyncservertest/rsyncd.pid

#rsync daemon进程监听端口号
port=1873

#模块名
[datamodule]
#模块对应路径
path=/home/dsl/Desktop/rsync/rsyncservertest/rsyncimg

#允许使用rsync服务的用户,不一定需要真正系统用户
auth users=dsl

#配置“用户以及用户对应的密码”对的文件,文件内容形如“dsl:123456”
#特别需要注意的是,该文件的权限必须设为“600”,否则会出现验证失败错误
secrets file=/home/dsl/Desktop/rsync/rsyncservertest/rsyncd.secrets

#模块最大连接数
max connections=320

#通过lock file文件实现“模块最大连接数”的控制
lock file=/home/dsl/Desktop/rsync/rsyncservertest/rsyncd.lock

#否则需要“root”权限
use chroot=no

#允许写入数据
read only=no

#“rsync client”试图列出“rsync daemon”下所有模块时,本模块不包括在内
list=no

#试图删除本模块下数据时,即便遇到IO错误,也忽略继续进行
ignore errors=no

#与“rsycn client”已建立连接的超时时间,即“当rsync daemon等待超过设定时间时,断开与rsync client已建立的连接”
timeout=600

#指定日志文件
log file=/home/dsl/Desktop/rsync/rsyncservertest/rsyncd.log

#针对每个文件,打印相关日志信息(可结合“log format”选项进行日志格式控制)
transfer logging=true

参考文献: [1]man 1 rsync [2]man 5 rsyncd.conf [3]http://stackoverflow.com/questions/20773118/rsync-suddenly-hanging-indefinitely-during-transfers
您的支持将鼓励我继续分享!