rsync 是一种非常常用的文件同步工具,能够在两台服务器之间**地同步文件和目录。它支持增量传输,只同步发生了变化的文件部分,极大提升了传输效率。以下是使用 rsync 命令同步两台服务器之间文件的步骤与详细示例。
前提条件
两台服务器,假设它们的 IP 分别为 ServerA: 192.168.1.100 和 ServerB: 192.168.1.101。
SSH 访问权限:rsync 默认通过 SSH 进行**连接,因此需要确保可以通过 SSH 从 ServerA 连接到 ServerB。
安装 rsync:确保两台服务器上都已安装 rsync。
rsync 命令基本格式
rsync [选项] 源文件路径 目标文件路径
常用选项
-a:归档模式,表示递归传输文件并保持文件属性(相当于 -rlptgoD)。
-v:显示传输过程中的详细信息。
-z:在传输过程中压缩文件。
-P:显示传输进度,并在中断后可以继续传输。
-e:指定远程 shell 程序(如 ssh)。
--delete:删除目标目录中源文件已删除的文件,使两端完全同步。
1. 从本地服务器同步到远程服务器
假设我们在 ServerA 上执行 rsync,同步文件到 ServerB。
例子:将本地目录 /var/www/ 同步到 ServerB 上的 /backup/www/
rsync -avzP -e ssh /var/www/
user@192.168.1.101:/backup/www/
解释:
-a:归档模式,保留文件属性。
-v:显示详细信息。
-z:传输时压缩文件。
-P:显示进度并支持断点续传。
-e ssh:使用 SSH 连接到远程服务器。
user@192.168.1.101:远程服务器的 SSH 用户名和 IP 地址。
/backup/www/:远程服务器的目标目录。
带有 --delete 参数的同步
如果需要目标目录与源目录完全同步(包括删除目标中不存在的文件),可以使用 --delete 选项。
rsync -avzP --delete -e ssh /var/www/
user@192.168.1.101:/backup/www/
2. 从远程服务器同步到本地服务器
如果我们想从 ServerB 上的 /backup/www/ 目录同步到本地 ServerA 的 /var/www/ 目录,可以执行以下命令:
rsync -avzP -e ssh
user@192.168.1.101:/backup/www/ /var/www/
3. 使用免密码的 SSH 登录
为了避免每次执行 rsync 时输入密码,可以配置 SSH 密钥认证。
步骤:
生成 SSH 密钥对(如果还没有):
ssh-keygen -t rsa
按提示生成公钥和私钥(一般位于 ~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub)。
将公钥**到远程服务器:
ssh-copy-id
user@192.168.1.101
这会将公钥添加到远程服务器 ~/.ssh/authorized_keys 文件中。
测试免密登录:
ssh
user@192.168.1.101
如果无需输入密码即可登录,SSH 免密码认证配置成功。
再次使用 rsync:
现在可以使用 rsync 进行同步,而不需要输入密码:
rsync -avzP /var/www/
user@192.168.1.101:/backup/www/
4. 在 crontab 中自动执行 rsync
你可以将 rsync 命令添加到 crontab 中,以实现定时自动同步。
步骤:
编辑 crontab:
crontab -e
添加定时任务,例如每天凌晨 2 点同步:
0 2 * * * rsync -avzP /var/www/
user@192.168.1.101:/backup/www/
这会每天凌晨 2 点自动执行 rsync 同步。
5. 使用排除文件
有时候,你不想同步某些文件或目录,可以使用 --exclude 选项。
例子:排除 .git 目录和日志文件:
rsync -avzP --exclude='.git/' --exclude='*.log' /var/www/
user@192.168.1.101:/backup/www/
总结
rsync 是一个**的文件同步工具,特别适合大文件和远程服务器之间的增量同步。
结合 SSH 免密登录和 crontab,可以实现自动化、无干预的文件备份和同步。