23.1 Rsync 数据同步
Rsync(Remote Sync,远程同步)是由 Andrew Tridgell 和 Paul Mackerras 共同开发的高效文件同步工具。Rsync 采用增量传输算法,仅传输文件差异部分,可减少网络带宽消耗并缩短同步时间,是系统备份与数据镜像的常用工具。
23.1.1 环境概述
配置前,先介绍本节两台服务器的角色。

- 服务器 A(发起端、客户端):192.168.179.128
- 服务器 B(同步源、服务端):192.168.179.150
设计目标:将服务器 B 的数据同步到服务器 A,即 B(服务端)→ A(客户端),实现数据的完整镜像。
23.1.2 服务器 B(同步源)配置
首先配置同步源服务器,即服务器 B。
23.1.2.1 安装 rsync
在服务器 B 上安装 rsync,有两种安装方式:
- 使用 pkg 安装:
sh
# pkg install rsync- 或使用 Ports 安装:
sh
# cd /usr/ports/net/rsync/
# make install clean- 查看安装信息
sh
# pkg info -D rsync23.1.2.2 同步目录准备
sh
# mkdir -p /home/test # 新建用于备份的文件夹 test
# chown root /home/test/ # 设置文件夹属主为 root
# cd /home/test/ # 切换路径
# touch txt001 txt002 # 在文件夹内创建测试文件文件结构:
sh
/
├── home
│ ├── test # 服务器 B 的同步源目录
│ │ ├── txt001 # 测试文件 1
│ │ └── txt002 # 测试文件 2
│ └── testBackUp # 服务器 A 的本地备份目录
├── usr
│ └── local
│ └── etc
│ └── rsync
│ └── rsyncd.conf # rsyncd 服务端主配置文件
├── var
│ ├── log
│ │ └── rsyncd.log # rsyncd 服务日志
│ └── run
│ └── rsyncd.pid # rsyncd 进程 ID 文件
└── etc
└── rsyncd_users.db # rsync 用户认证密码文件23.1.2.3 服务端主配置文件
编辑 /usr/local/etc/rsync/rsyncd.conf 文件,写入:
ini
# 服务端操作系统的用户
uid = root
# 服务端操作系统用户所属的组
gid = wheel
# 限制在源目录
use chroot = yes
# 监听地址
address = 192.168.179.150
# 通信使用的 TCP 端口,默认端口为 873
port = 873
# 日志文件位置
log file = /var/log/rsyncd.log
# 存档进程 ID 的文件位置
pid file = /var/run/rsyncd.pid
# 允许访问的客户机地址
hosts allow = 192.168.179.128
# 共享模块名称,可自定义,不一定要与同步目录相同
[testcom]
# 同步的目录路径,必须属于 uid 参数指定的用户和 gid 参数指定的组
path = /home/test
# 模块说明文字
comment = testcombackup
# 是否为只读
read only = yes
# 同步时不压缩的文件类型
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# 授权账户
auth users = root
# 定义 rsync 客户端用户认证的密码文件
secrets file = /etc/rsyncd_users.db23.1.2.4 创建用于授权备份账户认证的密码文件(服务端)
- 编辑 /etc/rsyncd_users.db 文件,写入:
sh
root:12345678 # 支持多个用户,每行一个注意
服务端的密码文件应包含用户名和密码的映射关系。格式为
授权账户用户名:密码。
- 限制数据文件权限,否则将导致错误:
sh
# chmod 600 /etc/rsyncd_users.db设置 rsync 用户数据库文件的权限为仅属主可读写。
23.1.2.5 服务启动配置
sh
# service rsyncd enable # 设置 rsync 服务开机自动启动
# service rsyncd start # 启动 rsync 服务23.1.2.6 服务端口验证
查看 rsync 服务使用的网络端口和对应进程:
sh
# sockstat | grep rsync
root rsync 1198 5 tcp4 192.168.179.150:873 *:*23.1.3 服务器 A(发起端)配置
请参照上文步骤安装 rsync。
23.1.3.1 本地备份目录配置
创建本地备份目录 /home/testBackUp/,并设置相应权限:
sh
# mkdir -p /home/testBackUp # 创建备份目录
# chown root:wheel /home/testBackUp/ # 设置目录所有者为 root,组为 wheel23.1.3.2 同步操作(密码输入方式)
将文件同步到本地备份目录 /home/testBackUp/,需手动输入密码。
sh
# rsync -avz root@192.168.179.150::testcom /home/testBackUp # 用 rsync 从远程 testcom 模块同步文件到本地备份目录
Password: # 输入服务器 B 设置的密码
receiving incremental file list
./
txt001
txt002
sent 65 bytes received 151 bytes 86.40 bytes/sec
total size is 0 speedup is 0.00testcom 是在 /usr/local/etc/rsync/rsyncd.conf 文件中定义的同步模块名称,对应服务器上的目录。
23.1.3.2.1 附录:指定密码文件方式
创建授权备份账户认证的密码文件(客户端)。
- 编辑客户端的 /etc/rsyncd_users.db 文件,仅写入密码:
sh
12345678- 限制权限,否则将引发错误
ERROR: password file must not be other-accessible。
sh
# chmod 600 /etc/rsyncd_users.db设置 rsync 用户数据库文件权限为仅属主可读写。
注意
客户端密码文件应仅包含密码本身,每行一个。
执行同步命令。
使用 rsync 将远程 testcom 模块同步到本地备份目录,显示同步进度,并指定密码文件。
sh
# rsync -auvz --progress --password-file=/etc/rsyncd_users.db root@192.168.179.150::testcom /home/testBackUp
receiving incremental file list
./
txt001
0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=1/3)
txt002
0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=0/3)
sent 65 bytes received 151 bytes 432.00 bytes/sec
total size is 0 speedup is 0.0023.1.3.3 同步结果验证
列出本地备份目录中的详细文件信息:
sh
# ls -l /home/testBackUp
total 1
-rw-r--r-- 1 root wheel 0 Apr 17 18:33 txt001
-rw-r--r-- 1 root wheel 0 Apr 17 18:33 txt00223.1.4 参考文献
- Tridgell A, Mackerras P. The rsync algorithm[EB/OL]. (1998-11-09)[2026-04-17]. https://rsync.samba.org/tech_report/. rsync 算法的原始技术报告,由两位作者共同发表。