一、rsync 软件简介
rsync 常用于做为 Linux 系统下的数据镜像备份工具,实现远程同步,支持本地复制,或者与其他 ssh、rsync主机同步数据,支持增量备份,配合任务计划,rsync 能实现定时或间隔同步,配合 inotify 或 sersync,可以实现触发式的实时数据同步。
二、工作方式
-
本地文件系统上实现同步。
-
本地主机使用远程ssh和远程主机通信。
-
本地主机通过网络套接字连接远程主机上的 rsync daemon。
前两者的本质是通过本地或远程 shell,第3种方式则是让远程主机上运行 rsyncd 服务,通过监听端口,等待客户端的连接,使用的 rsync 的专有协议。
三、命令样式及常用选项
本地文件同步
rsync [OPTION]... SRC [SRC]... DEST
远程文件同步
rsync [OPTION]... [USER@]HOST:SRC [DEST] #PULL 拉,将远程主机上的文件拉到本地
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST #PUSH 推,将本地文件推送到远程主机上
守护进程方式
rsync [OPTION]... [USER@]HOST::SRC [DEST] #将远程主机上的文件拉到本地
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST] #将远程主机上的文件拉到本地
rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST #将本地文件推送到远程主机上
rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST #将本地文件推送到远程主机上
常用选项
-
--verbose|-v : 显示详细过程,最多可以 -vvvv
-
--quiet|-q : 不输出错误信息
-
--archive|-a : 归档模式,保留文件属性
-
--recursive|-r : 递归
-
--backup|-b : 如果目标文件存在,先做备份,默认备份后缀是 ~
-
--backup-dir=DIR : 指定备份目录
-
--suffix=SUFFIX : 指定备份后缀
-
--update|-u : 仅在源mtime比目标已存在文件的mtime新时才拷贝,该选项是接收端判断的,不会影响删除行为
-
--links|-l : 传输软链接文件,而不是传输其指向的文件
-
--copy-links|-L : 跟随软链接,传输其指向的目标文件或目录
-
--perms|-p : 保留权限(不包括特殊权限)
-
--owner|-o : 保持owner属性
-
--group|-g : 保持group属性
-
-D : 传输设备文件和特殊文件,同 --devices --specials
-
--times|-t : 保留mtime属性
-
--dry-run|-n : 测试模式,不实际传输,常合 -vvvv 配合查看细节
-
--whole-file|-W : 不使用增量传输,而使用全量传输,在网络带宽高于磁盘带宽时,该选项比增量传输更高效
-
--rsh=COMMAND|-e : 指定所要使用的远程shell程序,默认为ssh
-
--existing : 只更新远端已存在的文件,远端不存在的文件不传输。使用相对路径时如果上层目录不存在也不会传输
-
--ignore-existing : 只传输远程主机不存在的文件
-
--remove-source-files : 删除己传输成功的源文件
-
--del : 在传输中删除,同 --delete-during
-
--delete : 文件传输时,删除DEST中在SRC 中不存在的文件
-
--delete-before : 传输开始前先删除
-
--delete-during : 在传输过程中删除
-
--delete-delay : 在传输中确定要删除的文件,传输结束后删除
-
--delete-after : 传输结束后再删除
-
--delete-excluded : 删除远程主机上在此项中指定的文件
-
--force : 强制删除目录,哪怕不为空
-
--max-delete=NUM : 最多删除NUM个文件
-
--max-size=SIZE : 限制rsync传输的最大文件大小,可以使用单位后缀,可以写小数值
-
--min-size=SIZE : 限制rsync传输的最小文件大小。可用于禁止传输小文件或垃圾文件,可以写小数值
-
--size-only : 默认传输有变化的文件,默认检查文件大小变化和 mtime,此项表示只检查文件大小变化
-
--compress|-z : 压缩传输
-
--exclude=PATTERN : 用正则来指定排除规则来排除不需要传输的文件
-
--exclude-from=FILE : 从文件中读取不需要被传送的文件
-
--include=PATTERN : 用正则来指定要传输的文件
-
--include-from=FILE : 从文件中读取要传输的文件
-
--port=PORT : 连接daemon时使用的端口号,默认为873端口
-
--human-readable|-h : 以人类友好的格式显示相关信息
-
--progress : 显示进度条
-
-P : 显示进度条,同 --partial --progress
-
--password-file=FILE : daemon模式时密码文件,读取密码非交互式操作 这不是远程shell认证的密码,而是rsync模块认证的密码
-
--version|-V : 显示版本信息
-
--help|-h (*) : 显示帮助信息
四、数据同步实践
1、角色分配
| 主机 IP | 主机名 | 角色 | 操作系统 |
|---|---|---|---|
| 10.0.0.112 | ubuntu24-112 | rsync-server | ubuntu24 |
| 10.0.0.15 | rocky9-15 | rsync-client | rocky9 |
2、软件安装
Centos 系统
yum install -y rsync

Ubuntu 系统
apt install -y rsync

查看版本


3、启动服务
默认情况下,rsync 服务是没有启动的。

服务端以守护进程运行
systemctl enable --now rsync.service

启动失败,原因是配置文件 /etc/rsyncd.conf 不存在

生成配置文件后启动服务

查看监听端口
ss -tunlp | grep rsync

该服务监听在 873 端口上
4、客户端连接测试
在客户端进行rsync连接测试,因为服务端的rsync配置文件是空的,没有监听任何信息,所以没有信息输出,但是命令是执行成功的。

5、匿名同步
编辑配置文件 /etc/rsyncd.conf ,增加相关配置

重启服务
![]()
查看服务端目录

客户端再次测试,可以看到内容(命令 2 中的 :: 表示走 rsync 协议)

因为配置里没有指定用户,所以默认情况下传输信息回导致失败(此处的 root 是指 rsync 服务的用户,当前服务端配置里没有 root 相关信息,默认会被映射成 nobody)

服务端授权 nobody 相关权限,
![]()
客户端再次测试,分别使用 root 用户和不存在的 tom 用户

服务端查看目录(文件属主为 nobody, 属组为 nogroup)

7、指定用户同步
服务端修改配置,增加用户信息(uid、gid、密码),禁用匿名连接
uid=root #设置 rsync 服务运行时使用的用户ID为 root。这意味着 rsync 服务将以 root 用户的权限运行,对于访问和传输的文件和目录,需要有相应的权限。
gid=root #设置 rsync 服务运行时使用的组ID为 root。这同样意味着服务将以 root 组的权限运行。
max connections=0 #设置最大并发连接数为0。这里有一个常见的误解,实际上设置为0并不表示不允许任何连接,而是表示没有限制连接数。rsync 官方文档指出,设置为0意味着没有限制,允许任意数量的连接。
log file=/var/log/rsyncd.log #指定 rsync 服务的日志文件路径为 /var/log/rsyncd.log。所有关于 rsync 服务的日志信息都会被记录在这个文件中,用于调试和监控。
pid file=/var/run/rsyncd.pid #指定 rsync 守护进程的进程ID(PID)文件路径为/var/run/rsyncd.pid。这个文件包含了 rsync 守护进程的PID,可以用于停止或重启服务。
lock file=/var/run/rsyncd.lock #指定 rsync 服务的锁文件路径为 /var/run/rsyncd.lock。这个文件用于确保 rsync 服务在同一时间只运行一个实例。
[dir1] #模块名,用于在客户端指定要同步的模块。
path=/data/dir1/ #指定模块同步的目录路径为 /data/dir1/。这是客户端将要同步或从中同步数据的目录。
comment=rsync dir1 #对模块的简短描述,通常用于客户端显示信息,帮助用户识别不同的同步模块。
read only=no #设置模块为可读可写。如果设置为 yes,则只允许客户端读取数据,不允许写入。
auth users=rsyncer #指定允许访问该模块的认证用户名。客户端在连接时需要提供这个用户进行认证。
secrets file=/etc/rsyncd.pwd #指定包含用户名和密码的文件路径。这个文件应该包含一行用户名和密码对(格式为 username:password),用于客户端认证。

配置密码文件(权限必须为 600)

重启服务
![]()
客户端再次测试,匿名连接报错

指定用户连接成功

同步文件

服务端查看目录,文件已经同步,且属主和属组均为 root

8、指定密码文件同步
客户端创建密码文件,无需输入用户名

指定密码文件进行同步
rsync -avz --delete --password-file=/etc/rsyncd_passwd.pwd /data/www/ rsyncer@10.0.0.112::dir1


服务端查看

9、停止守护进程
取消开机自启动并查看状态
systemctl disable rsync && systemctl is-enabled rsync

停止服务

1514

被折叠的 条评论
为什么被折叠?



