侧边栏壁纸
博主头像
Setyg的博客

当秋风染红落叶的时候,就是新生~

  • 累计撰写 86 篇文章
  • 累计创建 66 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Rsync 跨主机复制使用实践

Setyg
2026-10-04 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

Rsync 跨主机复制使用实践

概述

rsync 是一个非常强大的工具,用于同步文件和目录。它可以高效地处理大文件和大量数据,并且支持通过网络进行文件传输。rsync 默认执行的即为增量同步算法——已经传输过的文件不会再传输,只有新增的、发生变更的文件才会重新同步,因此非常适合跨主机目录同步场景。

安装与检查

以下步骤在 Ubuntu 系统中执行。

1. 确认本机是否已安装 rsync

# 命令一:查看包信息
dpkg -s rsync

# 命令二:查看可执行文件位置
which rsync
# 或
whereis rsync

2. 安装 rsync

sudo apt-get update
sudo apt-get install rsync

前置准备

  • 确保 SSH 密钥认证已经配置好。

  • 私钥权限必须正确,否则 SSH 会拒绝使用:

    chmod 600 id_rsa

命令格式

rsync [options] source destination

排除目录

同步时排除不需要的目录,例如排除下面的 tmp、logs 目录:

--exclude=tmp/
--exclude=logs/

基础参数说明

参数

说明

-a

归档模式,保持符号链接、权限、时间戳等信息不变,-a 已包含目录递归传输

-v

详细模式,显示更多的输出信息

-z

压缩数据以节省带宽

-e ssh

指定使用 SSH 作为传输方式

-i /path

指定使用的 SSH 私钥文件位置

--info=progress2

显示传输进度条

跨主机复制实战

1. 从本地复制目录到远程服务器

rsync -avz --info=progress2 -e "ssh -i /remote_private_key_path" /path_to_local_directory/ user@remote_host:/path_to_remote_directory/

说明:/path_to_local_directory/ 是本地要复制的目录(末尾斜杠表示这是一个目录);user@remote_host:/path_to_remote_directory/ 是远程服务器上的目标目录(同样末尾带斜杠)。

2. 从远程服务器复制目录到本地(SSH 方式)

rsync -avz --info=progress2 -e "ssh -i /remote_private_key_path" user@remote_host:/path_to_remote_directory/ /path_to_local_directory/

3. 完整示例

假设你的私钥文件位于 /home/user/.ssh/id_rsa,你想将本地目录 /home/user/localdir 连同其所有子目录和文件一起复制到远程服务器上的 /home/user/ 目录下,远程服务器地址为 example.com,用户名为 user:

rsync -avz --info=progress2 -e "ssh -i /home/user/.ssh/id_rsa" /home/user/localdir/ user@example.com:/home/user/

本机目录间同步

rsync -avz --info=progress2 /data_source_path/ /data_target_path/

核心参数:--delete

--delete 选项用于删除目标目录中不再存在于源目录中的文件或目录。同步完成后,rsync 会清理目标目录,移除那些在源目录中不存在的文件和目录。

工作原理

  • 同步过程中:rsync 会将源目录中的文件和目录同步到目标目录中;源有而目标没有的文件会被添加或更新;目标有而源没有的文件会被标记为待删除。

  • 同步完成后:rsync 执行 --delete 操作,删除目标中存在但源中不存在的文件或目录。

使用示例

将本地目录 /local/path/to/source 同步到远程服务器 /remote/path/to/destination,并删除目标中多余的文件:

rsync -avz --progress --delete /local_source_path/ user@remote_host:/remote_path_to_destination/

完整常用命令(本地目录同步)

rsync -av --delete 源目录/ 目标目录/
  • -a:归档模式(递归、保留权限 / 属主 / 时间、软链接)

  • -v:可视化输出同步日志,可去掉静默执行

  • --delete:只删除「目标有、源没有」的文件 / 文件夹,不会删除源目录内容

路径末尾斜杠的区别

  • src/:同步 src 内部所有文件,不包含 src 文件夹本身

  • src:同步整个 src 文件夹到目标下

核心参数:--remove-source-files

使用 rsync 同步文件或目录,并且在同步完成后同时删除源文件或目录,可以使用 --remove-source-files 选项。该选项会在文件成功传输到目标位置后从源位置删除这些文件。

rsync -avz --progress --remove-source-files /local/path/to/source/ user@remote-host:/remote/path/to/destination/

注意事项

  • 使用 --remove-source-files 时要格外小心,它会导致源文件被永久删除,请提前做好备份。

  • 想在删除前查看将要删除哪些文件,可使用 --dry-run 进行模拟运行。

  • 想在删除前得到确认提示,可使用 --interactive 选项。

  • 如果同步过程中有任何失败或中断,rsync 可能不会正确地删除源文件,此时最好手动检查并确认所有文件已正确同步。

--progress 与 --info=progress2 的区别

选项

说明

--progress

主要用于快速查看文件传输的状态

--info=progress2

提供更详细的进度信息,包括已完成的百分比、剩余时间等,适合需要详细了解传输进度的情况

使用建议

  • 只需要基本的进度信息,使用 --progress 即可。

  • 需要更详细的进度报告,使用 --info=progress2。

注意事项

  • 确保远程服务器上的目标目录已经存在,否则 rsync 会尝试创建该目录,可能因权限问题而失败。

  • 同步大量数据或大文件可能需要较长时间;rsync 支持断点续传,即使中断也可以从中断的地方继续同步。

总结

rsync 凭借增量同步、断点续传、压缩传输等特性,是跨主机目录同步的首选工具。掌握 -a、-v、-z、-e ssh -i 基础参数,以及 --delete、--remove-source-files、--dry-run 等高级选项,可以灵活应对各种同步与备份场景。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区