rsync 完整学习笔记
1. rsync 简介
rsync(remote sync)是 Linux 下用于文件同步和备份的工具。
特点:
- 增量同步,只传输变化的数据
- 支持本地和远程同步
- 支持权限、时间、ACL、扩展属性保留
- 支持大规模 NAS 数据迁移
- 支持断点续传
- 支持删除同步
常见用途:
- Unraid 磁盘迁移
- NAS 数据整理
- 服务器备份
- Linux 主机同步
- 网站文件同步
2. 基本语法
rsync [参数] 源 目标
例如:
rsync -avh /data/test /backup/
3. 最重要:路径最后的 /
rsync 中:
目录
目录/
含义不同。
复制目录本身
rsync -av /data/test /backup/
结果:
/backup/test/
├── a.txt
└── b.txt
复制目录内容
rsync -av /data/test/ /backup/
结果:
/backup/
├── a.txt
└── b.txt
记忆:
有 / 复制内容,没有 / 复制目录。
4. 常用参数
-a archive
归档模式。
最常用:
-a
等价:
-r
-l
-p
-t
-g
-o
-D
保存:
- 文件结构
- 权限
- 时间
- 用户
- 用户组
- 软链接
- 特殊文件
-v verbose
显示详细信息:
-v
-h human readable
显示可读单位:
-h
例如:
1.2G
300M
2T
-r recursive
递归复制目录。
-p preserve permissions
保留权限。
-t preserve times
保留修改时间。
-o preserve owner
保留文件所有者。
-g preserve group
保留用户组。
-l preserve links
保留软链接。
-H hard links
保留硬链接。
适用于:
- 系统备份
- Docker 数据
- NAS 迁移
-A ACL
保留 ACL 权限。
-X xattrs
保留扩展属性。
5. NAS 推荐参数
完整迁移:
rsync -aHAXh \
--info=progress2 \
--stats \
源/ \
目标/
例如:
rsync -aHAXh \
--info=progress2 \
--stats \
/mnt/disk1/Sync/ \
/mnt/disk2/Sync/
6. 查看进度
progress
--progress
显示单文件进度。
progress2
推荐:
--info=progress2
显示整体进度:
例如:
322GB 99% 100MB/s
适合 TB 级迁移。
7. dry-run 测试模式
参数:
-n
或者:
--dry-run
作用:
只模拟,不修改。
例如:
rsync -aHAXhn \
source/ \
target/
大型操作必须先测试。
8. 统计信息
参数:
--stats
示例:
rsync -aHAXhn --stats source/ target/
重点:
Number of regular files transferred
Total transferred file size
判断需要同步多少数据。
9. 删除操作
--delete
让目标完全匹配源:
rsync -av --delete source/ target/
例如:
源:
a.txt
目标:
a.txt
b.txt
同步后:
b.txt 删除
危险:
使用前必须:
rsync -avhn --delete source/ target/
10. 移动数据
复制成功删除源文件:
--remove-source-files
例如:
rsync -aHAXh \
--remove-source-files \
source/ target/
注意:
只删除文件,不删除空目录。
清理空目录:
find source -type d -empty -delete
11. 文件比较机制
默认:
rsync 比较:
文件大小
+
修改时间
checksum 模式
参数:
-c
例如:
rsync -avhc source/ target/
会读取文件内容计算校验。
优点:
准确。
缺点:
慢。
TB 视频库不要轻易使用。
12. 视频库同步推荐
视频文件特点:
- 文件巨大
- 内容稳定
- 权限不重要
推荐:
rsync -avh \
--size-only \
--info=progress2 \
source/ \
target/
只比较:
文件名
文件大小
13. 两个目录去重
生成文件列表:
cd /mnt/disk1/Sync
find . -type f | sort > /tmp/disk1.list
cd /mnt/disk2/Sync
find . -type f | sort > /tmp/disk2.list
查找相同路径:
comm -12 \
/tmp/disk1.list \
/tmp/disk2.list
14. 安全删除重复文件
假设:
保留 disk2。
生成重复列表:
comm -12 \
/tmp/disk1.list \
/tmp/disk2.list \
> /tmp/duplicate.list
比较内容:
while read f
do
if cmp -s \
"/mnt/disk1/Sync/$f" \
"/mnt/disk2/Sync/$f"
then
echo "$f"
fi
done < /tmp/duplicate.list
确认后删除:
while read f
do
if cmp -s \
"/mnt/disk1/Sync/$f" \
"/mnt/disk2/Sync/$f"
then
rm -v "/mnt/disk1/Sync/$f"
fi
done < /tmp/duplicate.list
15. 远程同步
本地上传:
rsync -avh file.txt root@192.168.1.10:/root/
要求:
远程机器安装 rsync。
错误:
ash: rsync: not found
说明:
远端没有 rsync。
OpenWrt:
opkg update
opkg install rsync
Ubuntu:
apt install rsync
16. Unraid 使用经验
多磁盘 Share
Unraid 可以:
Share
|
+-- disk1
|
+-- disk2
不一定需要合并到一个磁盘。
注意大小写
Linux 区分:
Videos
videos
VIDEOS
三个目录。
du 和 rsync 大小不同
原因:
- 稀疏文件
- 硬链接
- 文件块大小
- 统计方式不同
17. 常用命令模板
普通同步
rsync -avh source/ target/
NAS 完整迁移
rsync -aHAXh \
--info=progress2 \
--stats \
source/ target/
测试同步
rsync -aHAXhn \
source/ target/
视频库同步
rsync -avh \
--size-only \
--info=progress2 \
source/ target/
移动数据
rsync -aHAXh \
--remove-source-files \
source/ target/
总结
rsync 的核心思想:
让目标目录状态与源目录保持一致。
日常掌握:
- -a
- -H
- -A
- -X
- -h
- --info=progress2
- --stats
- -n
- --delete
- --remove-source-files
即可覆盖绝大多数 NAS 和服务器同步场景。
大型数据操作:
第一步永远:
rsync -n
确认无误后再执行。