Frost 的工作原理

Frost 为你的文件夹创建快照,把文件拆分成加密的数据块,并且只上传存储中还没有的数据块。

#简要流程

  1. 扫描。 Frost 遍历你的文件夹,但不会处理跳过列表中的内容。自上次备份以来大小和修改时间都没变的文件,只要 Frost 的缓存仍记录着它们的全部数据块,就不会再次读取。
  2. 分块。 有变化的文件会被拆分成约 1 MiB 的数据块,拆分点由文件内容决定。在大文件中间改动一处,只会影响附近的几个数据块。
  3. 加密。 每个新数据块如果压缩后能变小,就先压缩,然后用你的密钥加密。
  4. 上传。 只上传存储中还没有的数据块。
  5. 保存快照。 Frost 把文件列表,以及每个文件由哪些数据块组成,保存为一个新快照。
  6. 检查。 Frost 随机下载一部分数据块并逐一检查。

#快照

快照记录了备份运行那一刻你的文件夹:每个文件和文件夹,连同它们的内容、权限和修改时间。每个快照本身都是完整的,所以任何一个快照都可以单独恢复,不依赖其他快照。

快照之间共享数据块。一个一年没改过的文件只存储一份,无论有多少个快照包含它,所以保留很多快照只会多占很少的空间。

如果自上次备份以来什么都没变,Frost 不会保存新快照,而是告诉你文件夹已经备份好了。

快照 ID 形如 maple-absurd-3f1c:两个单词,再加四个字符。恢复文件说明了如何按 ID 或按时间挑选快照。

Frost 目前还不能删除旧快照,所以每个快照都会一直留在存储中。不要手动删除存储里 Frost 文件夹中的对象,也不要添加让它们过期的规则。快照之间共享数据块,删掉一个对象就可能损坏许多快照。

#你的密钥

frost init 会在你的电脑上生成一个随机的 256 位密钥,并以 24 个单词的恢复短语展示给你。密钥永远不会离开你的电脑。Frost 上传的所有内容都会先用它加密,包括文件名和文件夹结构。

任何同时拥有恢复短语和存储访问权限的人,都能读取你的备份。没有恢复短语,谁也读不了。参见恢复短语。

#仓库

Frost 把备份保存在存储中的一个文件夹里,这个文件夹叫作仓库。仓库中有四类对象:

对象 内容
frost.repo 仓库的 ID 和格式版本
chunks/ 加密后的文件数据和文件列表
snapshots/ 每个快照一份小小的加密头信息:何时创建、在哪台电脑上、包含哪些文件夹
trees/ 每个快照的文件列表存放在哪些数据块中

对象名称是看起来随机的 ID,所以运营你存储的人永远看不到你的文件名。安全与隐私列出了存储能看到的内容。

在自托管服务器或本地磁盘上,每个对象都是仓库文件夹中以该名称命名的文件。在 S3 存储桶中,它是同名的对象,所以仓库可以在它们之间复制。参见迁移备份。

#本地缓存

Frost 会在电脑上的缓存文件夹中记录已经上传过的内容,这样每次备份时就不必把存储中的所有对象列一遍。它每周会把这份记录和存储核对一次,也会在存储位置变动后或检查发现数据缺失后重新核对。

缓存可以随时丢弃。缓存丢失后,下一次备份会根据存储重建它,并重新读取你的文件。恢复完全用不到缓存。

#没有后台服务

Frost 不在后台运行。自动备份是操作系统计划程序(launchd、systemd、cron 或任务计划程序)中的普通任务,它们启动 Frost,运行一次备份,然后退出。参见自动备份。

#自我检查

每次保存了快照的备份之后,Frost 都会随机下载一部分数据块,检查每一块能否解密、是否与它的 ID 相符。如果某次备份没有新内容,只有当上一次检查已经超过一天时才会再检查一次。参见检查备份。