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/
基础参数说明
跨主机复制实战
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。
注意事项
确保远程服务器上的目标目录已经存在,否则 rsync 会尝试创建该目录,可能因权限问题而失败。
同步大量数据或大文件可能需要较长时间;rsync 支持断点续传,即使中断也可以从中断的地方继续同步。
总结
rsync 凭借增量同步、断点续传、压缩传输等特性,是跨主机目录同步的首选工具。掌握 -a、-v、-z、-e ssh -i 基础参数,以及 --delete、--remove-source-files、--dry-run 等高级选项,可以灵活应对各种同步与备份场景。
评论区