Rsync:高效的文件同步工具完全指南
Rsync 使用指南
1. 基础概念
rsync(remote synchronization)是一个高效的文件同步和传输工具,它的主要特点是:
- 增量传输:只传输变化的部分
- 支持压缩传输
- 保持文件属性
- 支持本地和远程同步
2. 基本用法
2.1 本地同步
# 基本语法
rsync [选项] 源目录/ 目标目录/
# 同步单个目录
rsync -av /source/directory/ /destination/directory/
# 同步多个目录
rsync -av /source1/ /source2/ /destination/
# 排除某些文件
rsync -av --exclude '*.tmp' /source/ /destination/
2.2 常用选项
# 归档模式(保持所有属性)
rsync -a /source/ /destination/
# 显示详细信息
rsync -v /source/ /destination/
# 显示传输进度
rsync -P /source/ /destination/
# 压缩传输
rsync -z /source/ /destination/
3. 远程同步
3.1 SSH方式
# 推送到远程服务器
rsync -avz /local/directory/ user@remote:/remote/directory/
# 从远程服务器拉取
rsync -avz user@remote:/remote/directory/ /local/directory/
# 使用自定义SSH端口
rsync -avz -e "ssh -p 2222" /local/directory/ user@remote:/remote/directory/
3.2 守护进程方式
# 连接到rsync服务器
rsync -avz /local/directory/ rsync://server/module/
# 列出可用模块
rsync rsync://server/
# 使用用户名密码
rsync -avz --password-file=/etc/rsync.pass /local/directory/ rsync://user@server/module/
4. 高级特性
4.1 增量备份
# 使用硬链接创建增量备份
rsync -av --link-dest=/backup/previous /source/ /backup/current/
# 创建时间戳目录
backup_dir="/backup/$(date +%Y%m%d)"
rsync -av --link-dest=/backup/latest /source/ "$backup_dir"
ln -snf "$backup_dir" /backup/latest
4.2 过滤规则
# 使用模式过滤
rsync -av --include='*.txt' --exclude='*' /source/ /destination/
# 使用过滤文件
cat > filter-list.txt << EOF
+ /important/
- /temp/
- *.tmp
EOF
rsync -av --filter="merge filter-list.txt" /source/ /destination/
5. 性能优化
5.1 传输优化
# 使用压缩传输(适用于慢速网络)
rsync -avz --compress-level=9 /source/ /destination/
# 限制带宽使用
rsync -av --bwlimit=1000 /source/ /destination/
# 并行传输(使用多个rsync进程)
for i in {1..4}; do
rsync -av --include="part$i/*" --exclude="*" /source/ /destination/ &
done
wait
5.2 IO优化
# 使用较大的块大小
rsync -av --block-size=128K /source/ /destination/
# 修改IO优先级
ionice -c2 -n7 rsync -av /source/ /destination/
6. 安全配置
6.1 SSH密钥认证
# 生成SSH密钥
ssh-keygen -t ed25519 -C "rsync-key"
# 复制公钥到远程服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote
# 使用指定密钥
rsync -av -e "ssh -i ~/.ssh/id_ed25519" /source/ user@remote:/destination/
6.2 rsync守护进程配置
# /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
exclude = lost+found/
transfer logging = yes
timeout = 900
ignore nonreadable = yes
[backup]
path = /backup
comment = Backup Directory
read only = no
auth users = backupuser
secrets file = /etc/rsyncd.secrets
7. 监控和日志
7.1 日志配置
# 启用详细日志
rsync -av --log-file=/var/log/rsync.log /source/ /destination/
# 使用syslog
rsync -av --log-file-format='%t %f %b' /source/ /destination/
7.2 监控脚本
#!/bin/bash
# rsync监控脚本
LOG_FILE="/var/log/rsync_monitor.log"
ALERT_EMAIL="admin@example.com"
monitor_rsync() {
if ! pgrep -x "rsync" > /dev/null; then
echo "$(date): Rsync process not found!" >> $LOG_FILE
echo "Rsync process not running!" | mail -s "Rsync Alert" $ALERT_EMAIL
fi
}
# 检查传输速度
check_speed() {
speed=$(rsync -av --stats /source/ /destination/ | grep "bytes/sec" | awk '{print $NF}')
if [[ $speed -lt 1000000 ]]; then
echo "$(date): Low transfer speed: $speed bytes/sec" >> $LOG_FILE
fi
}
8. 自动化任务
8.1 定时备份
# 创建每日备份脚本
cat > daily-backup.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup/$DATE"
SOURCE_DIR="/data"
LOG_FILE="/var/log/backup-$DATE.log"
rsync -av --link-dest=/backup/latest "$SOURCE_DIR/" "$BACKUP_DIR/" >> "$LOG_FILE" 2>&1
ln -snf "$BACKUP_DIR" /backup/latest
EOF
# 添加到crontab
0 2 * * * /path/to/daily-backup.sh
8.2 同步脚本
#!/bin/bash
# 多目标同步脚本
SERVERS=(
"server1:/backup"
"server2:/backup"
"server3:/backup"
)
for server in "${SERVERS[@]}"; do
rsync -avz --delete /source/ "user@$server/" &
done
wait
9. 故障排除
9.1 常见问题
# 检查连接问题
rsync -av --stats --dry-run /source/ destination/
# 检查权限问题
rsync -av --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r /source/ /destination/
# 恢复中断的传输
rsync -av --partial --progress /source/ /destination/
9.2 调试方法
# 启用调试输出
rsync -avvv --stats /source/ /destination/
# 测试模式(不实际传输)
rsync -av --dry-run /source/ /destination/
# 检查文件列表
rsync -av --list-only /source/ /destination/
Linux下rsync同步的简单使用介绍
date: 2022-07-10T18:10:14+08:00
tags: ["linux","rsync","ssh"]
rsync简单使用
Rsync粗浅使用指南
假设有两台机器 ServerA(待备份目录的机器),Backup(往这台机器上备份)
1. 安装
两台机器都需要安装rsync
sudo apt-get install rsync
2. 同步目录
rsync -r source destination
rsync -a source destination
-r 必须;
-a 还可以同步元信息(比如修改时间、权限等)
目标目录destination
如果不存在,rsync 会自动创建。执行上面的命令后,源目录source
被完整地复制到了目标目录destination
下面,即形成了destination/source
的目录结构。
rsync 只确保源目录的所有内容(明确排除的文件除外)都复制到目标目录;
如果要使得目标目录成为源目录的镜像副本,则必须使用--delete
参数
rsync -av --delete source/ destination
上面命令中,--delete
参数会使destination
和source
保持一致。
3. 远程同步
和scp类似,可以同步远程的过来,也可以同步到远程去
rsync -av source/ username@Backup:destination
rsync -av username@Backup:/destination source
如果ssh端口号非22,需要特殊指定
-e 'ssh -p 2234'
此处应使用ssh-copy-id 把ServerA的sshkey上传到Backup服务器上,这样就可以免密进行ssh传输,方便定时任务、定时脚本