2019-02-21
作为一个互联网从业者,每天不论是工作还是生活都活在电脑、手机上面。这样,就有大量的电子数据需要进行备份。如何能够可靠、井井有条地进行呢?在本文中我设计了一个满足我个人需求的备份方案。
首先,我们从概念梳理、模型抽象开始。我把个人的所有数据想象成一个文件夹。里面包括各种资料(书籍、文件、照片、代码……),井井有条地摆放。
这个文件夹,就是我们最大粒度的抽象,称为 Repository。
我们每天都使用的电脑,它是数据的生产者,它生产的数据需要被备份。
而 Raid 阵列、移动硬盘,它们用来盛放数据备份。在 Raid 阵列与移动硬盘之间,我目前更加倾向于使用多移动硬盘进行冗余备份。
在电脑、移动硬盘中,都有一个 Repository,而且是完全相同的,可以看做是同一个 Repository 在不同设备间有多份映射。
如下图所示:
这样,备份问题就可以看做是多个 Repository 镜像间的一致性问题。
下面我们来设想一个日常场景:
如下图所示:
在现实中问题会更加复杂。上图中只包含了一台笔记本的情况。如果我们有多台电脑呢?每台电脑都可能添加不同的数据。
比如,假设电脑 A、电脑 B 各持有了一份 Repository。我们在工作中向电脑 A 的 Repository 中添加了一份文档。回到家后,又向电脑 B 的 Repository 的 Repository 中添加了一部影片。此时,Repository 分化出来两个不同的版本,我们不能以其中一个为基准将另外一个冲掉,而是得想一个办法进行合并。
这个过程如下所示:
如何解决这个问题呢?我们所面临的这个问题是版本管理问题,也是 git 所解决的问题。我们也要搞出一套复杂的冲突合并机制吗?
在解决一个问题时要考虑规模与成本,不能高射炮打蚊子。回归到我们的需求,个人数据备份方案。最简单的解决方法是什么呢?
最简单的方案就是不要用两台电脑,用一台电脑!(别打我,还没说完……🤣)
具体说来:
这一过程如下图所示:
在设计 Repository 的 Layout 时,我打算采用两层目录结构。
第一层是分类,比如:照片、代码、Zotero 书库……
第二层是具体的项目,比如结婚照、婚礼录像,这些是需要我们手动添加的。向 Zotero 书库,它是程序维护的,我们不管他即可。
每个项目目录下都需要一个 Readme,注明资料时间,以及它内部包含哪些东西,都是干什么的。
当数年,或者十数年后,我们在访问这个目录的时候,会感谢这份 Readme 文件。
在进行同步时使用 rsync 命令进行同步。
rsync 是一个增量备份工具,能够加快每次同步的速度。
关于 rsync 的具体使用可参考网络上的使用教程。
这个方案又是我土制的一个方案,具体好使不好使还得试过才知道……🤣
根据我以往搞出来的土制东西的经历,好用的不多,瞎折腾的不少。看看这次能不能喜+1……
待我实践一番再回来追加体验报告。
如果你有用着很爽的数据备份方案,请一定告诉我,多谢!