个人数据管理方案 – 同步、备份与管理

最近抽时间重新整理了一下自己硬盘上的各种文件、存档和备份。也趁此机会重新梳理了一下自己对个人数据管理的一些想法和实践。在这儿简单记录一下。

需求描述:个人长期积累的一些文档、照片、媒体等文件的管理(这篇blog主要讨论二进制文件的管理。类似笔记等个人文本数据不在讨论范围)。希望对这些二进制文件的管理能平衡和兼顾以下的各个因素:

  • 价格:希望能最大程度利用现有的笔记本、台式机以及分散的硬盘。如无必要,不希望购买新的硬件或云服务增加成本;
  • 隐私:有限度地信任网络(云)存储方案,保护个人隐私;
  • 数据安全:重要文档有至少一个备份,且备份的增删查改便于调整和管理;
  • 数据可用性:灵活利用现有的数据同步、移动硬盘离线存储、Samba、Cloud等机制,便于Windows/MacOS/Linux/iOS/Android等操作系统对数据的访问;
  • 便利性与时间、学习成本:乐于付出学习成本,但希望尽可能照顾日常使用的便利性;

在说日常使用中的具体问题前,再简单描述下使用环境和背景:

  1. 出于对国内网盘产品的天生不信任,不打算把任何个人数据通过国内的网盘进行存储和管理;国外的网盘产品有限度地信任;
  2. 没有NAS设备,各机器也都没做RAID。前者是出于价格考量(见上)。而后者更多的是因为遗留环境所致——硬盘购买时间不一,容量不一,新购硬盘时旧硬盘已塞满数据等。另外也包含其他一些考虑,如软RAID人为地增加了管理成本等;
  3. 现有的备份基本是通过手工的复制、粘贴,以及定期的跨盘同步(rsync)与克隆(外置USB硬盘Dock自带功能)来完成;

正是因为这样的使用方式,在解决了一部分问题的同时,也存在一些问题没有解决:

  • 备份不及时(无自动化):例如相片从相机导入电脑时,不会自动进行备份。即便刻意地通过一些方式进行缓解,将相机SD卡中的文件作为备份保留一段时间,仍然存在窗口期有丢失数据的风险。在此期间也存在跨设备的文件访问问题;
  • 乏力的存档双向同步:这个大约是最头疼的问题了。因为数据的跨设备存储(移动硬盘/Samba/本地硬盘)和跨平台访问,需要保持同步的一致性。rsync的双向同步没有去尝试,另外Windows平台也不容易支持rsync;
  • 缺少数据的集中视图:由于数据散落在各硬盘,缺少集中的逻辑视图和目录式管理,所以多块硬盘都有文档、照片或电影文件夹。导致:1、只能靠记忆或搜索的方式查找存档文件;2、或是手工定期不定期地进行转移和合并,而在此中途又可能会有数据的同步确认,白白地增加了时间成本;
  • 冗余的数据(次要问题):一个相对的次要的问题。主要发生在给别人的照片分享,或是因为照片处理等场景下,手工复制了部分照片的子集用于好友分享或后续处理。而这些重复数据在已有跨设备文件备份的前提下,白白占用了磁盘空间;

解决现有问题的一些想法和原则:

  • 不是所有数据都是平等的:包括访问的频度、是否需要跨平台访问、是否愿意牺牲一定的隐私性换取便利性等等。所以值得区分不同数据选择相对应的解决方案;
  • 数据管理天然的异构特性:作为长期的个人数据管理,无论是数据来源,还是管理和使用方式都在不断地变化。所以更重要的是建立一种机制,能够包容后续对数据的不断调整,甚至管理方式的调整,而不是一次性试图解决所有问题;
  • 关于工具箱:通过工具箱的组合来解决问题,重要部分在于了解工具本身的优缺点,以及工具与问题的适配程度。同时需要兼顾诸如:公有服务和私有方案,收益和付出成本等方面的平衡;

解决问题的工具箱组合:

Dropbox对我而言仍然足够好用。由于存在云端存储且有丰富的跨平台客户端,所以用于存放有较强同步需求或跨平台需求的个人数据。符合这一定义的文档数量并不多,Dropbox提供的免费容量已经完全够用。必要时可将数据向下一级存档方式进行转移。另外,Dropbox存放的数据不涉及个人隐私,如有个别需要可加密后再通过Dropbox同步;

作为Dropbox的替代同步方案,它的优点主要包括:无容量限制,家庭局域网中同步速度快,文件分享便捷,同步源数量不受限制可跨机器同步多个内容仓库;不足主要在于缺少云端存储部分,当然这一部分如有需要可购买第三方付费服务或者自行搭建。

此外,尽管存在私钥的加密,但secret SHA值、数据传输量、IP地址等数据仍然会被收集。对于个人隐私数据的局域网同步,需要禁用relay server、tracker server与DHT。这么做的代价是损失了通过Internet同步的能力,但对于局域网同步的需求足矣。此外,可根据数据隐私与重要性的不同在多个同步源中分别独立设置是否允许通过Internet同步。另:Bittorrent Sync暂不支持自己架设tracker server与relay server;

Git Annex本身,这里就不详细介绍了。官网有详细的说明。它的本质,是通过git的方式管理大文件的元数据(SHA256与符号链接),而文件内容本身并不真正存入仓库。

所以Git Annex不是一个备份或同步工具,我更愿意理解它为数据元数据的管理工具。由于和git命令可以完全操作git annex仓库,可以分方便的在多个硬盘间建立统一的文件视图。如photo文件夹下有2013和2014两个子文件夹,在两块硬盘上都可以看到这两个子文件夹,以及文件夹下的全部文件名信息。但2013子文件夹下的全部照片实际存在于硬盘1,而2014子文件夹下的全部照片实际存在于硬盘2。

数据的实际位置是可查询可管理的。例如”git annex move 2013/ –to disk2″命令,可将2013/全部转移至硬盘2并释放硬盘1的存储空间;或”git annex whereis 2013/”查询文件的实际位置;数据拷贝的数量也是可管理的,例如”git annex get –auto –numcopies=2″自动下载备份维持两拷贝。

Git Annex的不足可能在于一定的学习成本和Linux/Git知识。虽然有图形化工具可用,但由于概念本身就比同步方案复杂,仍然存在一定的使用门槛。

另外的问题和不足之处在于:Windows下Git Annex仅支持Direct mode,丧失了绝大部分git命令操作的能力;另外,实际使用中发现Linux挂载NTFS分区创建的符号链接为Interix格式,在Windows下重新挂载时无法识别。Win 7下尝试开启SUA(Subsystem for UNIX-based Applications)仍然不起作用,暂时没研究出来。Mac + NTFS的组合可通过加载ntfs-3g fuse driver的方式进行解决。最好用的组合,个人觉得还是Linux下进行Git Annex管理,数据通过samba访问。

总结:

综上,Dropbox/Bittorrent Sync/Git Annex,分三级解决了我的个人数据管理问题。

其中,Dropbox最简单,用于管理最少和相对最常用的数据量;Bittorrent Sync用于解决剩余的“同步”类型的需求,它够快且容量不受限制。通过BTSync,解决了“现有问题”中的备份不及时以及双向同步的问题。所有被管理的个人数据在局域网都是双向同步且有备份的。而Git Annex解决了剩余的“统一文件视图”与“消除冗余数据”的问题。它灵活但相对复杂,用于管理最不经常访问的存档数据。当然,这也是数据量最大的一部分个人数据。

实际使用中,个人数据可在三种类型的管理方式之间迁移,以满足个人数据管理在备份、存档、传输、共享等不同方面的需求。