# Frost のしくみ Frost はフォルダのスナップショットを作り、ファイルを暗号化したチャンクに分割して、ストレージにまだないチャンクだけをアップロードします。 ## 概要 1. **スキャン。** Frost はフォルダを順にたどり、除外リストにあるものはスキップします。前回のバックアップからサイズも更新日時も変わっていないファイルは、Frost のキャッシュに必要なチャンクがすべて記録されている限り、読み直しません。 2. **分割。** 変更されたファイルは約 1 MiB のチャンクに分割されます。分割する位置は内容によって決まるので、大きなファイルの途中を編集しても、変わるのはその周辺のチャンクだけです。 3. **暗号化。** 新しいチャンクは、圧縮して小さくなる場合は圧縮し、そのあとキーで暗号化します。 4. **アップロード。** ストレージにまだないチャンクだけをアップロードします。 5. **スナップショットの保存。** Frost はファイルの一覧と、各ファイルがどのチャンクでできているかを、新しいスナップショットとして保存します。 6. **チェック。** Frost はチャンクを無作為にいくつかダウンロードして確認します。 ## スナップショット スナップショットは、バックアップを実行した時点のフォルダの記録です。すべてのファイルとフォルダについて、内容、権限、更新日時を記録します。各スナップショットはそれだけで完結しているので、ほかのスナップショットがなくても、どれでも復元できます。 スナップショット同士はチャンクを共有します。1 年間変わっていないファイルは、いくつのスナップショットに含まれていても 1 回しか保存されません。そのため、スナップショットをたくさん残しても、余分な容量はほとんど増えません。 前回のバックアップから何も変わっていなければ、Frost は新しいスナップショットを保存しません。フォルダはすでにバックアップ済みだと知らせます。 スナップショット ID は `maple-absurd-3f1c` のように、2 つの単語とさらに 4 文字でできています。ID や日時でスナップショットを選ぶ方法は[ファイルの復元](#restoring)で説明しています。 > Frost にはまだ古いスナップショットを削除する機能がないため、すべてのスナップショットがストレージに残ります。ストレージ内の Frost のフォルダからオブジェクトを手作業で削除したり、オブジェクトを期限切れにするルールを追加したりしないでください。スナップショット同士はチャンクを共有しているので、オブジェクトを 1 つ消すだけで多くのスナップショットが壊れることがあります。 ## キー `frost init` はコンピュータ上でランダムな 256 ビットのキーを作り、24 単語のリカバリーフレーズとして表示します。キーがコンピュータの外に出ることはありません。Frost がアップロードするものは、ファイル名やフォルダ構成も含めて、すべて先にこのキーで暗号化されます。 リカバリーフレーズとストレージへのアクセス権の両方を持つ人は、バックアップを読むことができます。フレーズがなければ、誰も読めません。詳しくは[リカバリーフレーズ](#recovery-phrase)を参照してください。 ## リポジトリ Frost は、ストレージ内の 1 つのフォルダにバックアップをまとめて保存します。このフォルダをリポジトリと呼びます。中には 4 種類のオブジェクトがあります。 | オブジェクト | 内容 | | --- | --- | | `frost.repo` | リポジトリの ID と形式のバージョン | | `chunks/` | 暗号化されたファイルのデータとファイル一覧 | | `snapshots/` | スナップショットごとの小さな暗号化ヘッダー。作成日時、コンピュータ、対象フォルダを記録します | | `trees/` | 各スナップショットのファイル一覧がどのチャンクに入っているか | オブジェクト名はランダムに見える ID なので、ストレージを運用する人からファイル名が見えることはありません。ストレージから見えるものは[セキュリティとプライバシー](#security)にまとめています。 セルフホストのサーバーやローカルドライブでは、各オブジェクトはリポジトリのフォルダ内にその名前のファイルとして置かれます。S3 のバケットでは同じ名前のオブジェクトになるので、リポジトリをこれらの間でコピーできます。詳しくは[バックアップの移動](#moving-backups)を参照してください。 ## ローカルキャッシュ Frost は、アップロード済みのものをコンピュータ上のキャッシュフォルダに記録しています。そのため、バックアップのたびにストレージ全体を一覧する必要がありません。この記録は週に 1 回、また保存先が変わったときやチェックでデータの欠落が見つかったあとにも、ストレージと照合されます。 キャッシュは消えても問題ありません。なくなった場合は、次のバックアップでストレージから作り直し、ファイルを読み直します。復元にはキャッシュはまったく必要ありません。 ## 常駐プロセスはありません Frost はバックグラウンドで動き続けることはありません。自動バックアップは、OS のスケジューラ (launchd、systemd、cron、タスク スケジューラ) に登録された通常のジョブです。このジョブが Frost を起動し、バックアップを 1 回実行して終了します。詳しくは[自動バックアップ](#scheduling)を参照してください。 ## 自己チェック スナップショットを保存したバックアップのあと、Frost はチャンクを無作為にいくつかダウンロードし、それぞれが復号でき、ID と一致するかを確認します。新しい内容がないバックアップでは、前回のチェックから 1 日以上経っている場合にだけチェックをやり直します。詳しくは[バックアップの確認](#checking-backups)を参照してください。