上周五 NAS 系统盘挂掉后一个周末都没有过好,一边忙着备份数据,一边要忙着整理系统应用和配置。早以前除了云端同步数据曾经出现过一两次数据丢失的情况,本地保存的数据还没有出现过管理的问题,系统会用 Clonezilla 全量备份,笔电日常数据则辅以同步工具 Dropbox(后替换成 Syncthing) 和自建的 NextCloud,平时丢数据的可能倒是比较小,但唯一疏漏的 NAS,因为硬盘不是一次性买全而是分了几次购买,所以从一开始就没有规划好如何存储与备份,而系统的酷狼 4T 盘可能经过几次家里停电,SMART INFO 出现警告的时候也没有想到备份,所以造成了从周五开始突然系统盘变成只读状态,无奈只能立即开启 rsync 手动先将系统盘中的数据备份到其他盘。等到周日把损坏的系统盘送修之后,是时候来思考一下如何管理及备份本地数据了。

经过这一次的“事故”,倒是没有丢数据,但是却是一件非常闹心的事情,去年花了一年的时间渐渐的逃离了云端服务,将照片从 Google Photos 离线到本地,将音乐从网易云音乐离线备份了一份到本地,想想这一切非常美好,没想到发生这么一件事情,所以也渐渐感受到本地 RAID 的重要性,对于重要的数据在本地一定要有一份备份。

数据划分等级

原来我对数据的划分非常模糊,一股脑的备份笔电磁盘中所有数据,当然这种不会出现漏备份某些文件的情况,但这也是成本比较高的一种做法,不仅备份数据量大,并且备份的过程也比较长。而经过这次的事故,渐渐的对需要备份的数据有了一定区分度,由我产生的文件一定是最重要的,备份等级最高,包括我自己写下的文本(笔记,博客,TODO),拍摄的照片视频,代码文件,配置以及数据库文件(当然绝大部分代码都是 git 在另外有备份),不过还有一种非常容易忽略的就是,创建的比如音乐歌单,读书列表,在 Trello 中的 Task 等等,当然大部分情况下都是对应的服务中,网易云音乐就曾经莫名其妙地弄丢我一个歌单,这些”文件”都需要提高备份级别。

数据分类存储

所以简单的来说数据需要分类处理,依据重要程度不同需要备份的方法也可以有对应不同,就目前我个人遇到的情况而言。

几大类由我产生的重要数据:

  • 出门拍摄的照片,视频
  • 代码,配置(dotfiles, vim, tmux, zsh, Rime 配置,Docker 配置,程序配置等等)
  • MySQL 等数据库数据
  • 个人整理的笔记

几类由我整理收集的数据:

  • 电影、音乐,以及产生的列表
  • 曾经下载的 PDF,电子书等
  • 各种类型的安装包(apk, exe, dmg etc)

几种备份方法

针对上面这些数据,分别有不同的备份方法:

  • Git
  • Syncthing 多地冗余备份(rsync)
  • 磁盘阵列备份(SnapRAID)
  • Time Machine (Clonezilla) 全盘备份

代码等文本使用 git 备份

对于纯文本的内容,适合 git 来备份,commit && push 就能够至少在两地有备份了。Git 的分布式特性天然的适合文本的存档和备份管理。

适合 git 来备份的有:

  • code
  • dotfiles
  • rime config
  • IntelliJ IDEA config
  • software config

Syncthing 或 Dropbox NextCloud

对于云同步工具,适合同步二进制文件,比如文档或者图片。

从 2020 年中开始,就陆陆续续将 Dropbox,NextCloud 替换成了 Syncthing,几乎是无缝的迁移,将同步的文件夹添加到 Syncthing 中,我的所有设备都加上 Syncthing 的客户端进行同步。

  • Documents, 常用的 word, ppt, pdf 等
  • Photo,常用照片
  • Backup,自动脚本备份的网站数据,或者 SQL
  • Joplin,Obsidian 等等笔记数据
  • 各种二进制导出的配置
  • 日常需要同步的文件

Hard Drive backup

对于需要备份,但是查看次数非频繁的文档,适合单独使用硬盘来备份,比如:

  • 一段时间拍摄的照片,视频等
  • 整理的电子书
  • 音乐
  • 电影,电视剧

对于媒体文件,尤其是较大的电影,电视剧,图片,等等适合使用单独的备份盘来备份。

使用 OpenMediaVault 的系统使用 SnapRAID 来对磁盘做冗余备份,以防止一块硬盘挂掉。

Time Machine 或者 Clonezilla

macOS 下有 Time Machine 备份,Linux Mint 下可以使用 rsync 来备份,如果是 Windows 或 Proxmox 我就是用 Clonezilla 来备份一个分区。

根据作用隔离磁盘

对磁盘的管理,对数据的种类进行划分,对不同的数据进行不同的备份处理。

如果磁盘存放的是个人数据,则要尽量减少磁盘的写入,尽量在备份的时候对磁盘写入,从而延长磁盘的寿命,如果可能这部分个人数据尽量使用 RAID1 或者 RAID5,做到即使有一块磁盘故障时数据不会丢失。

而另外一类场景则是下载电影,当使用 BT 或者 PT 时,磁盘会有大量的读写会大大减少磁盘的寿命,所以我的建议是单独使用一块磁盘作为下载盘,有对磁盘的大量不间断读写时都存放到该磁盘,并周期性对磁盘进行维护,比如使用同步工具定时将数据移动或者拷贝到另外的磁盘中进行保存。

网上有一种说法,说家用 RAID 实际用途并不大,这句话并不完全正确,如果家用 24h 挂机 PT 的话,如果数据是写到 RAID5 中,那么实际上三块磁盘都在工作,无形中就同时降低了三块磁盘的寿命。如果是常年 PT 的话,还是根据个人情况来选择最合适的方案。