常用 Rsync 同步命令详解 📁
常用 Rsync 同步命令详解 📁
Rsync 中源路径和目标路径末尾是否添加斜杠
/
,其行为完全不同。理解这一点对正确同步数据至关重要,无论是本地还是远程同步。
📚 目录导航
- ✨ Rsync 简介与特点
- 🔍 核心概念:路径斜杠的作用
- 🟢 同步目录本身(推荐用法)
- 🔄 镜像同步内容(标准用法)
- ✨ 镜像同步(自动创建路径)
- 🌐 远程同步详解
- 🆚 命令对比分析
- 💡 使用场景建议
- ⚠️ 重要提醒
✨ Rsync 简介与特点
Rsync(Remote Synchronization)是一款强大的文件同步工具,广泛用于本地和远程数据备份与镜像。它的核心特点包括:
- 高效传输 🔄:仅同步变化的文件部分,大幅节省带宽和时间
- 保持权限 📁:完美保留文件属性、权限和时间戳
- 灵活过滤 🔍:支持按名称、大小等条件排除或包含文件
- 多种传输模式 🌐:支持本地、远程(SSH)、守护进程等多种方式
🔍 核心概念:路径斜杠的作用
理解源路径和目标路径末尾斜杠的区别是掌握 rsync 的关键:
源路径斜杠规则:
- 有斜杠 (
path/to/source/
) → 同步源目录的内容 - 无斜杠 (
path/to/source
) → 同步源目录本身及其内容
目标路径斜杠规则:
- 有斜杠 (
path/to/destination/
) → 提示目标是一个已存在的目录 - 无斜杠 (
path/to/destination
) → 可能创建目录或文件
✨ 黄金法则:
- 源路径有无斜杠? → 决定同步什么(是目录本身还是其内容)。
- 目标路径有无斜杠? → 提示目录是否存在(或使用
--mkpath
自动创建)。
🟢 同步目录本身(推荐用法)
本地同步命令:
1 | rsync -avhz --progress --delete-delay /vol1/1000/compose/aipan /mnt/test/ |
-a
(archive模式):包含递归同步、保留权限、时间戳等,会自动包含隐藏文件-v
:显示详细输出-h
:人类可读的格式输出-z
:压缩传输数据--progress
:显示同步进度--delete-delay
:在传输完成后删除目标端多余文件- 源目录尾部没有
/
表示- 会在目标位置创建一个名为 “aipan” 的目录
- 源目录的所有内容会被复制到目标位置的 “aipan” 目录中
- 例如:
/vol1/1000/compose/aipan
→/目标路径/mnt/test/aipan
远程同步命令:
1 | # 通过密钥文件服务器,无需输入密码。 |
行为:
- 将
aipan
目录本身(包括其所有内容)复制到目标路径中 - 目标路径末尾无斜杠表示将创建同名目录
结果目录结构:
1 | /mnt/test/ <-- 必须已存在! |
💡 适用场景:
当你想要在目标位置创建一个与源目录同名的完整副本时。
🔄 镜像同步内容(标准用法)
本地同步命令:
1 | rsync -avhz --progress --delete-delay /vol1/1000/compose/aipan/ /mnt/test/aipan/ |
-a
(archive模式):包含递归同步、保留权限、时间戳等,会自动包含隐藏文件-v
:显示详细输出-h
:人类可读的格式输出-z
:压缩传输数据--progress
:显示同步进度--delete-delay
:在传输完成后删除目标端多余文件- 源目录尾部有的
/
表示- 不会在目标位置创建 “aipan” 目录
- 源目录的内容直接复制到目标位置
- 例如:
/vol1/1000/compose/aipan/xxx.conf
→/mnt/test/aipan/xxx.conf
远程同步命令:
1 | # 通过密钥文件服务器,无需输入密码。 |
行为:
- 只同步
aipan/
目录下的所有内容(文件和子目录) - 目标路径末尾的
/
强烈暗示目标目录已存在
结果目录结构:
1 | /mnt/test/aipan/ <-- 必须已存在! |
💡 适用场景:
让两个目录的内容保持完全一致(镜像)。这是最常用、最标准的用法。
✨ 镜像同步(自动创建路径)
本地同步命令:
1 | rsync -avhz --progress --delete-delay --mkpath /vol1/1000/compose/aipan/ /mnt/test/aipan/ |
-a
(archive模式):包含递归同步、保留权限、时间戳等,会自动包含隐藏文件-v
:显示详细输出-h
:人类可读的格式输出-z
:压缩传输数据--progress
:显示同步进度--delete-delay
:在传输完成后删除目标端多余文件--mkpath
它允许自动创建目标路径中不存在的父目录- 源目录尾部有的
/
表示- 不会在目标位置创建 “aipan” 目录
- 源目录的内容直接复制到目标位置
- 例如:
/vol1/1000/compose/aipan/xxx.conf
→/mnt/test/aipan/xxx.conf
远程同步命令:
1 | # 通过密钥文件服务器,无需输入密码。 |
行为:
- 行为与镜像同步完全一致,同步
aipan/
目录下的所有内容 --mkpath
选项是 rsync 3.2.3 之后加入的新功能,它允许自动创建目标路径中不存在的父目录
结果目录结构:
1 | /mnt/test/aipan/ <-- 即使不存在也会自动创建! |
💡 适用场景:
希望行为与镜像同步一致,但不想手动创建目标目录时。非常方便的新特性。
🌐 远程同步详解
SSH 相关参数:
-e 'ssh -p 2222'
:使用 SSH 且指定端口 2222-z
:压缩传输数据,节省带宽root@10.10.10.246:
:远程服务器用户名和地址
🔧 额外建议:
使用 SSH 密钥认证:
1
2
3
4
5# 生成 SSH 密钥对(如果尚未生成)
ssh-keygen -t rsa
# 将公钥复制到远程服务器
ssh-copy-id -p 2222 root@10.10.10.246带宽限制(适用于慢速连接):
1
rsync -avhz --bwlimit=1000 -e 'ssh -p 2222' /vol1/1000/compose/aipan/ root@10.10.10.246:/mnt/test/aipan/
网络稳定性:
- 对于大文件传输,考虑使用
--partial
支持断点续传1
rsync -avhz --partial --progress -e 'ssh -p 2222' /vol1/1000/compose/aipan/ root@10.10.10.246:/mnt/test/aipan/
- 对于大文件传输,考虑使用
🆚 命令对比分析
特性 | 同步目录本身 | 镜像同步内容 | 自动创建路径同步 |
---|---|---|---|
同步对象 | 目录本身 + 内容 | 仅目录内容 | 仅目录内容 |
源路径 | 无末尾斜杠 | 有末尾斜杠 | 有末尾斜杠 |
目标要求 | 父目录必须存在 | 目标目录必须存在 | 自动创建路径 |
结果结构 | 创建嵌套目录 | 内容直接放入 | 内容直接放入 |
适用场景 | 备份整个目录结构 | 镜像同步已有目录 | 镜像同步并自动创建路径 |
💡 使用场景建议
1. 选择同步目录本身当:
- 想要在目标位置保留完整的目录结构
- 目标位置已有父目录(如
/mnt/test/
) - 需要将整个目录备份到目标位置
2. 选择镜像同步当:
- 只想同步目录内容(最常用)
- 确保目标目录已提前创建
- 需要保持两个目录内容完全一致
3. 选择自动创建路径同步当:
- 不确定目标路径是否存在
- 希望自动化创建目录结构
- 需要最便捷的镜像同步方案
🔧 通用建议:
首次运行前测试:
1
2
3rsync -avhz --dry-run /vol1/1000/compose/aipan/ /mnt/test/aipan/
# 或远程
rsync -avhz --dry-run -e 'ssh -p 2222' /vol1/1000/compose/aipan/ root@10.10.10.246:/mnt/test/aipan/日志记录:
- 对于定期同步任务,建议记录同步日志
1
rsync -avhz --progress /vol1/1000/compose/aipan/ /mnt/test/aipan/ >> /var/log/rsync.log 2>&1
- 对于定期同步任务,建议记录同步日志
⚠️ 重要提醒
权限问题:
- 确保您有权限读取源目录
- 确保目标目录有写入权限
删除操作谨慎使用:
--delete-delay
或--delete
选项会删除目标端多余的文件,首次同步或不确定时请先使用--dry-run
模拟运行,以免数据丢失!
版本兼容性:
--mkpath
选项需要 rsync 3.2.3 或更高版本- 使用前请检查版本:
rsync --version
网络注意事项:
- 远程同步时确保防火墙允许指定端口(默认 22 或自定义端口)
- 考虑使用
--timeout
设置超时时间避免长时间挂起
✨ 最佳实践提示:
- 对于生产环境,始终先用
--dry-run
测试- 定期检查同步日志以确保数据一致性
- 对于重要数据,实施双向验证机制
- 考虑使用
--backup
和--backup-dir
选项保留被删除文件的备份
通过本指南,您应该能够根据具体需求选择最适合的 rsync 命令格式,无论是本地同步还是远程同步。记住始终先测试再执行,确保数据安全!
评论