Frost のしくみ

Frost はフォルダのスナップショットを作り、ファイルを暗号化したチャンクに分割して、ストレージにまだないチャンクだけをアップロードします。

#概要

  1. スキャン。 Frost はフォルダを順にたどり、除外リストにあるものはスキップします。前回のバックアップからサイズも更新日時も変わっていないファイルは、Frost のキャッシュに必要なチャンクがすべて記録されている限り、読み直しません。
  2. 分割。 変更されたファイルは約 1 MiB のチャンクに分割されます。分割する位置は内容によって決まるので、大きなファイルの途中を編集しても、変わるのはその周辺のチャンクだけです。
  3. 暗号化。 新しいチャンクは、圧縮して小さくなる場合は圧縮し、そのあとキーで暗号化します。
  4. アップロード。 ストレージにまだないチャンクだけをアップロードします。
  5. スナップショットの保存。 Frost はファイルの一覧と、各ファイルがどのチャンクでできているかを、新しいスナップショットとして保存します。
  6. チェック。 Frost はチャンクを無作為にいくつかダウンロードして確認します。

#スナップショット

スナップショットは、バックアップを実行した時点のフォルダの記録です。すべてのファイルとフォルダについて、内容、権限、更新日時を記録します。各スナップショットはそれだけで完結しているので、ほかのスナップショットがなくても、どれでも復元できます。

スナップショット同士はチャンクを共有します。1 年間変わっていないファイルは、いくつのスナップショットに含まれていても 1 回しか保存されません。そのため、スナップショットをたくさん残しても、余分な容量はほとんど増えません。

前回のバックアップから何も変わっていなければ、Frost は新しいスナップショットを保存しません。フォルダはすでにバックアップ済みだと知らせます。

スナップショット ID は maple-absurd-3f1c のように、2 つの単語とさらに 4 文字でできています。ID や日時でスナップショットを選ぶ方法はファイルの復元で説明しています。

Frost にはまだ古いスナップショットを削除する機能がないため、すべてのスナップショットがストレージに残ります。ストレージ内の Frost のフォルダからオブジェクトを手作業で削除したり、オブジェクトを期限切れにするルールを追加したりしないでください。スナップショット同士はチャンクを共有しているので、オブジェクトを 1 つ消すだけで多くのスナップショットが壊れることがあります。

#キー

frost init はコンピュータ上でランダムな 256 ビットのキーを作り、24 単語のリカバリーフレーズとして表示します。キーがコンピュータの外に出ることはありません。Frost がアップロードするものは、ファイル名やフォルダ構成も含めて、すべて先にこのキーで暗号化されます。

リカバリーフレーズとストレージへのアクセス権の両方を持つ人は、バックアップを読むことができます。フレーズがなければ、誰も読めません。詳しくはリカバリーフレーズを参照してください。

#リポジトリ

Frost は、ストレージ内の 1 つのフォルダにバックアップをまとめて保存します。このフォルダをリポジトリと呼びます。中には 4 種類のオブジェクトがあります。

オブジェクト 内容
frost.repo リポジトリの ID と形式のバージョン
chunks/ 暗号化されたファイルのデータとファイル一覧
snapshots/ スナップショットごとの小さな暗号化ヘッダー。作成日時、コンピュータ、対象フォルダを記録します
trees/ 各スナップショットのファイル一覧がどのチャンクに入っているか

オブジェクト名はランダムに見える ID なので、ストレージを運用する人からファイル名が見えることはありません。ストレージから見えるものはセキュリティとプライバシーにまとめています。

セルフホストのサーバーやローカルドライブでは、各オブジェクトはリポジトリのフォルダ内にその名前のファイルとして置かれます。S3 のバケットでは同じ名前のオブジェクトになるので、リポジトリをこれらの間でコピーできます。詳しくはバックアップの移動を参照してください。

#ローカルキャッシュ

Frost は、アップロード済みのものをコンピュータ上のキャッシュフォルダに記録しています。そのため、バックアップのたびにストレージ全体を一覧する必要がありません。この記録は週に 1 回、また保存先が変わったときやチェックでデータの欠落が見つかったあとにも、ストレージと照合されます。

キャッシュは消えても問題ありません。なくなった場合は、次のバックアップでストレージから作り直し、ファイルを読み直します。復元にはキャッシュはまったく必要ありません。

#常駐プロセスはありません

Frost はバックグラウンドで動き続けることはありません。自動バックアップは、OS のスケジューラ (launchd、systemd、cron、タスク スケジューラ) に登録された通常のジョブです。このジョブが Frost を起動し、バックアップを 1 回実行して終了します。詳しくは自動バックアップを参照してください。

#自己チェック

スナップショットを保存したバックアップのあと、Frost はチャンクを無作為にいくつかダウンロードし、それぞれが復号でき、ID と一致するかを確認します。新しい内容がないバックアップでは、前回のチェックから 1 日以上経っている場合にだけチェックをやり直します。詳しくはバックアップの確認を参照してください。