在我们开始正文之前,我还是想啰嗦一些关于数据备份的事情
应该备份哪些数据
用什么方式备份
Duplicati如何可以帮助我们解决这个问题
备份策略
目前国内外玩家对于数据管理主流策略:3-2-1 备份策略
3:意味着你的数据至少有3个备份
2: 其中两个本地,但在不同设备上
1:至少有一个备份在异地(云上)
什么电影,乱七八糟的文档,教程,git都没有家人的相册来的重要
我的身体正在一天天老去,孩子一天天在长大,我的大脑也在一天天退化
它无法装下那么多回忆
其他这些电影没了,我可以再下,可以不看,文档没了,我可以用共有的暂时替代
但是照片没了,就永远消失了
所以,对于家庭相册,我才用的是3-2-1
而现在公认的最安全的备份方式就是,热备(即时备份)+温备(定时备份)+冷备(找个独立介质手动做关键备份)+云备份。看上去很美,落实到咱们这一般家庭用户,忒花钱儿了!
混合云存储池=私有云盘+共有云盘,两者的交集是webdav协议
1、私有云部分
针对OMV5,本身系统未内置webdav支持,同时也不支持webdav的相关插件,所以通过/hacdias/webdav服务器端程序(可以用Docker部署,但偏不,他更加接近底层服务,所以就用原始的底层系统安装),将数据盘纳入到webdav管理之下。
但此程序不支持将公有云的webdav挂载至系统本身(纳入底层控制)。
- 1、解压下载好的tar.gz压缩包,并将唯一能执行的二进制文件webdav放在预指定的/usr/bin内
- 2、参考作者github页编辑webdav.config.yml文件并放入预指定的/opt内,特别需要注意内部的账号密码及挂载点三要素
- 3、编辑webdav.service并放入指定的/etc/systemd/system内(这一步很熟悉乐)
- 4、设置开机启动并启动服务systemctl XXX webdav
2、共有云部分
2.1挂载至NAS:
2.1.1、需要本地搭设webdav服务器,至少有两种方式:1、messense/aliyundrive-webdav;2、Alist服务器;3、CloudDrive2。
2.1.2、挂载工具:如davfs2、Rclone?
2.2挂载至某台BYOD设备(如电脑),享受系统内盘符待遇:
2.2.1、本地搭设webdav服务器如Alist服务器/Clouddrive2亦可
2.2.2、挂载工具,这里有争议,以往需要Raidrive,现在发现直接用WINDOWS自带的网络映射器就可以了。
根据博主的测试,综合下来使用 CloudDrive2 相对会简单一些,并且效果上也最好。
我分别测试了 Rclone(Docker 版)和 davfs2 filesystem 插件,这两个工具挂载到 Unraid 本地上进行读写容易有其他的一些文件系统上的报错或出现使用不稳定的问题。
2.3外部设备访问:
2.3.1、如安卓系统,猫头鹰owlfiles、EZ文件管理器等
2.3.2、如普通浏览器,没想到吧?但需要webdav服务器开启web服务器才能使用
CloudDrive2安装
自认为完全理解其docker的安装说明,但过程中还是翻车了,特此详细记录其坑所在。
Clouddrive 使用 fuse3 来挂载云存储服务,使用fuse3在Docker容器中挂载云存储服务时,需要在主机系统上启用共享挂载。这可以通过在Docker服务配置中设置MountFlags选项或在主机系统上使用mount –make-shared命令来实现。这是因为FUSE3需要共享挂载才能正常工作,如果没有共享挂载,挂载将会失败并显示“权限被拒绝”的错误。通过启用共享挂载,FUSE3挂载可以在Docker容器和主机系统之间共享,从而实现对云存储服务的无缝访问。
1、因为OMV5有点旧,实际上不一定支持fuse,应该先去检查/dev/fuse是否存在。这个坑完全没有注意,如果中招了后面的一切都是错上加错,但刚好躲过去了,实属侥幸。
2、当Docker是以systemd service运行时,在 Docker 服务中启用 MountFlags。这里究竟是不是呢?
我那时似乎只检查了/etc/systemd/system/docker.service.d/,但是没有检查systemctl status docker,这对后面出现的问题造成了困扰,就怕XJB搞影响了docker的根基,还好这个坑同样躲过去了。
另外对于官方说的另一个非systemd的选项,似乎就要指定mount make shared的路径了
sudo mkdir -p /etc/systemd/system/docker.service.d/
sudo cat <<EOF > /etc/systemd/system/docker.service.d/clear_mount_propagation_flags.conf
[Service]
MountFlags=shared
EOF
sudo systemctl restart docker.service
Docker CLI使用方法:
docker run -d \
--name clouddrive \ #容器名称
--restart unless-stopped \ #重启规则:此处为始终重启容器
--env CLOUDDRIVE_HOME=/Config \ #环境变量:设置配置目录
-v <path to accept cloud mounts>:/CloudNAS:shared \
-v <path to app data>:/Config \
-v <other local shared path>:/media:shared \
--network host \ #使用host宿主机的网络模式(非host模式需要配置端口映射,host不需要)
--pid host \ #使用宿主机的PID命名空间
--privileged \ #给予容器特权模式
--device /dev/fuse:/dev/fuse \ #挂载fuse设备
cloudnas/clouddrive2 #镜像名称
其实以上两点至关重要,但令人惊讶的是简中教程几乎无人提及此事,难道各家NAS OS都默认开启了这两个开关?无论如何,这里看出官方手册的权重远远碾压一般教程。
恢复操作
1、systemctl status docker检查运行状况
2、重启DDNS-go容器
其他注意事项
CloudDrive2又两种设置方式:
挂载到本地:不推荐,有人反馈可能会在备份时读取CD2文件夹内容。
通过WebDAV连接:推荐使用此方式,完全满足使用
(也有人反馈飞牛影视使用webdav不如本地挂载的刮削率高和准确)
安装完成后,添加两个网盘,然后添加备份任务,选择源文件夹和目标文件夹(支持多个)。最初,我在本地测试了备份流程,但由于CloudDrive运行时会占用本地带宽,因此想到可以将其部署到VPS上,数据都在云端,程序只是作为中转。
正好有台相对空闲的阿里云200M轻量应用服务器,于是拿来进行测试。测试数据量大约为35GB,期初下行带宽可以稳定跑满,但在复制到30GB左右时,开始限速,速度降到一半以下,而上行带宽保持不变,整体仍可接受。第二天测试速度已经恢复。
PS:后续又观察了下,自动备份不完整,重新手动扫码后倒是补全了。不过如果出现……ERROR cloudapi: downloader: read文件offset len timeout 30s twice error some…wait timeout这样的内容后,再次扫描也会失败,取消重试也没有用,重启服务再次扫描可以解决。
duplicati:字面意思,专门用于备份