常用 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
2
3
4
5
# 通过密钥文件服务器,无需输入密码。
rsync -avhz --progress --delete-delay -e 'ssh -p 22 -i ~/.ssh/Debian13_SSH' /vol1/1000/compose/aipan/ root@10.10.10.246:/mnt/test/

# 通过密码连接服务器,配置好密钥对,者不需要密码就可以连接。
rsync -avhz --progress --delete-delay -e 'ssh -p 22' /vol1/1000/compose/aipan/ root@10.10.10.246:/mnt/test/

行为:

  • aipan 目录本身(包括其所有内容)复制到目标路径中
  • 目标路径末尾无斜杠表示将创建同名目录

结果目录结构:

1
2
3
4
5
/mnt/test/          <-- 必须已存在!
└── aipan/ <-- 创建的目录副本
├── file1.txt
├── dir1/
└── ...

💡 适用场景:

当你想要在目标位置创建一个与源目录同名的完整副本时。


🔄 镜像同步内容(标准用法)

本地同步命令:

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
2
3
4
5
# 通过密钥文件服务器,无需输入密码。
rsync -avhz --progress --delete-delay -e 'ssh -p 22 -i ~/.ssh/Debian13_SSH' /vol1/1000/compose/aipan/ root@10.10.10.246:/mnt/test/aipan/

# 通过密码连接服务器,配置好密钥对,者不需要密码就可以连接。
rsync -avhz --progress --delete-delay -e 'ssh -p 22' /vol1/1000/compose/aipan/ root@10.10.10.246:/mnt/test/aipan/

行为:

  • 只同步 aipan/ 目录下的所有内容(文件和子目录)
  • 目标路径末尾的 / 强烈暗示目标目录已存在

结果目录结构:

1
2
3
4
/mnt/test/aipan/    <-- 必须已存在!
├── file1.txt <-- 源目录的内容直接放在这里
├── dir1/
└── ...

💡 适用场景:

让两个目录的内容保持完全一致(镜像)。这是最常用、最标准的用法。


✨ 镜像同步(自动创建路径)

本地同步命令:

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
2
3
4
5
# 通过密钥文件服务器,无需输入密码。
rsync -avhz --progress --delete-delay --mkpath -e 'ssh -p 22 -i ~/.ssh/Debian13_SSH' /vol1/1000/compose/aipan/ 10.10.10.246:/mnt/test/aipan/

# 通过密码连接服务器,配置好密钥对,者不需要密码就可以连接。
rsync -avhz --progress --delete-delay --mkpath -e 'ssh -p 22' /vol1/1000/compose/aipan/ root@10.10.10.246:/mnt/test/aipan/

行为:

  • 行为与镜像同步完全一致,同步 aipan/ 目录下的所有内容
  • --mkpath 选项是 rsync 3.2.3 之后加入的新功能,它允许自动创建目标路径中不存在的父目录

结果目录结构:

1
2
3
4
/mnt/test/aipan/    <-- 即使不存在也会自动创建!
├── file1.txt
├── dir1/
└── ...

💡 适用场景:

希望行为与镜像同步一致,但不想手动创建目标目录时。非常方便的新特性


🌐 远程同步详解

SSH 相关参数:

  • -e 'ssh -p 2222':使用 SSH 且指定端口 2222
  • -z:压缩传输数据,节省带宽
  • root@10.10.10.246::远程服务器用户名和地址

🔧 额外建议:

  1. 使用 SSH 密钥认证

    1
    2
    3
    4
    5
    # 生成 SSH 密钥对(如果尚未生成)
    ssh-keygen -t rsa

    # 将公钥复制到远程服务器
    ssh-copy-id -p 2222 root@10.10.10.246
  2. 带宽限制(适用于慢速连接):

    1
    rsync -avhz --bwlimit=1000 -e 'ssh -p 2222' /vol1/1000/compose/aipan/ root@10.10.10.246:/mnt/test/aipan/
  3. 网络稳定性

    • 对于大文件传输,考虑使用 --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. 首次运行前测试

    1
    2
    3
    rsync -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/
  2. 日志记录

    • 对于定期同步任务,建议记录同步日志
      1
      rsync -avhz --progress /vol1/1000/compose/aipan/ /mnt/test/aipan/ >> /var/log/rsync.log 2>&1

⚠️ 重要提醒

  1. 权限问题

    • 确保您有权限读取源目录
    • 确保目标目录有写入权限
  2. 删除操作谨慎使用

    • --delete-delay--delete 选项会删除目标端多余的文件,首次同步或不确定时请先使用 --dry-run 模拟运行,以免数据丢失!
  3. 版本兼容性

    • --mkpath 选项需要 rsync 3.2.3 或更高版本
    • 使用前请检查版本:rsync --version
  4. 网络注意事项

    • 远程同步时确保防火墙允许指定端口(默认 22 或自定义端口)
    • 考虑使用 --timeout 设置超时时间避免长时间挂起

✨ 最佳实践提示:

  • 对于生产环境,始终先用 --dry-run 测试
  • 定期检查同步日志以确保数据一致性
  • 对于重要数据,实施双向验证机制
  • 考虑使用 --backup--backup-dir 选项保留被删除文件的备份

通过本指南,您应该能够根据具体需求选择最适合的 rsync 命令格式,无论是本地同步还是远程同步。记住始终先测试再执行,确保数据安全!