当前位置: 首页 > news >正文

Rsync 详解:从入门到实战,掌握 Linux 数据同步与备份的核心工具

一、什么是 Rsync?

rsyncremote sync)是 Linux/Unix 系统中用于高效同步文件和目录的命令行工具,它不仅可以用于本地复制,更擅长在不同主机之间进行安全、快速、增量的数据传输

与传统的 scpcp 命令相比,rsync 的最大优势在于:

增量传输:只传输发生变化的部分(新增、修改的文件),大幅提升效率
支持多种模式:本地、远程、守护进程(daemon)模式
断点续传 & 压缩传输:网络中断后可继续,节省带宽
权限保留:可保留文件的权限、时间戳、所有者等属性

一句话总结
rsync 是 Linux 下实现数据备份、迁移、同步的“瑞士军刀”。


二、Rsync vs SCP:全量 vs 增量

对比项scprsync
传输方式全量传输(每次都全部复制)增量传输(只传变化部分)
效率低(尤其大目录)高(首次全量,后续极快)
是否压缩否(除非手动加 -C支持 -z 压缩
是否保留属性是(-a 参数)
是否支持排除文件支持 --exclude

示例对比

# 使用 scp(全量)
scp -r /etc/ root@192.168.130.62:/tmp/# 使用 rsync(增量)du 
rsync -avz /etc/ root@192.168.130.62:/tmp/

⚠️ 注意/etc/etc/rsync 中有区别:

  • /etc → 传输目录本身及其内容
  • /etc/ → 只传输目录下的内容(不包含 etc 目录)

三、Rsync 的三种使用模式

模式适用场景是否推荐
本地模式本地文件复制(类似 cp❌ 了解即可
远程模式(SSH)临时推送/拉取数据,需密码或密钥认证✅ 推荐
守护进程模式(daemon)生产环境定时备份、免密同步、自动化脚本场景✅✅✅ 强烈推荐

四、远程模式:SSH 传输(临时使用)

适用于点对点临时数据传输,依赖 SSH 认证。

1. 推送(Push):从本地推送到远程

# 推送单个文件
rsync -avz /etc/hostname root@192.168.130.62:/tmp/# 推送整个目录(包含目录本身)
rsync -avz /etc root@192.168.130.62:/tmp/# 推送目录内容(不包含目录本身)
rsync -avz /etc/ root@192.168.130.62:/tmp/test

2. 拉取(Pull):从远程拉取到本地

# 从远程拉取文件
rsync -avz root@192.168.130.62:/etc/hosts /opt/# 拉取整个目录
rsync -avz root@192.168.130.62:/data/ /backup/

🔑 说明

  • -a:归档模式(等价于 -rlptgoD),保留权限、时间、软链接等
  • -v:显示详细过程
  • -z:压缩传输,适合公网环境
  • -P:显示进度条 + 断点续传(--partial --progress

五、守护进程模式(Daemon Mode)——生产环境首选

这是 rsync 最强大的用法,常用于定时备份、免密同步、自动化运维

应用场景

  • 定时备份数据库、配置文件
  • 实时同步(配合 inotify + sersync/lsyncd
  • 异地容灾:将数据推送到异地服务器
  • 解决存储单点问题

1. 服务端配置(以 backup 服务器为例)

(1)安装 rsync
yum install -y rsync
(2)创建虚拟用户(安全隔离)
useradd -s /sbin/nologin -M rsync
(3)创建认证密码文件
echo 'rsync_backup:123456' > /etc/rsync.password
chmod 600 /etc/rsync.password

🔐 注意:该文件存储的是 服务端认证用户和密码,格式为 用户名:密码

(4)创建共享目录
mkdir /server_data /backup
chown rsync.rsync /server_data /backup
(5)配置 /etc/rsyncd.conf
# /etc/rsyncd.conf
# created by Freed 2025-09-16
# rsyncd.conf startfake super = yes
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
# hosts allow = 192.0.0.0/24  # 可选:允许的IP网段
# hosts deny = 0.0.0.0/32   # 可选:拒绝的IPauth users = rsync_backup
secrets file = /etc/rsync.password# 模块1:data
[data]
comment = Data backup module
path = server_data# 模块2:backup
[backup]
comment = Backup storage
path = /backup
(6)启动服务
systemctl enable rsyncd
systemctl start rsyncd
(7)检查服务状态
ps -ef | grep rsync
ss -lntup | grep :873

✅ 默认端口:873


2. 客户端使用(推送/拉取)

(1)基本测试(手动输入密码)
rsync -avz /etc/hosts rsync_backup@192.168.130.62::data

💬 输入密码:123456

(2)免密传输(生产环境必备)

创建客户端密码文件(只存密码):

echo "123456" > /etc/rsync.client
chmod 600 /etc/rsync.client

推送命令:

rsync -avz /etc/hostname rsync_backup@192.168.130.62::data --password-file=/etc/rsync.client

实现自动化脚本免交互!


3. 守护进程模式小结:部署流程

步骤服务端操作客户端操作
1安装 rsync安装 rsync
2创建虚拟用户 rsync——
3配置 /etc/rsyncd.conf——
4创建密码文件 /etc/rsync.password(权限 600)创建密码文件 /etc/rsync.client(权限 600)
5创建共享目录并授权——
6启动并设置开机自启——
7测试连接使用 rsync 命令推送/拉取

六、常用 Rsync 参数详解

参数说明
-a归档模式,等价于 -rlptgoD(递归、保留权限、时间、所有者、组、设备)
-v显示详细过程
-z压缩传输(适合公网)
-P显示进度条 + 断点续传
--bwlimit=500限速 500KB/s,避免占满带宽
--exclude=FILE排除指定文件/目录
--exclude-from=/path/to/file从文件中读取排除列表
--delete使目标目录与源目录完全一致(慎用!)

实用示例

# 限速传输
rsync -avP --bwlimit=500k /tmp/data/ root@192.168.130.62:/backup/# 排除单个目录
rsync -av /data/ root@192.168.130.62:/backup/ --exclude=logs# 排除多个目录
rsync -av /data/ root@192.168.130.62:/backup/ --exclude={logs,cache,tmp}# 从文件读取排除规则
cat > /tmp/exclude.txt << EOF
*.log
*.tmp
/temp/
EOF
rsync -av /data/ root@192.168.130.62:/backup/ --exclude-from=/tmp/exclude.txt# 保持完全一致(源删目标也删)
rsync -avP --delete /source/ root@192.168.130.62:/target/

⚠️ --delete 非常危险!建议先用 --dry-run 模拟测试。


七、常见故障与排查

故障现象原因解决方案
password mismatch密码错误或密码文件格式不对检查 /etc/rsync.password 格式和权限
auth failed on module ... no secrets file服务端未配置 secrets file确认配置文件路径正确,文件存在
@ERROR: module not found模块名错误检查 [data] 等模块名是否拼写正确
permission denied目录权限不足或 SELinux/防火墙阻止chown rsync.rsync /data,关闭 SELinux 或放行 873 端口
no matching rulehosts allow 限制了 IP检查 hosts allow 配置,或注释掉测试

八、企业级应用场景总结

场景方案
定时备份crond + rsync 守护进程模式
实时同步inotify + rsynclsyncd/sersync
异地容灾将数据推送到异地 rsync 服务端
配置文件统一管理所有服务器从中心节点拉取配置
日志集中收集各业务服务器定时推送日志到日志服务器

九、实战案例:Git 更新 + Rsync 同步(多服务器代码部署)

在实际运维场景中,我们经常需要将最新代码从 Git 仓库拉取后,统一部署到多个业务服务器(Server),同时保留各服务器的本地配置(如 config/log/ 等)。
本案例结合 git pullrsync,实现一键更新 + 增量同步,大幅提升部署效率与一致性。


场景描述

  • 所有服务目录以 Server* 命名(如 Server01, Server02, Server03
  • 每个 Server* 目录是一个独立的服务实例,包含可执行程序、脚本、配置文件等
  • 要求:
    • 从 Git 仓库更新代码
    • 将变更同步到所有其他 Server* 实例
    • 保留每个实例的本地配置(config/)和日志(log/
    • 自动化、可脚本化

🔧 解决方案:git pull + rsync 联动

核心思路
  1. 选择一个主目录(如第一个 Server*)作为“源”
  2. 在该目录执行 git pull 拉取最新代码
  3. 使用 rsync 将更新后的文件增量同步到其他所有 Server* 目录
  4. 排除不需要同步的敏感或本地化目录(config/, log/, .git

实战脚本:run.sh 完整示例
#!/bin/bash# 获取所有 Server* 目录,并按名称排序
server_directories=($(find . -maxdepth 1 -type d -name "Server*" -not -path '*/\.*' -print0 | xargs -0 -n1 basename | sort))# 主函数:启动所有服务
start_all() {for dir in "${server_directories[@]}"; doecho "正在启动服务目录:$dir"(cd "$dir" && ./rungame.sh start)done
}# 停止所有服务
stop_all() {for dir in "${server_directories[@]}"; doecho "正在停止服务目录:$dir"(cd "$dir" && ./rungame.sh stop)done
}# 更新代码并同步到所有 Server 实例
update_and_sync() {if [ ${#server_directories[@]} -eq 0 ]; thenecho "未找到任何 Server* 目录。"exit 1fi# 以第一个 Server 目录作为“源”main_server=${server_directories[0]}echo "正在从 Git 更新代码,源目录:$main_server"# 拉取最新代码(cd "$main_server" && git pull) || { echo "Git 拉取失败,请检查网络或仓库状态"; exit 1; }echo "开始同步更新到其他 Server 目录..."# 遍历其余 Server 目录,使用 rsync 同步(排除 config, log, .git)for dir in "${server_directories[@]:1}"; doecho "正在同步到目录:$dir"rsync -a \--exclude='config/' \--exclude='log/' \--exclude='.git' \--delete \--itemize-changes \--out-format="%n" \"$main_server/" "$dir/"doneecho "代码更新与同步已完成!"
}# 显示帮助信息
show_help() {echo "用法: $0 [start|stop|up]"echo "start   启动所有 Server 服务"echo "stop    停止所有 Server 服务"echo "up      拉取最新代码并同步到所有 Server 实例"
}# 主命令分发
case "$1" instart)start_all;;stop)stop_all;;up)update_and_sync;;*)show_help;;
esac

脚本功能说明
命令功能
./run.sh start启动所有 Server* 服务
./run.sh stop停止所有 Server* 服务
./run.sh up从 Git 拉取最新代码 → 同步到所有 Server(核心功能)

关键安全与同步策略
排除项说明
--exclude='config/'保留每个 Server 的本地配置(数据库地址、端口等)
--exclude='log/'避免日志文件被覆盖或误删
--exclude='.git'防止 .git 元数据污染目标目录
--delete确保目标目录与源代码完全一致(删除已移除的旧文件)

⚠️ 建议:首次使用前可添加 --dry-run 参数测试同步效果:

rsync -a --exclude='config/' --delete --dry-run "$main_server/" "$dir/"

部署流程图
[Git Repo]↓ git pull
Main Server (Server01)↓ rsync (exclude: config, log, .git)
├── Server02
├── Server03
├── Server04
└── Server05

📈 企业级扩展建议
  • 结合 CI/CD:将此脚本集成到 Jenkins/GitLab CI,实现自动化发布
  • 版本标记:在 git pull 后记录 commit ID,便于回滚
  • 灰度发布:先同步到测试 Server,验证后再推送到生产
  • 备份机制:同步前自动备份关键目录(如 config/

总结

通过 git pull + rsync 的组合,我们实现了:

  • 高效更新:只传输变化的代码文件
  • 配置隔离:保留每个 Server 的本地配置
  • 一键部署:简化多实例管理
  • 可审计性:结合 Git 历史追踪变更

💡 适用场景:游戏服务器集群、微服务多实例、测试环境批量更新等。


十、总结

rsync 是 Linux 系统中不可或缺的数据同步工具。掌握其三种模式,尤其是守护进程模式,是每个运维工程师的基本功。

核心要点回顾

  • 增量传输是 rsync 的灵魂
  • /etc/etc/ 有区别
  • 守护进程模式 = 免密 + 自动化 + 高效
  • 配置文件、虚拟用户、密码文件、权限缺一不可
  • --exclude--delete 是高级但危险的功能

文章转载自:

http://siisC4JF.wphzr.cn
http://d5uHGMmI.wphzr.cn
http://nIvETWTG.wphzr.cn
http://AuSYGnSg.wphzr.cn
http://nwOy6UaG.wphzr.cn
http://soSYk0FA.wphzr.cn
http://oBENfTmq.wphzr.cn
http://R4dCijxw.wphzr.cn
http://OL1u14BZ.wphzr.cn
http://fIlAoWeE.wphzr.cn
http://ATOO59IX.wphzr.cn
http://n7KC6Lz1.wphzr.cn
http://GRYuZXGg.wphzr.cn
http://ieoXvc0z.wphzr.cn
http://960NB8nQ.wphzr.cn
http://MrB1FrTo.wphzr.cn
http://N7lYqWxj.wphzr.cn
http://zW6whIES.wphzr.cn
http://mmeGnId0.wphzr.cn
http://xCNdAQ2E.wphzr.cn
http://8nexnpkr.wphzr.cn
http://7cppW63V.wphzr.cn
http://jsshsaqH.wphzr.cn
http://LUhHpM5C.wphzr.cn
http://zSgapkrg.wphzr.cn
http://drICbJ4W.wphzr.cn
http://NqFGQfzl.wphzr.cn
http://KHtuHQcp.wphzr.cn
http://1Amp20p7.wphzr.cn
http://9BZPu4F6.wphzr.cn
http://www.dtcms.com/a/388057.html

相关文章:

  • ffmpeg解复用aac
  • 数据结构--3:LinkedList与链表
  • linx 系统 ffmpeg 推流 rtsp
  • 防水淹厂房监测报警系统的设计原则及主要构成
  • RFID技术赋能工业教学设备教学应用经典!
  • Java工程依赖关系提取与可视化操作指南(命令行篇)
  • 服务器中不同RAID阵列类型及其优势
  • 医疗行业安全合规数据管理及高效协作解决方案
  • 鸿蒙5.0应用开发——V2装饰器@Event的使用
  • logstash同步mysql流水表到es
  • Ground Control-卫星通信 (SATCOM) 和基于蜂窝的无人机和机器人物联网解决方案
  • 计算机视觉技术深度解析:从图像处理到深度学习的完整实战指南
  • 互联网大厂Java面试:从Spring Boot到微服务的实战考验
  • k8s NodePort 30000 - 32767 被用完后该如何处理
  • 高级系统架构师笔记——软件工程基础知识(2)RAD/敏捷模型/CMM/CBSE
  • 【C++】C++类和对象—(中)
  • React 记忆缓存使用
  • 图观 流渲染场景服务编辑器
  • WALL-OSS——点燃QwenVL 2.5在具身空间中的潜力:VL FFN可预测子任务及离散动作token,Action FNN则预测连续动作
  • 设备中断绑定于香港服务器高性能容器的优化方法
  • 物理服务器具体是指哪些
  • Hive内部表外部表分区分桶数据类型
  • THREE练习写了几个简单小游戏的总结
  • Flume与Sqoop核心知识点总结:Hadoop生态的数据传输双引擎
  • 微服务spring cloud alibabab 启动报错: No spring.config.import set
  • 开心实习之第n天
  • 【系列文章】Linux系统中断的应用04-共享工作队列实验
  • Java的jdk21与 Go语言对比
  • 告别 MaaS 模型选型困难:AI Ping 为大模型服务选型提供精准性能评测排行榜
  • 41.OpenCV入门:计算机视觉的瑞士军刀