个人数据备份方案设计

2019-02-21

前言

作为一个互联网从业者,每天不论是工作还是生活都活在电脑、手机上面。这样,就有大量的电子数据需要进行备份。如何能够可靠、井井有条地进行呢?在本文中我设计了一个满足我个人需求的备份方案。

Repository

首先,我们从概念梳理、模型抽象开始。我把个人的所有数据想象成一个文件夹。里面包括各种资料(书籍、文件、照片、代码……),井井有条地摆放。

这个文件夹,就是我们最大粒度的抽象,称为 Repository。

物理介质

我们每天都使用的电脑,它是数据的生产者,它生产的数据需要被备份。

而 Raid 阵列、移动硬盘,它们用来盛放数据备份。在 Raid 阵列与移动硬盘之间,我目前更加倾向于使用多移动硬盘进行冗余备份。

在电脑、移动硬盘中,都有一个 Repository,而且是完全相同的,可以看做是同一个 Repository 在不同设备间有多份映射。

如下图所示:

一致性

这样,备份问题就可以看做是多个 Repository 镜像间的一致性问题。

下面我们来设想一个日常场景:

  • 我向笔记本的 Repository 的图片文件夹中添加了一张图片
  • 此时笔记本的 Repository 由于添加了新内容,与其他的不一致了
  • 因此需要将笔记本的 Repository 中的更新同步到其他介质的 Repository 上

如下图所示:

在现实中问题会更加复杂。上图中只包含了一台笔记本的情况。如果我们有多台电脑呢?每台电脑都可能添加不同的数据。

比如,假设电脑 A、电脑 B 各持有了一份 Repository。我们在工作中向电脑 A 的 Repository 中添加了一份文档。回到家后,又向电脑 B 的 Repository 的 Repository 中添加了一部影片。此时,Repository 分化出来两个不同的版本,我们不能以其中一个为基准将另外一个冲掉,而是得想一个办法进行合并。

这个过程如下所示:

解决一致性问题

如何解决这个问题呢?我们所面临的这个问题是版本管理问题,也是 git 所解决的问题。我们也要搞出一套复杂的冲突合并机制吗?

在解决一个问题时要考虑规模与成本,不能高射炮打蚊子。回归到我们的需求,个人数据备份方案。最简单的解决方法是什么呢?

最简单的方案就是不要用两台电脑,用一台电脑!(别打我,还没说完……🤣)

具体说来:

  • 假设我们有多台电脑
  • 使用其中的一台最常用的作为 Repository 维护机,只有它可以向 Repository 更新数据
  • 其他的机器都能从 Repository 想自己单向拉取最新数据
  • 其他机器如果有文件需要更新怎么办呢?发送到维护机上,由维护机添加到 Repository 中。

这一过程如下图所示:

两层目录结构

在设计 Repository 的 Layout 时,我打算采用两层目录结构。

第一层是分类,比如:照片、代码、Zotero 书库……

第二层是具体的项目,比如结婚照、婚礼录像,这些是需要我们手动添加的。向 Zotero 书库,它是程序维护的,我们不管他即可。

Readme

每个项目目录下都需要一个 Readme,注明资料时间,以及它内部包含哪些东西,都是干什么的。

当数年,或者十数年后,我们在访问这个目录的时候,会感谢这份 Readme 文件。

rsync

在进行同步时使用 rsync 命令进行同步。

rsync 是一个增量备份工具,能够加快每次同步的速度。

关于 rsync 的具体使用可参考网络上的使用教程。

试验 2019-02-21

这个方案又是我土制的一个方案,具体好使不好使还得试过才知道……🤣

根据我以往搞出来的土制东西的经历,好用的不多,瞎折腾的不少。看看这次能不能喜+1……

待我实践一番再回来追加体验报告。

如果你有用着很爽的数据备份方案,请一定告诉我,多谢!