一、rsync 简介
rsync
(Remote Sync)是一款开源的快速增量文件同步工具,通过 增量传输算法仅同步差异部分,显著提升传输效率。其核心特性包括:
- 高效同步:仅传输文件变化部分,节省带宽和时间。
- 跨平台支持:支持 Linux、macOS、Windows(通过 Cygwin/WSL)。
- 灵活模式:支持本地同步、远程 Shell 同步(SSH)和守护进程模式。
- 数据一致性:保留文件权限、时间戳、软硬链接等属性。
二、安装与基础命令
1. 安装 rsync
- Linux:
sudo yum install rsync
2. 基础语法
rsync [选项] 源路径 目标路径
三、核心场景实战
场景 1:本地文件夹同步
需求:将 /data/website
同步到 /backup/website
,保留权限与属性。
rsync -avz --progress /data/website/ /backup/website
-a
:归档模式(保留属性、递归目录)。-v
:显示详细过程。-z
:压缩传输。--progress
:显示传输进度。
场景 2:远程服务器同步(SSH 模式)
需求:将本地 /www
目录同步到远程服务器 user@192.168.1.100
的 /var/www
。
rsync -avz -e ssh /www/ user@192.168.1.100:/var/www
-e ssh
:指定使用 SSH 协议。
场景 3:排除特定文件
需求:同步时排除 .git
目录和 .log
文件。
rsync -avz --exclude='.git' --exclude='*.log' /src/ /dst/
场景 4:限速与断点续传
需求:限制传输带宽为 1MB/s,并启用断点续传。
rsync -avz --bwlimit=1024 --partial /src/ user@remote:/dst/
--bwlimit=1024
:限速 1MB/s(单位 KB/s)。--partial
:保留未完成文件,支持续传。
四、高级技巧
1. 守护进程模式(无需 SSH)
步骤:
- 配置服务端
/etc/rsyncd.conf
:[backup] path = /data/backup comment = Backup Module uid = nobody gid = nobody read only = no
- 启动服务:
rsync --daemon
- 客户端同步:
rsync -avz /src/ rsync://user@192.168.1.100/backup
2. 定时备份脚本(Cron)
脚本示例(保存为 backup.sh
):
#!/bin/bash
LOG="/var/log/rsync_backup.log"
echo "Backup started at $(date)" >> $LOG
rsync -avz --delete /data/ /backup/ >> $LOG 2>&1
echo "Backup completed at $(date)" >> $LOG
--delete
:删除目标目录中源目录不存在的文件)。- 配置 Cron 任务:
crontab -e 0 2 * * * /path/to/backup.sh # 每天凌晨 2 点执行
五、常见问题与解决方案
1. 权限问题
现象:同步后文件权限被修改。
解决:使用 -a
选项保留权限,或手动指定 --chmod
。
2. 速度优化
技巧:
- 增加压缩级别:
-z --compress-level=9
。 - 使用
-W
选项跳过增量检查(适用于小文件)。
3. 排除规则不生效
检查:
- 确保
--exclude
在源路径前指定。 - 使用
--exclude-from=file
批量排除。