暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux的同步工具Rsync总结

叶同学专栏 2022-11-28
387

Rsync介绍

Rsync服务,即Remote Sync服务,远程同步服务,是用来异地或者本地进行传输同步的一种服务。与一般的cp和scp工具相比,Rsync服务优点如下:

  1. 增量备份,只传输修改过的文件。

  2. 可以对传输的文件进行压缩,减少传输带宽,降低传输时间。

yum安装

yum install -y rsync xinetd

参数说明

参数说明
|-v显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。
|-P显示文件传输的进度信息。(实际上"-P"="--partial --progress",其中的"--progress"才是显示进度信息的)。
|-n --dry-run仅测试传输,而不实际传输。常和"-vvvv"配合使用来查看rsync是如何工作的。
|-a --archive归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。
|-r --recursive递归到目录中去。
|-t --times保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新,检查出mtime不同从而导致增量传输无效。
|-o --owner保持owner属性(属主)。
|-g --group保持group属性(属组)。
|-p --perms保持perms属性(权限,不包括特殊权限)。
|-D是"--device --specials"选项的组合,即也拷贝设备文件和特殊文件。
|-l --links如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象。
|-z传输时进行压缩提高效率。
|-R --relative使用相对路径。意味着将命令行中指定的全路径而非路径最尾部的文件名发送给服务端,包括它们的属性。用法见下文示例。
|--size-only默认算法是检查文件大小和mtime不同的文件,使用此选项将只检查文件大小。
|-u --update仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会影响删除行为。
|-d --dirs以不递归的方式拷贝目录本身。默认递归时,如果源为"dir1/file1",则不会拷贝dir1目录,使用该选项将拷贝dir1但不拷贝file1。
|--max-size限制rsync传输的最大文件大小。可以使用单位后缀,还可以是一个小数值(例如--max-size=1.5m)
|--min-size限制rsync传输的最小文件大小。这可以用于禁止传输小文件或那些垃圾文件。
|--exclude指定排除规则来排除不需要传输的文件。
|--delete以SRC为主,对DEST进行同步。多则删之,少则补之。注意"--delete"是在接收端执行的,所以它是在exclude/include规则生效之后才执行的。
|-b --backup对目标上已存在的文件做一个备份,备份的文件名后默认使用"~"做后缀。
|--backup-dir指定备份文件的保存路径。不指定时默认和待备份文件保存在同一目录下。
|-e指定所要使用的远程shell程序,默认为ssh。
|--port连接daemon时使用的端口号,默认为873端口。
|--password-filedaemon模式时的密码文件,可以从中读取密码实现非交互式。注意,这不是远程shell认证的密码,而是rsync模块认证的密码。
|-W --whole-filersync将不再使用增量传输,而是全量传输。在网络带宽高于磁盘带宽时,该选项比增量传输更高效。
|--existing要求只更新目标端已存在的文件,目标端还不存在的文件不传输。注意,使用相对路径时如果上层目录不存在也不会传输。
|--ignore-existing要求只更新目标端不存在的文件。和"--existing"结合使用有特殊功能,见下文示例。
|--remove-source-files要求删除源端已经成功传输的文件。

使用语法

rsync [OPTION]... SRC [SRC]... DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
rsync [OPTION]... [USER@]HOST:SRC [DEST]
rsync [OPTION]... [USER@]HOST::SRC [DEST]
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

上面':'的用法通过远程sh连接,而'::'和'rsync://'的用法连接到rsync守护进程,并要求SRC或DEST以模块名开头。

ssh验证方式

使用例子

注意:同步文件夹时,目录后面添加 斜杠

同步本地文件
rsync opt/logstash-7.6.0.tar.gz opt/testfile.gz
同步本地文件夹
rsync -av usr/local/pgsql12/ usr/local/pgsql12_bak/
从本地文件夹同步到远端
rsync -av usr/local/pgsql12/ gpadmin@192.168.0.15:/tmp/pgsql12/

无ssh互信的话会提示输入密码

从远端同步文件夹到本地
rsync -av gpadmin@192.168.0.15:/tmp/pgsql12/ usr/local/pgsql12_remote/

无ssh互信的话会提示输入密码

保证远端服务器与本地一致的同步

引入-–delete 选项

rsync -av --delete gpadmin@192.168.0.15:/tmp/pgsql12/ usr/local/pgsql12_remote/

rsync验证方式

配置文件rsyncd.conf
, 由全局配置和若干模块配置组成 。

全局参数

参数说明默认值
address在独立运行时,用于指定的服务器运行的 IP 地址。由 xinetd 运行时将忽略此参数,使用命令行上的 –address 选项替代。本地所有IP
port指定 rsync 守护进程监听的端口号。由 xinetd 运行时将忽略此参数,使用命令行上的–port 选项替代。873
motd file指定一个消息文件,当客户连接服务器时该文件的内容显示给客户。
pid filersync 的守护进程将其 PID 写入指定的文件。
log file指定 rsync 守护进程的日志文件,而不将日志发送给 syslog。
syslog facility指定 rsync 发送日志消息给 syslog 时的消息级别。daemon
socket options指定自定义 TCP 选项。

模块参数

模块参数主要用于定义 rsync 服务器哪个目录要被同步。模块声明的格式必须为 [module] 形式,这个名字就是在 rsync 客户端看到的名字,服务器真正同步的数据是通过 path 来指定的。可以根据自己的需要,来指定多个模块,模块中可以定义以下参数:

a. 基本模块参数

参数说明默认值
path指定当前模块在 rsync 服务器上的同步路径,该参数是必须指定的。
comment给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。

b. 模块控制参数

参数说明默认值
use chroot若为 true,则 rsync 在传输文件之前首先 chroot 到 path 参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要 root 权限,并且不能备份指向 path 外部的符号连接所指向的目录文件。true
uid指定该模块以指定的 UID 传输文件。nobody
gid指定该模块以指定的 GID 传输文件。nobody
max connections指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。0(没有限制)
lock file指定支持 max connections 参数的锁文件。/var/run/rsyncd.lock
list指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为 false,可以创建隐藏的模块。true
read only指定是否允许客户上传文件。若为 true 则不允许上传;若为 false 并且服务器目录也具有读写权限则允许上传。true
write only指定是否允许客户下载文件。若为 true 则不允许下载;若为 false 并且服务器目录也具有读权限则允许下载。false
ignore errors指定在 rsync 服务器上运行 delete 操作时是否忽略 I/O 错误。一般来说 rsync 在出现 I/O 错误时将将跳过 –delete 操作,以防止因为暂时的资源不足或其它 I/O 错误导致的严重问题。true
ignore nonreadable指定 rysnc 服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些不应该被备份者获得的文件时是有意义的。false
timeout该选项可以覆盖客户指定的 IP 超时时间。从而确保 rsync 服务器不会永远等待一个崩溃的客户端。对于匿名 rsync 服务器来说,理想的数字是 600(单位为秒)。0 (未限制)
dont compress用来指定那些在传输之前不进行压缩处理的文件。该选项可以定义一些不允许客户对该模块使用的命令选项列表。必须使用选项全名,而不能是简称。当发生拒绝某个选项的情况时,服务器将报告错误信息然后退出。例如,要防止使用压缩,应该是:”dont compress = *”。*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

c. 模块文件筛选参数

参数说明默认值
exclude指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 exclude 列表中。这等同于在客户端命令中使用 –exclude 来指定模式。
exclude from指定一个包含 exclude 规则定义的文件名,服务器从该文件中读取 exclude 列表定义。
include指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 include 列表中。这等同于在客户端命令中使用 –include 来指定模式 。
include from指定一个包含 include 规则定义的文件名,服务器从该文件中读取 include 列表定义。
  • 一个模块只能指定一个exclude 参数、一个include 参数。

  • 结合 include 和 exclude 可以定义复杂的exclude/include 规则 。

  • 这几个参数分别与相应的rsync 客户命令选项等价,唯一不同的是它们作用在服务器端。

d. 模块用户认证参数

参数说明默认值
auth users指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。用户名和口令以明文方式存放在 secrets file 参数指定的文件中。(匿名方式)
secrets file指定一个 rsync 认证口令文件。只有在 auth users 被定义时,该文件才起作用。
strict modes指定是否监测口令文件的权限。若为 true 则口令文件只能被 rsync 服务器运行身份的用户访问,其他任何用户不可以访问该文件。true
  • rsync 认证口令文件的权限一定是 600,否则客户端将不能连接服务器。

  • rsync 认证口令文件中每一行指定一个 用户名:口令 对,格式为:

    username:passwd

  • 一般来说口令最好不要超过8个字符。若您只配置匿名访问的 rsync 服务器,则无需设置上述参数。

e. 模块访问控制参数

参数说明默认值
hosts allow用一个主机列表指定哪些主机客户允许连接该模块。不匹配主机列表的主机将被拒绝。*
hosts deny用一个主机列表指定哪些主机客户不允许连接该模块。

客户主机列表定义可以是以下形式:

  • 单个IP地址。例如:192.168.0.1

  • 整个网段。例如:192.168.0.0/24,192.168.0.0/255.255.255.0

  • 可解析的单个主机名。例如:centos,centos.bsmart.cn

  • 域内的所有主机。例如:*.bsmart.cn

  • “*”则表示所有。

  • 多个列表项要用空格间隔。

f. 模块日志参数

参数说明默认值
transfer logging使 rsync 服务器将传输操作记录到传输日志文件。false
log format指定传输日志文件的字段。”%o %h [%a] %m (%u) %f %l”

设置了”log file”参数时,在日志每行的开始会添加”%t [%p]“。

可以使用的日志格式定义符如下所示:

  • %a - 远程IP地址

  • %h - 远程主机名

  • %l - 文件长度字符数

  • %p - 该次 rsync 会话的 PID

  • %o - 操作类型:”send” 或 “recv”

  • %f - 文件名

  • %P - 模块路径

  • %m - 模块名

  • %t - 当前时间

  • %u - 认证的用户名(匿名时是 null)

  • %b - 实际传输的字节数

  • %c - 当发送文件时,记录该文件的校验码

使用例子

服务端

配置文件

# etc/rsyncd.conf
port = 873
uid = root
gid = root
use chroot = yes
read only = yes
max connections =10
pid file = var/run/rsyncd.pid
log file = var/log/rsyncd.log
timeout = 300

[pg12data]
path = data/pg12data
list = yes
auth users = rsync
uid = root
gid = root
secrets file = /etc/rsyncd.pass
read only = no

密码认证文件

echo "rsync:666666" > /etc/rsyncd.pass
chmod 600 /etc/rsyncd.pass

启动服务

rsync --config=/etc/rsyncd.conf --daemon
netstat -lntp|grep 873

启动后可以看到873端口已启用

客户端

配置密码认证文件,可以在同步时免输入密码

echo "666666" > /etc/rsyncd.pass
chmod 600 /etc/rsyncd.pass

从远端同步到本地

rsync -aPv --password-file=/etc/rsyncd.pass  rsync@192.168.1.25::pg12data /tmp/test1/


文章转载自叶同学专栏,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论