warning 质量低下
本文自评质量低下,决定隐藏。
自从整了个 ZimaBoard 之后(见往期文章),我就折腾了个局域网文件服务器,最近也不断给它搞一些新功能,也整了一些奇怪的活。
经过 8 个月的使用和调整,感觉我目前这个方案已经能很大程度保证我的文件安全了,本篇文章就简单分享下我的数据备份方案吧,希望对大家有所启发,如果有槽点也可以在评论区交流。
总体结构
Aliyun ECS (Shanghai) ↓ ┌──────────── Aliyun OSS (Shanghai) │ DESKTOP <──┐ ↓ ┌───> Aliyun OSS (Hangzhou) ├───> Samba (Wuhan Dorm) <───┤ LAPTOP <───┘ └───> OneDrive (Hong Kong) │ Samba (Wuhan Home) <────────────┘
上面就是我目前方案的总体结构了,里面有一些结构我现在也弃用了,不过也保留下来作为方案分享了,说不定大家的使用情形就用上了呢。
总的来说,该方案包括两个本地备份、两个远程灾备,同时整合了我的网站每日备份。
下面对具体方案进行解释。
方案分享
局域网文件同步与备份
首先是我的两台主力设备 DSKTOP-CHRISKIM 和 LAPTOP-CHRISKIM,台式机在宿舍,笔记本常常带出去用,因此两台设备的文件同步极其重要。
这两台设备的同步由一个 Samba 服务器作为桥梁,Samba 服务器由同一局域网内的 Zimaboard 上的 PVE 虚拟化完成。如果要进行同步,首先将一台设备与 Samba 服务器进行同步,再将另一台设备与 Samba 服务器进行同步。这样就完成了所有文件的同步,同时 Samba 服务器也相当于做了文件备份。
文件同步软件
此时问题就是如何快速同步两个路径下的文件,我使用的软件名为 FreeFileSync,简单好用,可靠稳定。
该软件是一个免费开源软件,但是捐赠最低 $1 后可以解锁一些捐赠版功能。我认为最重要的是解锁了并行功能,开到 16 线程能大大加快小文件同步速度。
我一般使用文件时间和大小作为同步依据,软件扫描好后会自动判断同步方向。一般来说我同时使用的设备只有一台,同步方向都是单向的,不会出现文件冲突。偶尔出现两边都有修改的时候,软件判断也比较精准,如果出现冲突的话,也可以手动指定同步方向。
下面是软件的界面截图:
该软件能直接键入远程路径比如 \\192.168.0.4\sync
进行同步,也可以选择在资源管理器中把远程路径挂载成盘符例如 X:\
进行同步。软件也支持 Google Drive、SFTP、FTP 协议,需要注意的是 WebDAV 是不支持的。
Samba 服务器
我的 Samba 服务器部署在 Ubuntu 环境下,配置算是比较简单的,在网上找个教程就能配好了。
如果你没有单独的服务器设备,也想进行局域网同步的话,可以让一台电脑开共享,这个也就相当于 Samba 服务器了。如下图所示:
如果你的两台电脑是同一个账号,那权限无需调整就能访问,否则需要调整权限。上面的方式相当于给任何人开放了读写权限,非常危险,大家需要考察局域网安全性再确认是否这么使用。
一台电脑开共享后,另一台电脑只要处于同一局域网,就能在文件资源管理器中输入计算机名开头的路径进行访问了。例如我在 DSKTOP-CHRISKIM 开放了共享名为 E 的共享,其他电脑就能通过 \\DSKTOP-CHRISKIM\E
来访问。当然,计算机名也能用局域网 IP 代替。
OneDrive 方向同步
当文件同步到 Samba 服务器上后,每天的早晨 8:00 服务器将会运行脚本,将文件同步到 OneDrive 作为远程备份。
本地向 OneDrive 同步
首先,由于我是在 Linux 上运行 Samba 服务器,因此没有官方 OneDrive 客户端可用。另外,OneDrive 的官方客户端非常难用,不符合我的需求。
我使用的同步软件为著名开源云储存同步软件:Rclone
该软件为命令行软件,官方支持 OneDrive。具体使用方法官方文档写的非常详尽,并且软件的配置文件生成是交互式的,非常好上手。
我使用 crontab 做定时运行,运行脚本如下:
#!/bin/sh rm -f /samba/sync/*-onedrive-sync.log rclone sync --transfers 16 /samba/sync/ od:sync/ -vv --exclude "*sync.log" --log-file /samba/sync/$(date +"%Y%m%d")-onedrive-sync.log
每次定时运行后,都会在同步目录产生一个 日期-onedrive-sync.log
的日志文件,便于发现同步问题。
如果你认为将敏感文件保存到 OneDrive 不可靠,那么 Rclone 也提供了加密选项。经过加密同步后,OneDrive 上储存的均为密文,只有通过设定的密钥解密后才可得到源文件。
OneDrive 向本地同步
由于寒暑假回家后,不能直接把宿舍服务器接到家里网段(会出现 IP 冲突等一系列乱七八糟的问题),因此家里的服务器也做了类似部署,方便我在家也能和宿舍一样使用设备。
当我在学校时,家里的服务器就做备份用处,每周定时从 OneDrive 将文件同步到本地保存。
同步方式其实和上面是一致的,不再展开讲解。
Aliyun OSS 方向同步
由于我购买的阿里云 OSS 500GB 资源包根本用不完,因此我将阿里云 OSS 杭州作为远程灾备。如果武汉发生了地震、台风、洪水、火山爆发、核打击,我的文件不至于丢失。
上面的情况似乎比较极端,真要出这事了,应该担心的是我还能不能活着吧。所以多个远程备份主要是防备的云服务提供商搞些幺蛾子,把你的数据干没了。
阿里云官方提供了命令行同步工具:ossutil
https://www.alibabacloud.com/help/zh/oss/getting-started/ossutil
同时,阿里云 OSS 是兼容 s3 协议的,上面说到的 RClone 也是支持 s3 协议的,因此你也可以通过 RClone 做阿里云 OSS 方向的同步。
我选用的软件是 ossutil,具体使用方式可以看阿里云官方文档。
我使用 crontab 做定时运行,运行脚本如下:
#!/bin/sh rm -f /samba/sync/*-oss-sync.log ossutil64 cp /samba/sync/ oss://chriskim-wuhan-archive/sync/ --update --recursive --exclude "*sync.log" --config-file /root/.ossutilconfig-wh > /samba/sync/$(date +"%Y%m%d")-oss-sync.log
服务器上的网站备份
我也将我的服务器上的网站备份整合到了我的方案内。我的所有 Web 网站均部署在阿里云上海的 ECS 上,首先从 ECS 层级开启了每天的自动快照,此外还单独对网站数据进行了备份。
备份方式其实完全可以用上面的软件完成,但是由于网站备份部署的最早,基本上建站初期就完成了。当时我还对 Linux 不熟练,所以用的都是宝塔面板的插件完成。
我使用的插件是 阿里云OSS 5.3
,安装该插件后,宝塔面板的备份选项就多了一个保存到阿里云 OSS 的选项。通过定时任务即可完成。
网站备份后将会自动上传到同地域的阿里云 OSS 中,保留一年的日备份。同时每天的宿舍服务器将会用 ossutil 做下载,并入我的所有文件内同步给全设备并备份。
方案自评
个人觉得我这个方案虽说正常使用时非常完备,资料应该非常安全,但是想了想还是有很多问题。
首先整个方案混用了各种软件和技术,糊出来的备份链太复杂了。还好我没有同时使用多台设备的习惯,要不然这么乱的备份链肯定得让文件版本混乱,搞得各种版本的文件分布在各个地方。
其次就是不抗单点故障。虽说资料抗单点故障,如果整个结构内有任意一个设备爆炸了,损失资料最多不超过 1 天。但是这个备份方案的运行不抗单点故障,如果我宿舍的服务器爆炸了,那整个备份方案就直接全部宕掉无法运行了。
不过我感觉目前这个状态也算是我这个使用情形下比较好的解决方案了,之后肯定也会不断地优化迭代。这其实也就是折腾的乐趣了,虽说不是最优但都是自己一步步研究出来的方案,成就感满满啊。
发表回复