Claws Garden

我的文件归档方案

本文介绍了我正在使用的文档归档方案,能更轻松地维持个人文件的秩序和安全。

文档冷热区划分

在计算机上,不同的存储介质的读写速度有着很大差别,往往更快的介质成本要高的多。计算机利用“时间局部性”原理(如果一个数据被访问,则不久的将来极有可能被再次访问),将使用的数据存储在缓存,把距离CPU更近的高成本存储利用到极致。与之相对,我们也更有可能访问刚刚被打开和修改过的文档,进行再次修改。我们也可以借鉴计算机使用硬件的思路,在方便触及的地方摆放还在使用的文档,而将不再明显需要的文档及时归档,形成“工作区”和“归档区”两个逻辑存储。

但是这样做有一个问题:归档区需要建立良好的目录结构,以方便未来对文件的查找。但良好的目录结构意味着将文件归档时必须付出额外的时间和精力进行人工整理。除此之外,归档操作本身也可能较为繁琐,尤其是归档使用了多个磁盘,并有多个备份。这些麻烦会带来额外的心智负担,导致工作区的文档不断堆积,破坏工作区的干净,使得快速找到文件的功能减弱。

为此,我在归档区和工作区之间,添加了一层“暂存区”。其功能是中转站,供暂时堆放不需要的文件。然后我以一个较长的周期(半年~一年)将暂存区中的文件手动整理、移动到归档区。这样做有几个好处:

  1. 清理工作区没有额外的负担,只需要将文件移动到暂存区,因此可以做的更轻松、更频繁,工作区更容易维持干净的状态。
  2. 隔一段时间的手动归档也给了“陈旧”文档更多的“发酵”时间,方便我们重新审视文档的重要性,更好地去留和收纳。一些临时文档我们或许还在担心会不会过段时间还要拿出来用,而如果堆在暂存区半年一年后还没有使用,就可以被更安全地删除。另外,也更容易将新旧版本的文档进行“压缩”,只留最后版本,或堆文档的目录进行拆分、合并,形成更合理的结构。这一点类似于LSM Tree中对多个数据日志文件进行压缩,形成信息密度更大的数据文件。
  3. 留出专门的时间进行归档,归档区可以采用更复杂但更安全的实现,例如较难访问的移动硬盘、对象存储。如果需要频繁归档,就不太方便这些介质,而定期专门归档则好得多。如果能将归档区和主力机电脑抽离,主力机也不再需要巨大的硬盘,可以进一步节约购机成本,对于每256GB硬盘均价1500的Mac尤为关键。

具体实现方面:

  1. 工作区:电脑桌面,一台电脑上无疑最方便访问的地方。
  2. 暂存区:用户主目录下的一个目录。
  3. 归档区:移动硬盘和对象存储。

备份

电脑随时可以出现问题,为了保证数据的安全,文件在任何一个时刻绝不能仅存在同一个介质上。

工作区和暂存区和备份,需要保持实时的备份同步,最方便的必然是云盘。我的实现方案是OneDrive,它的优点是预装、稳定、跨平台,能自动备份桌面,足够我日常使用。我的暂存区直接就放在OneDrive目录下面,实时同步。

除此之外,.ssh目录这种放有密钥的重要目录也可以放在OneDrive下,而在主目录下建一个软链接.ssh指向它,就可以实现.ssh目录的备份,弥补了大多数ssh客户端不方便同步配置的缺点。同样的思路也可以用于同步任何其他配置。

对于归档区,采用三地三备份的模式:

  1. 第一份备份在手边的移动硬盘中,方便查询之前的文件。
  2. 第二份备份在老家的机械硬盘中。因此最佳的文件归档时间就是一年一次过年回家。
  3. 第三份备份在对象存储中,提供一层额外的安全保障。

有了这样的备份机制,我配置一台新电脑作为主力机可以说毫不费力,再也不需要像之前一样花费大量时间拷贝旧电脑中的文件。

关于Git

曾经,我尝试过将一些重要目录通过git提交到remote server进行备份、同步。但不得不承认,git并不适合所有文档。对于大部分文档,我们并没有访问历史记录的需求,因此git只会带来更多痛苦。git真正适合的,就是代码项目,最多再加上一部分较为独立的文档项目,如论文。

已经通过git管理的项目不再需要上面的归档和备份,我会把他们放在主目录下面的workspace目录下进行管理。