type
status
date
slug
summary
tags
category
icon
password
如需技术支持,请点击 👉 联系方式
目前国内的云盘用户越来越多,将数据备份到云盘是再常见不过的需求。前段时间一位朋友问我关于 Unraid 上云盘同步的方法并发给我一片文章做参考,我看了文章并实施之后发现效果很不错,因此决定将具体的实施方法写下来给到大家参考。此方法会使用到 Alist、CloudDrive 和群晖的 CloudSync 套件,我简称为“三叉戟”,具体的各个工具的安装和使用方法都会在文章中进行详细的说明,以便尽最大可能帮助大家能够顺利实施此方案。
本方案并不是博主原创,思路来自一位朋友给我的文章,链接地址:
1. 思路概述
前段时间有位朋友问 Unraid 上有没有什么比较好的网盘挂载与同步的方案。
我整理了一下先前的经验和思路,经过一些测试之后,整体的思路如下:
- 在 Unraid 上使用 Alist 添加本地存储,借助 WebDAV 对外提供共享。
- 在群晖上安装 CloudDrive 容器,并通过 WebDAV 协议挂载 Unraid 的存储到群晖本地。
- 使用群晖的 Cloud Sync 套件连接到对应的网盘,然后同步已经挂载到本地的 Unraid 文件,最终实现 Unraid 与网盘之间的同步。
整体的逻辑不复杂,用图片表示的话会更清晰明了:
1.1 Alist 添加 Unraid 存储
针对网盘的挂载,Alist 是必不可少了,在 Alist 中添加好网盘之后,通过挂载 Alist 的 WebDAV 进而将网盘挂载到本地。
1.2 使用 CloudDrive2 借助 WebDAV 协议挂载 Alist 的存储
挂载 WebDAV 的方式主要有以下几种:
- 使用 Rclone (有插件和 Dokcer 可以使用)。
- 使用 davfs2 filesystem 插件。
- 使用 CloudDrive2 工具(收费工具,可免费挂载一个云存储)。
根据博主的测试,综合下来使用 CloudDrive2 相对会简单一些,并且效果上也最好。
我分别测试了 Rclone(Docker 版)和 davfs2 filesystem 插件,这两个工具挂载到 Unraid 本地上进行读写容易有其他的一些文件系统上的报错或出现使用不稳定的问题。
也有可能是我使用的方式不太正确,所以如果读者们有 Rclone 和 davfs2 filesystem 插件的相关使用经验,欢迎分享。
1.3 使用群晖 Cloud Sync 套件同步到网盘
Cloud Sync 相关资料及功能截图
另外还有个很重要的条件是本方案会使用到群晖(白裙或者黑裙都可以)。之所以会使用到群晖是由于这位朋友发我的这个文章(链接)里面就是使用的群晖的 Cloud Sync 套件来实现与网盘之间的同步,而经过测试之后效果也确实很好,因为 Cloud Sync 套件有很多的优点:
- 支持多个云存储:套件默认可以支持连接到多个网盘,设置简单易用。
- 加密和压缩:支持文件加密和压缩上传,不用担心网盘给和谐了。
- 自定义同步策略:准确选择要同步的文件和文件夹,并选择单向或双向同步。
- 流量控制:支持自定义同时上传和下载的文件数量上限和带宽限制,以提升同步任务运行效率。
- 增量备份:只对有改动的部分做上传,可以大大节省资源。
2. 实施部署
1️⃣ Unraid 安装 Alist
复制粘贴以下的命令到 Unraid 的命令行窗口运行,获取 Alist 的 Docker 安装模板:
添加路径映射,将 Unraid 的本地存储映射到 Alist 容器内部:
安装好之后打开 Alist 的日志获取随机密码,如下图所示:
使用
admin
账号和随机密码进行登录:登录之后记得去修改密码,后面使用 CD2 添加 Alist 的存储时需要使用此账号密码进行 WebDAV 认证。
2️⃣ Alist 添加本地存储
设置好并添加之后,在主页就可以看到挂载到 Alist 上的 Unraid 本地存储:
3️⃣ 群晖安装 CloudDrive2
如果群晖上没有下载 Docker 套件请先安装好套件再继续。
1️⃣ 创建相应的文件夹
在 Docker 文件夹内创建一个文件夹用于存储 CD2 的配制文件(例如
clouddrive
),然后查看此文件夹的路径地址并复制下来,后面安装 Docker 时会使用到::然后再新建一个共享文件夹,例如
AlistCloudSync
,给到 CloudDrive 进行本地挂载:2️⃣ 开启 SSH 并登录到命令行界面
开启 SSH 功能,并使用相应的 SSH 工具登录到群晖,然后切换至
root
用户为安装 CD2 做准备:Win 系统一般都自带有 SSH ,所以可以不用另外单独安装工具来登录到群晖的命令行界面,例如:
3️⃣ 开启共享挂载
Clouddrive 使用 fuse3 来挂载云存储服务,使用 fuse3 在 Docker 容器中挂载云存储服务时,需要在主机系统上启用共享挂载。这可以通过在 Docker 服务配置中设置 MountFlags 选项或在主机系统上使用mount --make-shared
命令来实现。这是因为 FUSE3 需要共享挂载才能正常工作,如果没有共享挂载,挂载将会失败并显示“权限被拒绝”的错误。通过启用共享挂载,FUSE3 挂载可以在 Docker 容器和主机系统之间共享,从而实现对云存储服务的无缝访问。 —— CloudDrive - Docker版本安装指南
打开 SSH ,以
root
用户运行以下命令:命令中的/volumn1
是挂载目录AlistCloudSync
的上层目录,请根据你自己的实际情况修改。
运行完成后执行以下命令重启 Docker 服务:
由于重启之后前面所执行命令的效果会消失,所以需要将命令添加进群晖的计划任务中,让群晖在开机的时候自动执行此命令。
打开群晖的任务计划,添加以下命令作为开机启动脚本
使用
root
账户作为计划任务账户:复制粘贴前面运行的命令到脚本框中:
4️⃣ 安装 CloudDrive2 容器
打开群晖的 Docker 套件,在注册表中搜索并下载 CD2 镜像:
将下面命令中的
/volumn1/xxx
替换成你自己配置的地址(就是前文所提到的 Docker 配置文件夹和 CD2 本地挂载文件夹),然后复制命令到命令行窗口中执行:4️⃣ 配制 CloudDrive2
安装好 CD2 的 Docker 容器之后,使用以下地址打开 CD2 的管理界面:
CD2 需要注册账户进行登录,没有注册的就用邮箱注册一个账号进行登录:
登录之后,添加 WebDAV 远端存储:
- Host :指的是 Alist 的 WebDAV 地址。Alist 默认情况下使用
/dav
的尾部 URL 路径作为 WebDAV 协议的访问地址,所以如果你的 Unraid IP 是 192.168.1.10,那么 Alist 的 http 地址将会是:http://192.168.1.10:5244/dav
。
- User Name:Alist 的用户名。
- Password:Alist 的密码。
添加好了之后:
挂载好之后就可以在群会的文件夹里面看到 Unraid 上的存储:
如何查询群晖的用户 ID 和用户组 ID
登录到群晖的命令行界面之后,使用以下命令进行查询:
5️⃣ 群晖 Cloud Sync 链接网盘并同步文件
如果还没有安装 Cloud Sync 套件的请先在套件中心安装好:
添加一项同步任务,选择需要链接的云盘并按照流程配置好即可:
例如,以百度云为例:
- 本地路径:选择 CD2 挂载到本地的 Unraid 存储。
- 远程路径:就是云盘上的具体路径,可以自行选择。
- 同步方向:选择是按双向、仅下载远程更改还是仅上传本地更改进行同步。
- 启用高级一致性检查:勾选之后,除文件大小和最后修改时间外,Cloud Sync 将对公有云和 NAS 之间的各文件散列值进行比较,以增强同步结果的完整性检查。此操作需要更多的时间和系统资源,具体取决于公有云对高级属性的支持。
- 数据加密:也就是会对文件进行加密后上传,建议勾选。同时根据官方的文档,以下几点可以留意一下:
- 启用加密后,便无法将其禁用或更改其密码。
- NAS 上的本地文件将维持不加密状态。
- 每个公有云帐户只有一个加密密钥。
- 启用加密后,Cloud Sync 将在公有云上创建一个名为
@SynologyCloudSync
的文件夹,请勿改变该文件夹中的文件。 - 首次使用时,设置中将会出现一个导出按钮。单击该按钮可导出密钥,导出后,将其保存在安全的地方。
配置完之后 CloudSync 就会开始将 Unraid 上的文件与云盘进行同步:
其他 CloudSync 未提到的一些配制也无需再赘述(计划任务和限制上传带款什么的),大家看一眼就知道怎么用了,关于 CloudSync 套件的更多详细的说明请查看官方的说明文档:
6️⃣ 解决 Cloud Sync 套件不同步 CD2 挂载的问题
例如,当 CD2 在群晖上挂载了 Unraid 的本地存储(或者其他云盘),你会发现在 Unraid 本地或者在群晖本地对这些文件进行增删改查也不会触发 Cloud Sync 文件同步。
我查阅了相关的文档,发现即使没有使用 CD2 进行挂载,使用 Rclone 挂载在本地也是会有相同的情况出现,甚至即使没有使用 CD2 或者 Rclone 这一类使用 FUSE 进行挂载的工具,单单使用 Cloud Sync 与网盘进行链接也有可能会出现此类问题,也就是体现在远端网盘或者本地文件有了改动 Cloud Sync 也没有进行同步。
目前的解决办法是让 Cloud Sync 进行重启,重启之后 Cloud Sync 就能够识别本地/远端文件的更改,进而触发同步操作。
具体的实操是通过群晖的“任务计划”让 Cloud Sync 定时重启,方法如下:
这个方法是使用自定义脚本来执行,实际上在“任务计划”里面已经有内置的选项可以直接对 Cloud Sync 等这一类套件进行计划任务的功能,但是使用自定义脚本可以更灵活的设置执行的频率。
注意,“用户账号”需要使用
root
用户,不然普通用户没有对应的权限去执行 Cloud Sync 套件的重启:这里我将重启的频率设置为每 30 分钟重启一次,24 小时循环执行:
注意,要 24 小时循环执行就需要选择“最后运行时间”内可选时间的最后一项,这样才可以保证能够一直循环执行;如果你希望执行重启不那么频繁,那么你可以按需求选择间隔时间。
复制以下命令到文本框中:
最后保存即可。
3. 结尾&其他注意事项
3.1 结尾
本套方案相对来说会有点“绕”,因为得借助群晖来实现同步,也就是说为了实现本方案你还得安装一个群晖虚拟机(如果你还没有群晖的话)。
我一开始也觉得这个方案不好,因为我觉得 Unraid 上的文件凭啥还得放到群晖上去使用,而且对于实施者来说还得安装群晖,这不是麻烦得很么。
但后来当我在 Unraid 上尝试进行各种工具(Rclone、davfs2 filesystem、CD2 等)之后,才发现只在 Unraid 上来实现这个目的确实有些困难,排除文件系统层面不说,涉及到同步这一块还得考虑各种各样的因素,就算能够顺利完成部署,维护起来的成本也不小,所以相比起现在这套方案,在 Unraid 上实施那才是真的麻烦。
所以综上来说,由于博主能力有限,本套方案是目前博主能接触到的最好的方案了,如果大家有更好的方式,欢迎大家评论区留言!
3.2 其他注意事项
- CloudDrive2 目前是收费软件,但可以免费添加一个存储,这也是配合使用 Alist 的原因 —— Alist 可以添加多个网盘,而我们只需要在 CD2 中添加 Alist 的 WebDAV 就相当于添加了多个网盘。
- Cloud Sync 套件目前没有添加对阿里云盘的支持,但是可以借助其他的手段实现同步,网上的资料挺多,这里我把搜到的两个相关教程放在这里给大家参考:《群晖NAS同步阿里云盘数据》,《群晖通过cloud sync创建阿里云盘同步》。
- Unraid 上的文件如果使用 SMB/NFS 挂载到群晖上的话,那么 Cloud Sync 套件是不支持同步的。而且即使不是 Cloud Sync,其他一些群晖的套件也不能很好的支持这种挂载形式,比较经典的一个案例是使用 NFS 挂载到群晖的相片或者一些影音文件,Photo 套件和 VideoStation 是无法正常索引的(有办法解决但是我没研究),因为这涉及到群晖数据库的一些问题,因此一般都不建议在群晖上使用 NFS/SMB 挂载其他远程服务器的共享文件到群晖上给到其他的应用读取。
- 另外,在 Unraid 的官方论坛上也有热心的朋友分享了 Unraid 上与阿里云盘进行同步的方法,但是对于一般的用户来说会有一定的门槛(会使用到 davfs2 filesystem 插件和 Linux 脚本),这里放链接给大家参考:《通过插件挂载远程(网盘或本地)WEBDAV文件夹到UNRAID共享目录》,《利用脚本实现UNRAID共享目录文件与网盘文件相互加密备份,定时同步》。
- 作者:JackieWu
- 链接:https://www.jackiewu.top/article/unraid-cloud-drive-sync
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。