Rocky linux9 rsync命令详解

0.前言

最近在做gitlab仓库代码多机异地备份方案,之前远程拷贝文件一直使用的是scp命令,这次想使用rsync文件同步命令,于是乎又重新学习测试了rsync命令,备份、部署、迁移、内容分发等方面都很好用,简直就是运维神器。这里就记录一下rsync命令的原理和详细的使用案例,希望能够帮助更多的人了解rsync命令。

1.rsync简介

rsync(remote sync) 是一个快速且功能强大的文件同步工具,支持本地与远程同步,采用“增量同步算法”,仅同步变化部分,性能非常高效。
rsync核心优势:

  • 增量同步:只传输变更部分,节省带宽

  • 支持压缩:可减少传输数据量

  • 支持多种协议:本地、SSH、rsync 守护进程等

  • 拥有断点续传、权限保留、删除同步等高级特性

rsync还能在两种模式下运行:

  • 命令行模式(push/pull):使用 rsync 命令手动或定时执行同步。

  • 服务端守护模式(daemon):以守护进程方式运行,支持匿名或认证客户端访问共享模块。

2.rsync工作原理

  • 利用 “rsync算法” 比较源与目标文件内容,只传输差异数据块。
  • 使用 SSH、RSH 或 rsync 协议 作为传输通道。

这种“块级差异传输 + 校验算法”机制,让 rsync 同步比 cp/scp 更高效、稳定,尤其适用于大文件、慢网速、跨地部署等场景。

3.实验准备

本次实验,我们使用两台服务器来测试rsync的功能,服务器配置如下:

IP主机名角色操作系统
192.168.159.172server源服务器Rocky Linux release 9.4
192.168.159.173backup备份服务器Rocky Linux release 9.4

我们本次测试将源服务器的文件同步到备份服务器当中。

4.安装rsync

默认情况下最小模式安装的Rocky9 Linux操作系统是没有rsync命令的,所以首先我们安装一下,安装命令如下:

yum install -y rsync
...
Installed:
  rsync-3.2.5-3.el9.x86_64

Complete!

显示以上字样,说明安装完成。

5.rsync命令行

首先我们先来看下rsync的命令行模式,该模式下只需要使用rsync命令并指定相应参数,就可以完成文件的拷贝。

5.1 基本语法

rsync [选项] 源文件 目标文件

5.2 常用参数

选项全称说明
-a--archive归档模式,保留所有文件属性(相当于 -rlptgoD)
-v--verbose显示详细传输信息
-z--compress传输时压缩数据
-r--recursive递归复制目录
-l--links保留符号链接
-p--perms保留文件权限
-t--times保留文件修改时间
-g--group保留文件所属组
-o--owner保留文件所有者
-D--devices保留设备文件(仅限超级用户)
-h--human-readable以人类可读格式输出数字
--progress显示传输进度
--delete删除目标中源没有的文件
--exclude=PATTERN排除匹配 PATTERN 的文件
--include=PATTERN包含匹配 PATTERN 的文件

5.3 常用的命令形式

本地同步

rsync -av /path/to/source/ /path/to/destination/

从本地同步到远程

rsync -avz /local/path/ username@remote_host:/remote/path/

从远程同步到本地

rsync -avz username@remote_host:/remote/path/ /local/path/

5.4 实际操作案例

我们创建一个测试目录,并生成一些测试文件,命令如下:

mkdir ~/test
mkdir ~/test2
cd ~/test
echo aaa > a.txt
echo bbb > b.txt
echo ccc > c.txt
(1)本地同步(目录)
rsync -av ~/test/ ~/test2/
sending incremental file list
./
a.txt
b.txt
c.txt

看下test2目录下的内容:

ls test2
total 12
-rw-r--r-- 1 root root 4 Jan 15 11:22 a.txt
-rw-r--r-- 1 root root 4 Jan 15 11:22 b.txt
-rw-r--r-- 1 root root 4 Jan 15 11:22 c.txt

可以看到,这种方式会将test目录整个拷贝到test2目录下。

(2)从本地同步到远端

在源服务器执行以下命令:

rsync -avz /root/test/ root@192.168.159.173:/root/
sending incremental file list
test/
test/a.txt
test/b.txt
test/c.txt

在备份服务器上看下目录是否存在:

ls /root/test
total 12
-rw-r--r--. 1 root root 4 Jan 15  2026 a.txt
-rw-r--r--. 1 root root 4 Jan 15  2026 b.txt
-rw-r--r--. 1 root root 4 Jan 15  2026 c.txt

可以看到,文件确实拷贝到了备份服务器上。
注意:因为默认使用的rsync协议,两台服务器都要安装rsync,才能保证同步成功,否则会报错。

(4)远端同步到本地

在备份服务器test目录新增文件:

cd ~/test
echo eee > e.log

在源服务器执行以下命令:

rsync -avz root@192.168.159.173:/root/test/ /root/test/
receiving incremental file list
created directory /root/test
./
a.txt
b.txt
c.txt
e.log

sent 103 bytes  received 326 bytes  858.00 bytes/sec
total size is 16  speedup is 0.04

查看源服务器test目录:

ls ~/test
total 16
-rw-r--r-- 1 root root 4 Jan 15 11:22 a.txt
-rw-r--r-- 1 root root 4 Jan 15 11:22 b.txt
-rw-r--r-- 1 root root 4 Jan 15 11:22 c.txt
-rw-r--r-- 1 root root 4 Dec 26 21:36 e.log

可以看到新增的e.log文件拷贝到了源服务器。

(5)带过滤的同步

在源服务器test目录新增以下文件:

echo "temp file" > f.tmp

之后在源服务器执行以下命令:

rsync -av --exclude=*.tmp' --execlude="*.log"' ~/test/ ~/test3/
sending incremental file list
created directory /root/test3
a.txt
b.txt
c.txt

sent 238 bytes  received 107 bytes  690.00 bytes/sec
total size is 12  speedup is 0.03

最后查看下源服务器的test3目录:

ls ~/test3
total 12
-rw-r--r-- 1 root root 4 Jan 15 11:22 a.txt
-rw-r--r-- 1 root root 4 Jan 15 11:22 b.txt
-rw-r--r-- 1 root root 4 Jan 15 11:22 c.txt

确实没有以tmp和log结尾的文件。

(6)双端保持完全一致

新建一个test3目录,然后添加一个原本test中不存在的文件,命令如下:

mkdir test3
echo hello > test3/h.txt

然后同步test和test3目录并保持双端一致,命令如下:

rsync -av --delete test/ test3/

查看test3目录:

ls test3
total 16
-rw-r--r-- 1 root root 4 Jan 15 11:22 a.txt
-rw-r--r-- 1 root root 4 Jan 15 11:22 b.txt
-rw-r--r-- 1 root root 4 Jan 15 11:22 c.txt
-rw-r--r-- 1 root root 4 Dec 26 21:36 e.log

可以看到目标地址的h.txt文件被删掉了。

5.5 高阶用法

(1)使用SSH自定义端口
rsync -avz -e 'ssh -p 22' test/ root@192.168.159.173:test/

可以按需将22端口改为其他端口。

(2)带宽限制
rsync -avz --bwlimit=500 test/ root@192.168.159.173:test/

可以根据网络带宽需求修改带宽大小。

(3)文件大小限制
rsync -av --min-size=100k test/ test3/

6.服务端守护模式

接下来我们来体验下守护模式的rsync服务。

6.1 修改配置文件

安装rsync之后,会生成/etc/rsyncd.conf配置文件,我们先修改下配置文件:

vim /etc/rsyncd.conf
# 指定rsync守护进程运行时的用户身份(为了安全,一般设为nobody)
uid = nobody
 
# 指定rsync守护进程运行时的组身份
gid = nobody
 
# 是否启用chroot(默认是yes),设置为no可避免对文件路径限制,有利于备份大路径结构
use chroot = no
 
# 最大并发连接数,超出连接将被拒绝,防止资源耗尽
max connections = 20
 
# rsync守护进程运行时的日志文件
log file = /var/log/rsyncd.log
 
# PID文件路径,用于进程管理
pid file = /var/run/rsyncd.pid
 
# 守护进程监听的端口,默认873,确保防火墙已放通
port = 873
 
# 认证用户,仅这些用户可以访问该模块(对应下面的secrets file)
auth users = root
 
# 指定认证文件,格式为:用户名:密码,一行一个用户
secrets file = /etc/rsync.password
 
# 是否启用日志记录同步的文件详细信息
transfer logging = yes
 
# 设置为只读,客户端只能拉取数据
read only = false       
 
# 是否允许客户端查看该模块(可选
list = yes                
 
# 设置白名单,只允许设置的网段进行访问
hosts allow = 192.168.159.0/24
 
# 设置黑名单,限制访问
hosts deny = 0.0.0.0/32
 
# 在进行数据备份传输过程过程中,忽略一些I/O产生的传输错误
ignore errors
 
[data]   # 模块名,客户端使用 ::webdata 来访问这个模块
    path = /data/test/files      # 实际要共享的本地目录
    comment = test files sync    # 模块说明,可选
 
# 可以添加多个模块

指定的data模块对应目录为:/data/test/files,将test目录里面的文件拷贝到该目录下:

cp test/* /data/test/files

6.2 认证文件

配置文件里面我们指定的认证文件为/etc/rsync.password,以下命令可以创建改配置文件:
源服务器执行以下操作:

echo "root:12345678" > /etc/rsync.password
chmod 600 /etc/rsync.password

备份服务器执行以下操作:

echo "12345678" > /etc/rsync.password
chmod 600 /etc/rsync.password

注意:
(1)/etc/rsync.password文件的权限必须为600;
(2)源服务器和备份服务器密码格式不一样;
(3)生产环境的root密码一定要设置的复杂一些。

6.3 systemd管理

创建rsyncd.service文件,使用systemd的方式管理rsyncd服务,命令如下:

cat >> /etc/systemd/system/rsyncd.service << EOF
[Unit]
Description=Rsync Daemon
After=network.target
 
[Service]
ExecStart=/usr/bin/rsync --daemon --no-detach
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
 
[Install]
WantedBy=multi-user.target
EOF

启用并启动服务,命令如下:

systemctl daemon-reload
systemctl enable --now rsyncd

6.4 传输测试

以上安装,认证文件生成和systemd管理操作在源服务器和备份服务器执行,都操作完成之后就可以在备份服务器进行传输测试了,命令如下:

rsync -avz --delete --password-file=/etc/rsync.password root@192.168.159.172::data/test/file /data/test/

然后检查下数据目录是否有对应文件:

ll /data/test/
total 16
-rw-r--r--. 1 root root 4 Jan 15 17:18 a.txt
-rw-r--r--. 1 root root 4 Jan 15 17:18 b.txt
-rw-r--r--. 1 root root 4 Jan 15 17:18 c.txt
-rw-r--r--. 1 root root 4 Jan 15 17:18 e.log

可以看到文件同步到了备份服务器上。

7.总结

上述我们对rsync命令行和后台模式进行了详细的讲解,命令行基本可以满足大部分使用需求,而后台模式则可以让我们更好的管理rsync的使用,根据需要创建rsync模块,分配用户和管理权限,如果是定时同步的还可以将以上命令定时执行,合理的使用rsync命令不仅可以取代scp,还可以将备份部署工作事半功倍。

0
0
0
0
评论
未登录
暂无评论