跳转至

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

保留用户组。


保留软链接。


保留硬链接。

适用于:

  • 系统备份
  • 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

确认无误后再执行。