不要等到亡了羊再来补牢。
你会学到什么
- 数据备份的重要性与其3-2-1模式
- 小白如何进行数据备份
- 基于restic与rclone的究极备份方案
我好像不太懂
作为南京大学 IT 侠的组员,笔者近期接触的案例中有数个数据丢失的案例。有将所有照片放在 U 盘被一波带走的,有误删用户根目录而无法找回的(SSD 的 TRIM 机制使得找回误删文件几乎不可能!),有硬盘直接坏掉的,有误操作在格盘前把数据放到内存盘,重启发现全没了的。
这些案例之所以造成了严重后果,都有一个共同的原因:数据备份的缺失。保护数据免受丢失的唯一方案就是备份。对于数据备份,我们应该遵守一些原则性的东西,比如业界较主流的3-2-1备份模式。
3-2-1模式与其实践
3-2-1模式就是指:
- 3:一堆数据有总共三份,一份在工作目录上,另两份作为备份
- 2:数据应该至少有两种形式,如硬盘与云存储(上个世纪可能是磁带)
- 1:三份数据中的一份应该在异地(如在云上,或在家里)
这种模式看上去很高端,不是什么个人用户可以达到的,但事实绝非如此。考虑这样的一种配置:一份存电脑里,一份放移动硬盘,还用OneDrive之类的同步一份到云上。这样就是最基本的一种对3-2-1的实践——可以解决大部分的问题。实际上,若您的数据主要是照片、文档等较“简单”的文件,上面的配置是很合适的。对于南大的同学而言,您可以用学校的OneDrive实现大容量存储。
我还建议您将您的重要数据集中存储 ——不要先急着开喷,这里的集中指的是「在您的电脑上,不要把数据东一个文件夹,西一个文件夹地到处放,而应该集中整理到一些文件夹中,且这样的文件夹不要放杂七杂八的东西」。这样做的好处在于方便进行备份、恢复。在帮数据不集中的同学备份C盘数据时我总是提心吊胆的——我不知道哪里有有用的东西,因为就连对方都不知道。
在做到了集中存储后,我们就可以:首先,买一个移动硬盘;其次,准备好您的云帐号(我用的是Office 365带的5T云盘,但您也可以用天翼云盘、百度云盘等,只要支持同步就OK)。您需要定期将新的数据拷到移动硬盘,而至于云,您可以下载用的云服务的同步客户端,再将客户端的同步目录中加上保存重要数据的目录,设置好开机自启即可。
进阶的备份
然而,如您的数据有点多(或复杂),或您想要增量备份、版本控制,或您是个我这样的nerdy的geek,抑或是您是我样的自动化狂魔,那让我们踏上更高一级的台阶吧。Meet restic and rclone。
restic是一个强大的增量备份工具,可以把本地的文件备份到本地的另一地方,或云端。rclone则是一个云存储的「通用客户端」,可以连上云盘进行同步、上传、下载等操作 。当我们通过自动化访问各种云盘时,用rclone是很方便的。
下文在教程中夹杂了我配这个的历程,大家看个乐就好。同时,这篇不是“手把手”的教程,您应该有一定的计算机基础。
当前情况
我们先看看我的个人数据是怎么放的。我所有的个人重要数据放在了C盘的用户目录下,如学校相关的(作业、文书、课件、表格等)在「文档」中,照片和收集的图在「图片」中,音乐库在「音乐」中,至于我的代码,是全部堆在用户目录的「source」目录中的。但我还有一些杂七杂八的东西,如Conan的本地缓存(这个比较重要,很多本地编译的东西,换个环境不一定能再弄出来)、SSH证书等(很重要!!),好在它们全在用户目录里。
用户目录中不用备份的东西就是QQ的所有文件(聊天记录有别的备份了)、「AppData」里的数据(特别混乱)。电脑中用户目录外的的其他数据多数都是网上能找到的资源(下的软件之类的),考虑的空间因素,不进行备份。
理想愿景
先看看我手头有什么:
- 4T的外接硬盘(最快,但大部分时间没接电脑上)
- 5T OneDrive个人帐号(已经用了很多了,比较乱)
- 5T OneDrive学校帐号(世纪互联,较快)
- 5T OneDrive E5 bp得来的帐号(在东京,较慢)
- 200G 南大网盘(很大,最快)
考虑过后,我的规划是,用 1. 作本地备份,在周末接上进行备份;用3.和4.作为异地备份,3天运行一次。
rclone 配置
连E5 OneDrive:轻而易举
我们的第一件事是让我们可以连上3.和4.两个云盘。两者都是OneDrive for Business协议的,而rclone包含其支持,用就完了。下载最新的rclone并放到可以被PATH找到的位置,再参照 https://rclone.org/onedrive/ 中的指示,我们先需要在E5的Azure AD域中建一个应用程序并分配正确的权限与密钥(如果看不懂官方教程,可以参考另一篇教程。需要的设置基本和该教程中的一样,区别是我们不会仅仅用 restic authorize "onedrive"
登录而不创建Remote,而是会完整地创建一个Remote)。然后在 restic config
命令中可以轻松建一个Remote,连上 E5 OneDrive。
注意,建议把Remote的名字取成一个“ID”应有的样子,如只用大小写字母、数字和下划线,不要写中文或空格。在这个过程中rclone会打开一个浏览器窗口,让您登录 E5 帐号。登录后就会自动找到您的OneDrive中的「Drive」(一般形如「https://组织名-my.sharepoint.com/personal/邮箱/Documents
」 ),保存配置即可。
然而,在添加南大365的OneDrive时,我发现我的Office 365并没有创建应用程序的权限——这很正常,学校的AAD域怎么可能让用户随意建应用?
连南大OneDrive:困难重重
注:如果您没有在学校365上搭rclone的需求,也无兴趣看我的碎碎念,那可以跳过该段。
WebDAV:并不成功
rclone的官方教程和GitHub上的讨论中都谈了在权限严格的AAD域如何配置rclone,其中一个方法就是用SharePoint自带的WebDAV连接。把SharePoint的“经典OneDrive”界面的URL截掉最后的“Forms/All.aspx
”就可以得到形如 https://组织名-my.sharepoint.com/personal/邮箱/Documents
的URL。参照 https://rclone.org/webdav/ 中的指示(注意对于SharePoint的WebDAV的特别配置)添加一个WebDAV格式的Remote,用自己的365邮箱和密码登录即可。
然而,南大的AAD的登录使用了第三方登录(南大的统一身份认证),这导致根本没有365密码这种东西。我试图参照其它的处理MFA多因素验证的方法,创建一个「应用密码」作为登录WebDAV的凭据。但我也没有在南大365上对应的位置找到设置应用密码的链接(Office Portal)。貌似南大的365也没有允许用户创建应用密码。
在不知道什么位置,我看到了有人说:SharePoint WebDAV可以用Cookies作验证,而IE登录后的Cookies和Windows的WebDAV客户端是互通的。于是我尝试了:
- 用Chrome或IE登录SharePoint,提取对应的Cookie,填入rclone的WebDAV源——无法连接
- 用IE登录SharePoint,用Windows的WebDAV客户端映射WebDAV服务器到一个盘符,用rclone的local存进去——慢、不稳定,完全无法使用
两种方法都以失败告终。我也没有找到好的支持自定义Cookies的WebDAV客户端。
与学校部门交涉:意外惊喜
同时,考虑到SharePoint的WebDAV实现有些缺陷(参考rclone WebDAV文档),我们最好还是用原生的rclone OneDrive协议进行连接。此时我不得不与南大的ITSC部门(不抱希望地)发E-Mail,希望可以允许我在南大Azure AD域上新建应用。对方在数个小时后回复了我——回复效率远远超出预料。但其称后台仅有全局开关,没法按应用配置。
我在自己的E5 AAD域上进行了一些测试,发现可以给用户一个“Application Developer”管理员角色,特定用户就可以创建应用。于是我,帮我新建并配置一个Azure AD应用,或给我Application Developer管理员权限。第二天ITSC的老师通过找M$的工程师,给我开了一个配置了rclone权限的应用,并给了我Client Secret——Client ID没给!!!!但好在虽然在网页上管理应用的权限被禁止了,我还是可以用Azure AD PowerShell列出AAD域上的所有应用程序,在其中找到rclone的Client ID。
然而,在连接的时候,报了这样的错误:
Comments | 8 条评论
博主 大象普拉斯
请问我用rclone挂载Alist的webdav,rclone挂载可以读取目录文件,但是下载上传都很慢,用群晖自带的FS挂载速度就很正常,重新把rclone设置了几次也还是不行,不知道从哪排查了
博主 茶栗
@大象普拉斯 我这边用rclone接WebDAV也是很慢(这也是我放弃用WebDAV接OneDrive的原因之一),不知道为什么,可能是rclone的实现问题?
博主 xen
windows用户可以看看这个贴子
https://forum.duplicati.com/t/big-comparison-borg-vs-restic-vs-arq-5-vs-duplicacy-vs-duplicati
duplicati 自带中文的图形界面,比一般的备份软件都方便,而且备份速度比 Restic 快一点点。缺点就是在Linux的桌面上安装有点困难,毕竟是用C#写的,得先安装mono。Restic 用Golang编写,只要有人做适配,几乎什么平台都能运行。
博主 茶栗
@xen 有点意思……
我前面放弃用Duplicati是因为它经常会抽风,比如备份过程中整个WebUI卡住然后不知道卡在了哪,可能现在已经改善了很多了(
博主 standin000
–pack-size 已经集成进去,可以设置4M-128M,copy的issue也关掉了。
博主 茶栗
@standin000 确实,最新版已经用上了
博主 standin000
@茶栗 但我没有找到如何在.autorestic.yml添加这个参数?:(
博主 茶栗
@standin000 autorestic会把 options 下面的所有键值对直接作为命令行传进去,只需要按照 autorestic 文档里写 options 的方法写就行了(我写在了 options -> all 里面)