服务器其它

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 服务器其它 > rsync 命令详解

rsync 命令详解与示例

投稿:mdxy-dxy

rsync 是一个强大的文件同步工具,用于在本地或远程系统之间高效传输和同步文件,它通过仅传输文件的差异部分(增量传输)来节省带宽和时间,是备份、镜像和日常文件同步的常用工具

一、rsync 命令核心功能与基本语法

1. 核心功能

2. 基本语法

# 本地同步语法
rsync [选项] [源路径] [目标路径]
# 远程同步语法(通过 SSH 协议)
rsync [选项] [源路径] [用户@]远程主机:[目标路径]
rsync [选项] [用户@]远程主机:[源路径] [目标路径]
# 远程同步语法(通过 rsync 守护进程协议)
rsync [选项] rsync://远程主机模块名/[目标路径]

核心参数分类

二、常用用例与命令示例

1. 本地文件同步

场景:将本地目录 /data/source 同步到 /data/backup,保留所有属性并显示详细过程。

rsync -av /data/source/ /data/backup/

末尾斜杠 / 表示同步目录内的内容,目标目录不存在时会自动创建。

若源路径不带斜杠(如 /data/source),目标目录会创建以 source 为名的子目录。

2. 远程同步(通过 SSH)

场景 1:本地文件上传到远程服务器

rsync -avz /local/file.txt user@remote.server:/remote/path/

-z 压缩文件,适合网络传输;远程路径需用户有权限写入。

场景 2:从远程服务器下载文件

rsync -avz user@remote.server:/remote/file.txt /local/path/

场景 3:跨服务器同步(无需本地中转)

rsync -avz -e "ssh -p 2222" user1@server1:/source/ user2@server2:/dest/

-e 指定使用 SSH 协议及端口(默认 22),支持加密传输。

3. 增量备份与镜像同步

场景 1:增量备份(仅更新变化的文件,删除目标中多余文件)

rsync -av --delete /source/ /backup/

--delete 会使目标与源严格一致,谨慎用于重要数据!建议先用 --dry-run 模拟。

场景 2:保留历史版本的增量备份(使用硬链接节省空间)

rsync -av --link-dest=/backup/last/ /source/ /backup/current/

--link-dest 让新备份共享上一次备份的相同文件,仅存储差异部分。

4. 排除/包含特定文件

场景:同步目录时排除日志文件和临时文件

rsync -av --exclude="*.log" --exclude="tmp/" /data/ /backup/

支持通配符(*?)和目录路径(如 tmp/ 表示排除整个目录)。

复杂过滤可使用 --exclude-from=文件,在文件中每行写一个排除模式:

rsync -av --exclude-from=exclude.list /source/ /dest/

5. 性能优化与高级选项

限速传输(避免影响带宽):

rsync -avz --bwlimit=2048 /large_data/ remote:/storage/

校验和模式(跳过时间戳检查,确保文件内容一致):

rsync -av --checksum /source/ /dest/

保留符号链接(默认保留,若需跟随链接同步实际文件,加 --follow-symlinks):

rsync -av --follow-symlinks /source/ /dest/

三、常见问题与解决方案

1. 权限问题:rsync: failed to open dir: Permission denied

原因:源/目标目录无读取/写入权限,或远程用户权限不足。

解决

本地同步:使用 sudo 提升权限,或确保用户对路径有对应权限。

远程同步:检查远程用户是否为目录所有者,或使用 ssh-keygen 配置无密码登录避免权限中断。

2. 误删文件:--delete 意外删除目标文件

预防

永远先用 --dry-run 模拟同步,确认输出中无错误删除操作:

rsync -av --delete --dry-run /source/ /dest/

重要数据先备份目标目录,或使用 --delete-after(先传输新文件再删除,减少风险)。

3. 传输中断:网络不稳定导致同步失败

解决

使用 -P--partial)保留未完成传输的临时文件,支持断点续传:

rsync -avP /large_file.iso remote:/dest/

若频繁中断,可搭配 rsync + nohup 或 screen 保持会话持续。

4. 文件冲突:源与目标有同名但内容不同的文件

现象rsync 默认以源文件覆盖目标文件,可能导致数据丢失。

解决

使用 --compare-dest=参考目录 对比三方文件,优先保留最新版本(需 rsync >= 3.1.0):

rsync -av --compare-dest=/reference/ /source/ /dest/

手动检查冲突文件(通过 --itemize-changes 输出详细差异):

bash

rsync -av --itemize-changes /source/ /dest/

5. 符号链接异常:同步后链接失效或指向错误

原因:默认 rsync 保留符号链接本身,不跟随其指向的文件。

解决

若需保留链接(推荐):无需额外参数,默认行为正确。

若需同步链接指向的实际文件:添加 --follow-symlinks,但可能导致循环链接错误。

6. 元数据丢失:权限/时间戳未正确保留

原因:未使用归档模式 -a,或远程服务器限制权限写入。

解决

始终使用 -a 或显式添加 -rltp(递归、保留符号链接、时间戳、权限)。

远程同步时,确保目标用户有 chmod/chown 权限(如使用 root 用户或 sudo)。

7. 压缩无效:-z 未减少传输量

原因:传输的文件已是压缩格式(如 .zip.tar.gz),压缩反而增加开销。

解决:对二进制或文本文件用 -z,对已压缩文件改用 -z0(最小压缩)或直接禁用 -z

8. 网络连接超时:远程主机不可达

原因:SSH 端口错误、防火墙阻止连接、主机名解析失败。

解决

检查远程主机 IP/端口(ping remote.server 或 ssh user@remote.server -p 端口)。

添加 -e "ssh -o ConnectTimeout=10" 限制连接超时时间:

rsync -avz -e "ssh -o ConnectTimeout=10" /local/ remote:/dest/

四、最佳实践总结

测试优先:复杂同步任务先用 --dry-run 模拟,确认输出无误后再执行。

备份关键数据:对重要目录同步前,手动备份目标数据(尤其是含 --delete 的操作)。

日志记录:通过 --log-file=rsync.log 记录同步过程,方便后续审计或排错:

rsync -av --delete --log-file=sync.log /source/ /dest/

版本控制:结合 --link-dest 实现基于硬链接的版本化备份,节省存储空间。

通过掌握上述用法,可高效利用 rsync 完成本地/远程文件同步、增量备份、服务器镜像等任务,同时避免常见陷阱。实际使用中建议根据具体场景调整参数,必要时查阅官方文档(man rsync)获取完整选项说明。 

您可能感兴趣的文章:
阅读全文