最近上了一个Microsoft Office 365的车,拥有1T的OneDrive云盘空间,正好用来备份群晖内的部分重要数据。其实之前一直是通过 Cloud Sync 同步群晖内 TimeMachine 和 iMazing 的备份数据,不过 Cloud Sync 和 Hyper Backup 还是有区别的,Cloud Sync 更多的是做文件同步,Hyper Backup才是真正备份的工具。
然而准备开始使用的时候才发现,Hyper Backup 不能提供将 OneDrive 用作备份目标:
Google Drive 虽可用但是无限空间的账号不知道什么时候会翻车,最终还是放弃选择Google Drive。
最后在群晖的论坛发现有网友实现了将 OneDrive作为备份目标的方法: Backup to Microsoft OneDrive with Synology’s Hyper Backup
原理其实很简单,虽然 Hyper Backup 不支持备份到 OneDrive 但是却支持 WebDav,而我们可以通过 WebDAV 访问 OneDrive。不过 OneDrive WebDAV API 需要使用 Passport服务器端包含(SSI)版本1.4协议进行身份验证,而 Hyper Backup 的 WebDAV 客户端仅支持 HTTP基本身份验证 和 NTLM身份验证。
不过最终该网友提出了一种解决方案,通过设置代理服务器,将所有与身份验证有关的信息从基本身份验证转换为Passport身份验证(反之亦然),并将所有其他信息不变地转发:basic-to-passport-auth-http-proxy
设置代理服务器:
- 通过群晖内 Docker 实现代理服务器的安装:
运行群晖内的Docker套件,找到
映像
-新增
-从URL添加
- 填入https://hub.docker.com/r/skleeschulte/basic-to-passport-auth-http-proxy
并点击新增
按钮
- 启动代理服务器镜像:
下载好镜像后,启动该镜像,选择
高级设置
:
- 勾选
启用自动重新启动
,防止容器异常终止后无法运行 - 端口默认是
3000
,可自行更改 - 在
环境
选项卡新增变量PROXY_TARGET
为:https://d.docs.live.net/
点击应用
并下一步
可看到该容器的相关配置信息:
再次点击应用
完成容器的创建,这时候 OneDrive 的代理服务器就设置完成了。
获取OneDrive CID
要通过WebDAV连接到OneDrive,除了用户名和密码外,还需要一个名为CID的字符串。可以通过以下方式获取:
打开 https://www.onedrive.com/ 并登录到 OneDrive。浏览器完成 OneDrive 界面的加载后,地址栏应显示类似https://onedrive.live.com/?id=root&cid=ABCDEFG123456789
的内容。在这里,ABCDEFG123456789
就是自己的CID了。CID不区分大小写。
设置 Hyper Backup 的备份目标
这时候我们再去 Hyper Backup 新建数据备份任务,选择WebDAV
,填入对应的参数:
- 服务器地址:127.0.0.1:port/CID
port
为创建容器时候设置的端口,默认为3000CID
为上文获取到的CID - 用户账户:OneDrive账户
- 密码:OneDrive密码
填入正确以后,点击文件夹
下拉列表,应该展示在 OneDrive 中所有文件夹列表。
接下来就是 Hyper Backup 的一系列配置了。
参考地址: