type
status
date
slug
summary
tags
category
icon
password
如需技术支持,请点击 👉 联系方式
在 Unraid 中,rsync 命令最常被作为文件传输工具所使用,了解并熟悉使用 rsync 命令可以让你轻松的在 Unraid 上实现文件的拷贝、转移和同步。
例如博主先前写过一篇关于 unBALANCE 插件的文章《unBALANCE 文件转移工具使用方法和应用案例介绍》,这个插件本质上也是调用的rsync
命令去传输文件。另一个例子是 Dynamix File Manager(其功能是在共享文件夹提供文件管理功能),当你跨盘转移文件时也是使用的 rsync 命令去转移文件,参考博主在 unRAID 官方论坛的一个帖子 —— UNRAID 复制文件,写入速度完全对应不上 。
1. 介绍
Rysnc 通过对比文件的修改时间和文件大小,来实现本地或本地与远程服务器之间的文件传输与同步,常用于文件备份和文件镜像。
rsync is a utility for efficiently transferring and synchronizing files between a computer and a storage drive and across networked computers by comparing the modification times and sizes of files. —— wikipedia
它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代cp
和mv
命令。 它名称里面的r
指的是 remote,rsync 其实就是"远程同步"(remote sync)的意思。与其他文件传输工具(如 FTP 或 scp)不同,rsync 的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改时间有变动)。 —— rsync 用法教程 - 阮一峰
它具备以下优点:
- 远程传输:可以实现本地与远程主机的文件传输与同步。
- 灵活强大:具备多种控制参数,可以灵活控制文件传输的各种行为。
- 增量同步:利用 delta-transfer 算法可以实现文件之间只传输文件不同的部分,相同的文件不会重复传输。
- 断点传输:即使传输中断了,再次传输时依然会从上一次中断的地方开始而不是重新传输。
- 加密传输:支持匿名传输和认证传输,保证传输的安全性。
2. 使用方法
rsync 命令的参数很多,但是大多数情况下我们在 Unraid 上只需要用常用的那几个即可,常用的命令格式和参数说明如下:
-a
:必填参数。表示递归,即包含子目录一起进行传输,除此之外-a
参数还可以同步元信息(比如修改时间、权限等)。
-v
:将结果输出到终端,这样就可以看到哪些内容会被同步(-vv
表示输出更详细的信息,-vvv
表示输出最详细的信息)。
-h
:参数表示以人类可读的格式输出,可以配合-v
一起使用来更好的查看传输过程中哪些数据被进行传送。
-z
:传输时压缩数据。
-P
:此参数是--progress
和--partial
这两个参数的结合:--progress
:表示显示进展,即传输某个文件的时候会有一个进度条展示。--partial
:允许恢复中断的传输。不使用该参数时,rsync
会删除传输到一半被打断的文件;使用该参数后,传输到一半的文件也会同步到目标目录,下次同步时再恢复中断的传输。一般需要与--append
或--append-verify
配合使用。
--append
:断点传输。指定文件接着上次中断的地方继续传输。你也可以使用--append-verify
进行替换,表示会对传输完成后的文件进行一次校验,如果校验失败(即代表文件不完整),将重新发送整个文件,该参数可以很好的避免文件转移不彻底的情况。
源目录/
:表示将源目录
下的所有文件进行传输,但不包含源目录
本身。
目标目录/
:表示文件存放的目的地目录,即将所有要传输的文件存放到目标目录
下。
其他常用参数参考(更多参数以及详细说明可以查看 rsync(1) - Linux man page )
--exclude
:参数指定排除不进行同步的文件,例如--exclude="*.iso"
。
-n
(--dry-run
):模拟将要执行的操作,而并不真的执行,配合-v
参数使用,可以看到哪些内容将会被同步过去。
--size-only
:表示只同步大小有变化的文件,不考虑文件修改时间的差异。
--max-size
:设置传输的最大文件的大小限制,比如不超过 200 KB--max-size=200k
。
--min-size
:设置传输的最小文件的大小限制,比如不小于 10 KB--min-size=10k
。
--remove-source-files
:表示传输成功后,删除发送方的文件。
3. 应用案例
rsync 的最大特点就是它可以完成增量备份,也就是默认只复制有变动的文件。不管是拷贝单文件还是拷贝多文件,rsync 在传输前都会通过比较文件来确定是否需要进行文件传输。
根据作者自身的经验,大多数情况下为了使用方便,不管是传输单文件还是传输文件夹及其里面的所有文件,都可以添加上
-avhzP --append
这几个参数,因此下文中的这些示例中也都是这么去使用。正如文章开头所说,rsync
命令可用的参数很多,灵活的使用参数可以实现对文件传输的精确控制,因此当读者们熟悉rsync
命令之后可以根据不同的场景调整命令参数。
1️⃣ 单文件拷贝
将名为
download
共享文件夹内的 virtio-win-0.1.229-1.iso
文件拷贝到 isos
目录下:2️⃣ 多文件拷贝
将
syslog-1.txt
和 syslog-2.txt
同时拷贝到 /mnt/user/system/
文件夹目录下:3️⃣ 文件夹及内部文件拷贝(递归拷贝)
如果需要将文件夹自身整体进行转移,那么不需要在文件夹路径最后添加斜杠
/
;如果只是需要将文件夹内的文件进行转移,那么请加上 /
。将
/mnt/user/download/movie
文件夹内的所有文件都拷贝到 /mnt/user/media
,但不包含 movie
文件夹自身(换句话说只拷贝文件夹里面的文件):基于上述的例子,如果需要将整个
movie
文件夹都进行转移,则需要去掉 movie
文件夹后面的斜杠符号 /
:4️⃣ 剪切拷贝
实现剪切的效果需要使用
--remove-source-files
参数,此参数的作用是当文件拷贝完成后将源文件删除,从而实现剪切的效果。例如下面命令中将
virtio-win-0.1.229-1.iso
传输完成后,此文件就会被删除(从效果上来说就相当于将文件进行了剪切):5️⃣ 远程同步(以群辉为例)
rsync 支持远程与远程服务器之间进行文件传输。
传输可以使用 SSH 协议也可以使用 rsync 协议(前提是远程服务器也需要安装 rsync 命令)。本文只介绍使用 SSH 协议进行远程传输的方法,使用 rsync 协议的方法可以参考文章末尾的参考文章。
为了简化,这里假设远程服务器也是一台 Unraid,SSH 端口为 22 。
1. 本地传输文件到远程服务器
将本地
/mnt/user/isos/win11.iso
文件传输到远程 192.168.1.10
的 Unraid 服务器上,通过 SSH 协议使用 root
用户进行登录之后,将文件传输到远程服务器下的 /mnt/user/isos/
目录:2. 远程服务器传输文件到本地
将远程 Unraid 服务器(
192.168.1.10
)下的 /mnt/user/isos/win11.iso
文件传输到本地服务器的 /mnt/user/isos/
目录下3. 补充说明:非 22 端口的 SSH
前面的命令是基于远程服务器 SSH 服务使用的是默认的 22 端口,因此使用 SSH 连接时不需要指定端口号,但是如果远程服务器的 SSH 服务使用的不是 22 端口,那么需要在 rsync 命令中使用
-e
参数。-e
参数的作用是指定所要执行的 SSH 命令,例如-e 'ssh -p 222'
表示使用 222 端口进行 SSH 登录。
例如下面的命令表示使用
-e
参数使用 SSH 的 222 端口进行登录并传输文件:4. 应用:使用 rsync 命令与群晖服务器进行文件传输
在控制面板中开启 rsync 文件服务:

然后使用以下命令将群晖的
loader_0.9.img
文件传输到本地 Unraid 上的 isos
文件夹:将本地文件传输到群晖也是一样的使用方式。

命令的执行后的输出参考

6️⃣ 限制被转移文件的大小
2025/01/09:这天有位朋友问,能不能让 Unraid 的缓存池只保留那些经常被读取的小文件(例如图片、媒体元数据、配置文件等),一些不经常读取的大文件(例如高清电影、系统安装镜像等)转移到阵列中,这样可以尽可能让阵列中的机械盘进行休眠,而不会因应用程序时常读取一些小文件而唤醒机械盘。
例如,可以通过
--min-size
参数过滤那些对应大小的文件,例如 --min-size=1M
参数告诉 rsync,只传输大小等于或大于 1M
的文件。读者可以将 1M
替换为您希望的任何大小,例如 500K
、10M
等。7️⃣ 文件夹镜像同步
我们可以使用
--delete
参数来实现两个目录之间的镜像同步。--delete
参数用于删除只存在于目标目录,不存在于源目标的文件,即保证目标目录是源目标的镜像。例如,将
/mnt/user/photo/
目录内的文件镜像到 /mnt/user/backup/photo/
,假如 backup/photo
已经存在了一些文件,且这些文件不存在于 photo/
,那么下面的命令就会删除里面的文件并将 photo/
内的文件复制(镜像)过去,以保持两个目录之间的镜像效果:8️⃣ 快速批量删除文件
rsync 有一个比较冷门的用法,配合使用
--delete
参数可以实现文件的快速删除。在需要删除的文件较多的情况下(成千上万),效率比 rm
命令要高很多。要使用 rsync 巧妙地删除一个文件夹中的所有文件,通常的思路是将一个空的目录与目标目录进行同步,这样 rsync 会将目标目录中的所有文件删除,但保留目录本身。以下是步骤:
- 创建一个空的临时目录:假设你需要删除
/mnt/user/photo/
目录中的所有文件,你可以首先创建一个临时的空目录:
- 使用
rsync
同步空目录到目标目录:使用rsync
将这个空目录与目标目录进行同步。使用--delete
选项可以删除目标目录中存在,但在源目录中不存在的文件。
这里的
-a
选项表示“归档模式”,会保留符号链接、文件权限、时间戳等属性,而 --delete
会删除目标目录中在源目录中没有的文件。- 检查结果:执行完命令后,
/mnt/user/photo/
目录下的所有文件将会被删除,但目录本身依然存在。
- 可选:删除临时空目录:如果你不再需要临时空目录,可以删除它:
注意:
- 如果你希望保留目录中的某些文件或子目录,可以使用
rsync
的--exclude
选项来排除特定的文件或目录。
- 慎用
--delete
选项,因为它会直接删除目标目录中的文件,确保你在执行之前备份必要的数据。
这个方法可以巧妙地利用
rsync
同步空目录,从而达到删除文件而不删除目录结构的效果。4. 补充说明
Dynamix File Manager
在 Unraid 较新的版本中(印象中应该是6.12
版本开始),此工具已经内置到系统中,用户不需要单独下载此插件(应用商店搜不到就表示系统已经内置)。
对于文件的拷贝和转移,很多时候我们通过 WebUI 界面就可以实现简单的文件传输,例如你可以在 Unraid 上安装一个叫做 Dynamix File Manager 的插件之后即可实现 WebUI 页面的文件管理 —— 增删改查等:
如果你无法在 CA 应用商店下载,你可以借助以下方法进行安装此插件
分别复制以下命令到命令行窗口执行:
手动安装插件:



dynamix.file.manager.plg
后点击安装


本质上,此插件也一样会在文件拷贝或者转移时根据实际情况去使用 rsync 命令,所以在 Unraid 上 rsync 是一个很通用的文件拷贝和同步工具,理解并且熟练的运用可以很方便的去管理文件。
5. 参考资料
- 作者:JackieWu
- 链接:https://www.jackiewu.top/article/unraid-rsync
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。