オリジナルと派生データのためのセルフホスト型フォトライブラリ整合性ワークフロー

エヴァ・ウォン は テクニカルライター であり ZimaSpaceの常駐ティンカーでもあります。 生涯のオタクであり、 ホームラボとオープンソースソフトウェアに情熱を持っています。彼女は複雑な技術的概念をわかりやすく、 実践的なガイドに翻訳することを専門としています。エヴァはセルフホスティングは楽しくあるべきで、怖がるものではないと信じています。彼女のチュートリアルを通じて、コミュニティが ハードウェアのセットアップを解明する手助けをしています。初めてのNAS構築からDockerコンテナの習得まで。

見た目が健全な写真タイムラインだからといって、オリジナル、データベース、生成済みプレビューがすべて完全だとは限りません。

セルフホスト型ギャラリーは、オリジナルが消えた後もキャッシュ済みサムネイルの配信を続けることがあります。また、オリジナルは完全に残っていても、ワーカーが新しい派生ファイルを生成できない場合があります。再構築が必要な状態と再生成可能な状態を分け、アプリの外部でオリジナルのバイト列を検証し、ファイルとデータベースのレコードを照合してから、隔離した復元環境をテストする前にカナリアを1つだけ再生成してください。チェックサムが変化した場合、ソースストレージが不安定になった場合、またはジョブがオリジナルに書き込んだ場合は、直ちに停止します。

必須状態と再生成可能な状態を定義する

オリジナル、アップロードした動画、サイドカー、データベース、設定、シークレット、ユーザーアカウント、アルバム、編集内容、共有記録を必須状態として棚卸しします。サムネイル、トランスコード済み動画、顔の埋め込み、検索インデックスは、オリジナルとアプリケーションの状態が完全に残っている場合にのみ再生成できる派生データとして別に一覧化します。

セルフホスト環境では、通常、ライブラリを大容量ストレージに、データベースや作業パスをより高速なメディアに配置します。実用的なImmichのストレージ構成について説明したライブラリとホットパスストレージの分離では、この理由が示されています。そのため、整合性チェックはユーザーが閲覧するフォルダーだけでなく、マウントされているすべてのパスを対象にする必要があります。

アプリケーションのバージョン、コンテナイメージ、マウント定義、データベーススキーマの状態、ストレージの空き容量、ジョブキューの状態を記録します。必須パスが存在しない場合や、予期せず読み取り専用になっている場合は停止してください。真の基準となるデータが不確かな状態で、再生成ジョブを開始してはいけません。

ギャラリーとは独立してオリジナルのバイト列を証明する

信頼できるチェックサムマニフェストをオリジナル用に生成または再利用し、読み取り専用モードで現在のツリーと比較します。ファイル数、合計バイト数、読み取れないファイル、想定外のゼロバイトオブジェクト、孤立したパスを照合します。JPEG、HEIC、RAW、動画、古い年のファイル、最近のアップロードを含む層化サンプルを、ギャラリーの外部で開きます。

表示されるサムネイルからオリジナルの健全性を推測してはいけません。ギャラリーはオリジナルが失われた後もキャッシュ済みの派生データを配信し続けることがあり、オリジナルが健全でもプレビューパイプラインの障害によって非表示になることがあります。オリジナルと再生成可能な派生データの違いがあるため、直接ファイルを確認することが最初の安全ゲートになります。

ハッシュが変化した場合や読み取りに失敗した場合は、インポート、クリーンアップ、派生データの再生成を一時停止します。データベースのレコードを変更する前に、障害のあるストレージを復元するか、イメージを取得します。必須のオリジナルが読み取り可能で、説明のつかない差異について担当者、理由、復旧アクションが明確になっていれば、この段階は合格です。

レコード、パス、派生データのジョブを照合する

データベースのアセットレコードとファイルシステムのパスを双方向で比較します。つまり、ファイルのないレコードと、レコードのないファイルを確認します。アセットが欠落していると判断する前に、UIDとGID、バインドマウント、外部ライブラリのルート、大文字と小文字の区別、名前変更されたディレクトリを確認します。孤立リストは保持し、どちらか一方を自動的に削除しないでください。

次に、サムネイル、プレビュー、トランスコード、メタデータ抽出、機械学習の各ジョブをサンプル調査します。オリジナルは完全だが派生データに失敗している状態を扱った独立したトラブルシューティング記事では、ストレージ、ワーカー、派生データのパスに障害があると、アップロードが完全なままグレーのタイルが表示されることがある様子が説明されています。

オリジナルとデータベースの行が一致した後にのみ、カナリアとなる派生データを1つ再生成します。合格とは、期待される所有者、パス、クライアント応答を持つ新しいプレビューが生成されることです。失敗した場合は、ワーカーのログ、デコーダー、出力ストレージ、キューの状態のいずれかに範囲を限定します。再起動後もカナリアが正しいままであることを確認するまで、ライブラリ全体の再構築を開始してはいけません。

完全なライブラリを隔離した対象環境に復元する

オリジナル、データベース、設定、シークレット、必須のサイドカーを、異なるポートとパスを使用する使い捨て環境に復元します。依存関係を順番に起動し、ユーザーとアルバムを確認してから、サンプルセットに必要な派生データのジョブだけを許可します。本番環境の書き込み可能なストレージをテストインスタンスに接続しないでください。

ログイン、タイムライン、検索、アルバムへの所属、オリジナルのバイト列のダウンロード、1件の編集、1件の共有、動画の再生をテストします。ダウンロードしたハッシュをマニフェストと比較し、2回目の再起動後もパスマッピングが失われず、必須状態が誤った所有者で再作成されないことを確認します。

稼働中のライブラリと隔離した復元環境が必須状態で一致し、カナリアとなる派生データがオリジナルから再生成された場合にのみ、整合性が証明されたと判断します。データベースとファイルの不一致、増加するチェックサムエラー、オリジナルを変更するジョブがあればエスカレーションします。マニフェストとログを保持し、修復作業が記録のない再インポートにならないようにしてください。

サポートとヒント

もっと読む

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.