Image by reinforced@pixiv

Rsync使用文档

Usage Examples of Rsync

  linkthis    2019-01-11    2854 words

由于太菜导致反复翻车

Rsync其实还是挺好用的,就是参数有点多,所以留一个记录。

Rsync服务端配置

Rsync的主要配置文件有rsyncd.conf(主配置文件)、rsyncd.secrets(密码文件)、rsyncd.motd(rysnc服务器信息)。Rsync不会自动创建对应的配置文件,需要自己手动创建:

1
2
3
4
touch /etc/rsyncd.conf
touch /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets #此步骤不可忽略,否则会备份失败,而且服务端与客户端均需设置
touch /etc/rsyncd.motd #Rsync服务端欢迎信息,非必须

然后编辑rsyncd.conf进行服务端配置:

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 进程相关全局配置
# pid file 守护进程pid文件
# address在独立运行时,用于指定的服务器运行的 IP 地址,由xinetd允许rsyncd时忽略此参数
# 运行rsync守护进程的用户
uid = root
# 运行rsync守护进程的组
gid = root
# 若为true,则 rsync 在传输文件之前首先 chroot 到 path 参数所指定的目录下
# chroot为yes时必须使用root权限,不能备份指向path外部的符号连接所指向的目录文件
use chroot = yes
# 是否检查口令文件的权限
strict modes =yes
# 默认端口873
port = 873
# pid文件的存放位置
pid file = /var/run/rsyncd.pid
# 锁文件的存放位置
lock file = /var/run/rsync.lock
# 日志相关
# log file 指定rsync发送消息日志文件,而不是发送给syslog,如果不填这个参数默认发送给syslog
# transfer logging 是否记录传输文件日志
# log format 日志文件格式,格式参数请google
# syslog facility rsync发送消息给syslog时的消息级别,
# timeout连接超时时间
log file = /var/log/rsyncd.log
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
# 只读
read only = yes
# 只写
#write only = no
# 允许访问rsyncd服务的ip,ip端或者单独ip之间使用空格隔开
hosts allow = 192.168.1.0
# 不允许访问rsyncd服务的ip,*为全部拒绝(不覆盖在hosts allow中声明的ip,注意和hosts allow的先后顺序)
#hosts deny = *
# 客户端最大连接数
max connections = 4
# 欢迎文件路径,非必须
#motd file = /etc/rsyncd/rsyncd.motd
# 设置不需要压缩的文件
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

# 模块配置(多个)
# 模块名称必须使用[]环绕。如要访问bak,则地址应该是[email protected]::bak
[bak]
# 模块根目录,必须指定
path=/opt/server
# 是否允许列出模块里的内容
list=no
# 忽略错误
#ignore errors
# 模块验证用户名称,可使用空格或者逗号隔开多个用户名;如果没有这行,则表明是匿名
auth users = link
#模块验证密码文件 可放在全局配置里
secrets file=/etc/rsyncd.secrets
# 模块注释
#comment = some description about this moudle
# 指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 exclude 列表中。
#exclude =

auth users与系统用户名无关,仅为Rsyncz自身的用户管理。一个模块只能指定一个exclude参数、一个include参数。path如果在末尾不加/表示备份时应包括末尾的目录,加/则只备份目录下的文件。
Rsync的认证口令文件中每一行指定一个用户名,格式为:

1
username:passwd

为了让Rsync长期运行,参考其提供的service文件进行编写:

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=fast remote file copy program daemon
After=network.target
ConditionPathExists=/etc/rsyncd.conf

[Service]
Type=simple
ExecStart=/usr/bin/rsync --daemon --no-detach
Restart=always
User=root

[Install]
WantedBy=multi-user.target

--no-detach选项表示Rsync以daemon形式运行时,不从终端中将自己分离出来,工作在前台,应在使用各种daemon管理工具时添加。如果Rsync是由sshd或inetd派生出来的,则该选项无效。

Rsync客户端配置

客户端只需要安装Rsync即可,然后创建Rsync的密码文件并添加对应模块的密码:

1
2
echo "passwd" >/etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets

客户端的密码文件中无需包含auth users,否则会报错。
然后添加对应的定时执行命令:

1
2
crontab -e
30 0 * * * /usr/bin/rsync -arzvtopg [email protected]::bak /opt/server --password-file=/etc/rsyncd.secrets

由于是定时执行命令,无法在终端输入密码,所以应在命令中指定密码文件。
使用的参数说明:
-a, --archive:归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive:对子目录以递归模式处理
-z, --compress:对备份的文件在传输时进行压缩处理
-v, --verbose:详细模式输出
-t, --times:保留修改时间
-o, --owner:保留所有者
--p, --perms:保留权限
-g, --group:保留组
如果同步的设备之间权限不同,应去掉-topg以免发生错误。
Rsync命令繁多,加以组合可以完成不同的同步或备份需求,同步时搭配Inotify可以实现精确的自动化流程。

要是我有钱就不会这么折腾了。
本文采用CC BY-NC-ND 4.0许可协议进行许可,转载请注明出处。

本文最后更新时间为:2019-05-19-Sunday-09:47:19 PM




Image of Wechat