进阶教程
🌐Unraid 云盘同步方案:“三叉戟”同步(Alist-CloudDrive2-CloudSync)
00 分钟
2023-12-29
2024-1-30
type
status
date
slug
summary
tags
category
icon
password
本方案并不是博主原创,思路来自一位朋友给我的文章,链接地址:

1. 思路概述

前段时间有位朋友问 Unraid 上有没有什么比较好的网盘挂载与同步的方案。
notion image
我整理了一下先前的经验和思路,经过一些测试之后,整体的思路如下:
  1. 在 Unraid 上使用 Alist 添加本地存储,借助 WebDAV 对外提供共享。
  1. 在群晖上安装 CloudDrive 容器,并通过 WebDAV 协议挂载 Unraid 的存储到群晖本地。
  1. 使用群晖的 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 相关资料及功能截图
notion image
notion image
notion image
notion image
notion image
notion image
notion image
另外还有个很重要的条件是本方案会使用到群晖(白裙或者黑裙都可以)。之所以会使用到群晖是由于这位朋友发我的这个文章(链接)里面就是使用的群晖的 Cloud Sync 套件来实现与网盘之间的同步,而经过测试之后效果也确实很好,因为 Cloud Sync 套件有很多的优点:
  • 支持多个云存储:套件默认可以支持连接到多个网盘,设置简单易用。
  • 加密和压缩:支持文件加密和压缩上传,不用担心网盘给和谐了。
  • 自定义同步策略:准确选择要同步的文件和文件夹,并选择单向或双向同步。
  • 流量控制:支持自定义同时上传和下载的文件数量上限和带宽限制,以提升同步任务运行效率。
  • 增量备份:只对有改动的部分做上传,可以大大节省资源。

2. 实施部署

1. Unraid 安装 Alist
复制粘贴以下的命令到 Unraid 的命令行窗口运行,获取 Alist 的 Docker 安装模板:
notion image
notion image
notion image
添加路径映射,将 Unraid 的本地存储映射到 Alist 容器内部:
notion image
请读者根据自己的需求映射相应的目录,这里我只映射了一个 appdata 文件夹作为演示。
请读者根据自己的需求映射相应的目录,这里我只映射了一个 appdata 文件夹作为演示。
notion image
安装好之后打开 Alist 的日志获取随机密码,如下图所示:
notion image
使用 admin 账号和随机密码进行登录:
💡
登录之后记得去修改密码,后面使用 CD2 添加 Alist 的存储时需要使用此账号密码进行 WebDAV 认证。
notion image
2. Alist 添加本地存储
notion image
挂载路径:指的是挂载到 Alist 上的路径
挂载路径:指的是挂载到 Alist 上的路径
根文件夹路径:指的是映射到 Alist 内部的 Unraid 存储
根文件夹路径:指的是映射到 Alist 内部的 Unraid 存储
设置好并添加之后,在主页就可以看到挂载到 Alist 上的 Unraid 本地存储:
notion image
notion image
notion image
3. 群晖安装 CloudDrive2
💡
如果群晖上没有下载 Docker 套件请先安装好套件再继续。
1️⃣ 创建相应的文件夹
在 Docker 文件夹内创建一个文件夹用于存储 CD2 的配制文件(例如 clouddrive ),然后查看此文件夹的路径地址并复制下来,后面安装 Docker 时会使用到::
notion image
然后再新建一个共享文件夹,例如 AlistCloudSync ,给到 CloudDrive 进行本地挂载:
notion image
notion image
2️⃣ 开启 SSH 并登录到命令行界面
开启 SSH 功能,并使用相应的 SSH 工具登录到群晖,然后切换至 root 用户为安装 CD2 做准备:
notion image
Win 系统一般都自带有 SSH ,所以可以不用另外单独安装工具来登录到群晖的命令行界面,例如:
使用 Powershell 登录并切换至 root 用户
使用 Powershell 登录并切换至 root 用户
3️⃣ 开启共享挂载
Clouddrive 使用 fuse3 来挂载云存储服务,使用 fuse3 在 Docker 容器中挂载云存储服务时,需要在主机系统上启用共享挂载。这可以通过在 Docker 服务配置中设置 MountFlags 选项或在主机系统上使用 mount --make-shared 命令来实现。这是因为 FUSE3 需要共享挂载才能正常工作,如果没有共享挂载,挂载将会失败并显示“权限被拒绝”的错误。通过启用共享挂载,FUSE3 挂载可以在 Docker 容器和主机系统之间共享,从而实现对云存储服务的无缝访问。 —— CloudDrive - Docker版本安装指南
打开 SSH ,以 root 用户运行以下命令:
命令中的 /volumn1 是挂载目录 AlistCloudSync 的上层目录,请根据你自己的实际情况修改。
运行完成后执行以下命令重启 Docker 服务:
由于重启之后前面所执行命令的效果会消失,所以需要将命令添加进群晖的计划任务中,让群晖在开机的时候自动执行此命令。
打开群晖的任务计划,添加以下命令作为开机启动脚本
控制面板 - 任务计划
控制面板 - 任务计划
添加“触发的任务 - 用户自定义的脚本”
添加“触发的任务 - 用户自定义的脚本”
使用 root 账户作为计划任务账户:
任务名称随意
任务名称随意
复制粘贴前面运行的命令到脚本框中:
notion image
确认
确认
完成脚本的配置
完成脚本的配置
4️⃣ 安装 CloudDrive2 容器
打开群晖的 Docker 套件,在注册表中搜索并下载 CD2 镜像:
notion image
将下面命令中的 /volumn1/xxx 替换成你自己配置的地址(就是前文所提到的 Docker 配置文件夹和 CD2 本地挂载文件夹),然后复制命令到命令行窗口中执行:
notion image
4. 配制 CloudDrive2
安装好 CD2 的 Docker 容器之后,使用以下地址打开 CD2 的管理界面:
CD2 需要注册账户进行登录,没有注册的就用邮箱注册一个账号进行登录:
notion image
登录之后,添加 WebDAV 远端存储:
notion image
notion image
  • 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 的密码。
添加好了之后:
notion image
点击左下角的 Mount 即可挂载到群晖本地
点击左下角的 Mount 即可挂载到群晖本地
挂载好之后就可以在群会的文件夹里面看到 Unraid 上的存储:
notion image
如何查询群晖的用户 ID 和用户组 ID
登录到群晖的命令行界面之后,使用以下命令进行查询:
notion image
5. 群晖 Cloud Sync 链接网盘并同步文件
如果还没有安装 Cloud Sync 套件的请先在套件中心安装好:
notion image
添加一项同步任务,选择需要链接的云盘并按照流程配置好即可:
notion image
例如,以百度云为例:
notion image
  • 本地路径:选择 CD2 挂载到本地的 Unraid 存储。
  • 远程路径:就是云盘上的具体路径,可以自行选择。
  • 同步方向:选择是按双向仅下载远程更改还是仅上传本地更改进行同步。
  • 启用高级一致性检查:勾选之后,除文件大小和最后修改时间外,Cloud Sync 将对公有云和 NAS 之间的各文件散列值进行比较,以增强同步结果的完整性检查。此操作需要更多的时间和系统资源,具体取决于公有云对高级属性的支持。
  • 数据加密:也就是会对文件进行加密后上传,建议勾选。同时根据官方的文档,以下几点可以留意一下:
    • 启用加密后,便无法将其禁用或更改其密码。
    • NAS 上的本地文件将维持不加密状态。
    • 每个公有云帐户只有一个加密密钥。
    • 启用加密后,Cloud Sync 将在公有云上创建一个名为 @SynologyCloudSync 的文件夹,请勿改变该文件夹中的文件。
    • 首次使用时,设置中将会出现一个导出按钮。单击该按钮可导出密钥,导出后,将其保存在安全的地方。
配置完之后 CloudSync 就会开始将 Unraid 上的文件与云盘进行同步:
notion image
其他 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 等这一类套件进行计划任务的功能,但是使用自定义脚本可以更灵活的设置执行的频率。
notion image
notion image
注意,“用户账号”需要使用 root 用户,不然普通用户没有对应的权限去执行 Cloud Sync 套件的重启:
任务名称随意
任务名称随意
这里我将重启的频率设置为每 30 分钟重启一次,24 小时循环执行:
注意,要 24 小时循环执行就需要选择“最后运行时间”内可选时间的最后一项,这样才可以保证能够一直循环执行;如果你希望执行重启不那么频繁,那么你可以按需求选择间隔时间。
notion image
复制以下命令到文本框中:
notion image
最后保存即可。

3. 结尾&其他注意事项

3.1 结尾

本套方案相对来说会有点“绕”,因为得借助群晖来实现同步,也就是说为了实现本方案你还得安装一个群晖虚拟机(如果你还没有群晖的话)。
我一开始也觉得这个方案不好,因为我觉得 Unraid 上的文件凭啥还得放到群晖上去使用,而且对于实施者来说还得安装群晖,这不是麻烦得很么。
但后来当我在 Unraid 上尝试进行各种工具(Rclone、davfs2 filesystem、CD2 等)之后,才发现只在 Unraid 上来实现这个目的确实有些困难,排除文件系统层面不说,涉及到同步这一块还得考虑各种各样的因素,就算能够顺利完成部署,维护起来的成本也不小,所以相比起现在这套方案,在 Unraid 上实施那才是真的麻烦。
所以综上来说,由于博主能力有限,本套方案是目前博主能接触到的最好的方案了,如果大家有更好的方式,欢迎大家评论区留言!

3.2 其他注意事项

  • CloudDrive2 目前是收费软件,但可以免费添加一个存储,这也是配合使用 Alist 的原因 —— Alist 可以添加多个网盘,而我们只需要在 CD2 中添加 Alist 的 WebDAV 就相当于添加了多个网盘。
  • Unraid 上的文件如果使用 SMB/NFS 挂载到群晖上的话,那么 Cloud Sync 套件是不支持同步的。而且即使不是 Cloud Sync,其他一些群晖的套件也不能很好的支持这种挂载形式,比较经典的一个案例是使用 NFS 挂载到群晖的相片或者一些影音文件,Photo 套件和 VideoStation 是无法正常索引的(有办法解决但是我没研究),因为这涉及到群晖数据库的一些问题,因此一般都不建议在群晖上使用 NFS/SMB 挂载其他远程服务器的共享文件到群晖上给到其他的应用读取。

评论