TrueNAS云同步备份到OSS等对象存储(Cloudreve中转)

前言:

依照3+2+1备份原则,一台NAS虽然可以通过Raid阵列和快照实现安全度较高的备份,但是无法做到异地存储。

使用网盘固然是一个比较好的解决方案,但是网盘厂商可能会对你的数据进行审核等行为,有些隐私敏感的人会十分介意,并且一般不会面向个人用户提供可供NAS自动备份的API之类。

对象储存则是一个比较好的选择,具有按量计费,可以指定存储地区,免上传流量费等等优势

传统的S3对象存储在TrueNAS的云同步任务中可以直接设置,然而国内阿里云OSS,腾讯云COS之类的对象储存服务虽然兼容了S3协议,但是不再支持Path Style URL,而是强制使用虚拟域名访问,TrueNAS的S3云同步并未支持虚拟域名,因此无法直接在TrueNAS中添加OSS云同步备份。

解决方案:

直接去修改TrueNAS源代码来支持虚拟域名对于大部分人来说太困难了,不过我们可以采用曲线救国的方式,部署一个开源网盘项目Cloudreve,它既支持挂载国内阿里云OSS,腾讯云COS等虚拟域名对象储存服务,又支持采用WebDAV的方式读写,刚好TrueNAS支持添加WebDAV云同步备份,因此最终思路是TrueNAS将文件通过WebDAV同步给Cloudreve,Cloudreve在本地缓存后上传到挂载的OSS等对象储存中实现备份,最后删除本地的缓存。

关于为什么不采用ossutil等官方工具将对象储存挂载到本地,然后直接使用SFTP同步,是因为经过测试ossutil在数据量较多时极易报错同步失败,猜测可能是缓存/磁盘IO之类的问题

实践:

在本地局域网内部署Cloudreve,可以免去TrueNAS和Cloudreve之间走公网通信的带宽浪费。此类教程网上很多,故不再赘述。

然后在管理后台添加存储策略,选择对应的存储方式,具体不同方式之间区别请点击左下角"存储策略对比"查看。推荐选择阿里云OSS,限制较少且支持深度冷归档储存。

下属教程内容以阿里云OSS为例,其他存储策略可能不会遇到此问题,也可能遇到其它新问题,请根据自身需求合理选择

按照引导完成添加后,新建一个用户组并分配此存储策略,然后再新建一个属于该用户组下的新用户,随后登录这个新用户账号,尝试上传文件却发现会报错。

但是直接通过右下角新建文件却没有问题:

这是正常现象,无需担心。这是由于服务器部署在本地局域网没有公网IP导致无法回调的问题。

不过即使采用有公网的云服务器部署依然会报错502,这是因为回调域名有 SNI 强校验导致回调建联失败, OSS 的callback不支持SNI强校验。在同一个IP上部署多个 https 服务的用户,在使用阿里云存储策略传回调参数的时候需要设置callbackSNI = true,反代才能在 TLS 握手的时候返回正确的HTTPS cert。

目前解决方案是使用有公网的云服务器,并且使用http而非https或者等待Cloudreve官方修复。

不过此问题并不会影响我们使用Cloudreve作为TrueNAS云同步备份到OSS对象存储的中转功能,通过WebDAV连接到Cloudreve时上传文件等功能一切正常。这是由于OSS存储策略使用WebDAV协议时,Cloudreve会进行中转上传而非网页上的直接上传,并不需要进行回调,和直接通过网页右下角新建文件正常是一个道理。

那么接下来在Cloudreve中生成WebDAV账号,随后在TrueNAS处配置好WebDAV云同步任务即可。

阅读剩余
THE END