永続的なアプリデータ、データベーススキーマ、ボリューム所有権、またはストレージレイアウトを変更する可能性のあるコンテナ更新の前にロールバックポイントを作成すべきです。サービスがステートレスで永続パスが変わらず、テスト済みのバックアップが既にデータをカバーしている場合は、無害なイメージプルや再起動の前に新しいファイルシステムスナップショットは不要です。
ホームNASに有効なルールは「すべての更新をスナップショットする」ではなく「状態を変えるすべての更新を保護する」です。これにはコンテナイメージが何を制御し、ボリュームやバインドマウントに何が存在し、アプリケーションがクラッシュコンシステントなスナップショットから回復できるかを知る必要があります。
コンテナの更新が異なるものを変更するため、1つのスナップショットルールは失敗します
コンテナが使い捨てコードのみを提供し、設定をバージョン管理から読み込む場合、イメージの置き換えはリスクが低いことがあります。同じように見える更新でも、新バージョンがデータベースを移行したり、インデックスを書き換えたり、ファイル所有権を変更したり、永続ボリュームのレイアウトを変換した場合はリスクが高くなります。
コンテナの永続性は正しくマッピングされたストレージに依存します。ホームサーバーの更新ガイドではボリュームマッピングが再作成時にアプリデータを保持すると説明していますが、永続性だけではアプリケーションがファイルを変更した後のロールバックポイントは作成されません。
スナップショットを選ぶ前にロールバック単位を選択してください
| 保護すべき状態 | ロールバックオブジェクト | スナップショットのみ? |
|---|---|---|
| コンテナイメージとタグ | 古いイメージダイジェストまたは固定バージョン | 永続的な変更がなければデータスナップショットは不要です |
| Composeファイル、環境、ポート、およびマウント | バージョン管理された設定のエクスポート | いいえ;ストレージスナップショットはデプロイメント定義を復元しません |
| 通常のファイルを含むバインドマウントおよび名前付きボリューム | ファイルシステムのスナップショットまたは検証済みのファイルバックアップ | 通常、ファイルが静止状態で全てのパスが含まれている場合 |
| PostgreSQL、MariaDB、SQLite、またはその他のアクティブなデータベース | アプリ対応のダンプ、調整されたスナップショット、または短時間のクリーンシャットダウンコピー | 自動的には行われません |
| 秘密情報、証明書、および外部認証情報 | 独立した秘密のバックアップおよびリカバリ記録 | いいえ;それらはスナップショットされたデータセットの外に存在する可能性があります |
ロールバックユニットには、アプリが起動に必要なすべてのコンポーネントを含める必要があります。イメージだけをロールバックすると新しいデータベーススキーマが残り、ボリュームだけをロールバックすると互換性のないイメージや設定が有効なままになることがあります。
永続状態を書き換える可能性のある更新の前にスナップショットを取る
データベースとスキーマのマイグレーション
スキーママイグレーション、データベース変換、再インデックス作成、または一方向のアップグレード手順がリリースノートに記載されている更新の前に、アプリ対応のバックアップまたは調整されたスナップショットを取ってください。実用的なコンテナ更新ワークフローは、アプリデータのバックアップと現在のバージョンの記録を明示的に組み合わせてから置き換えをプルします。
ボリュームのレイアウトと権限の変更
更新がマウントパス、UID/GID所有権、データベースディレクトリ、メディアメタデータ、生成されたサムネイル、またはアプリケーションのストレージ形式を変更する場合は、ロールバックポイントを作成してください。これらの変更により、ファイルが存在していても古いコンテナが更新されたデータを読み取れなくなることがあります。
大規模または再作成が困難なホームデータ
状態の再構築にロールバックポイントの作成とテストよりも時間がかかる場合は、写真ライブラリ、ドキュメントシステム、ホームオートメーション履歴、パスワードマネージャー、またはメディアメタデータの更新前にスナップショットを取ってください。
更新が本当にステートレスな場合はスナップショットをスキップする
コンテナに書き込み可能な永続パスがなく、すべての設定が再現可能で、外部データがすでに保護されており、ロールバックが以前に固定されたイメージの起動を意味する場合、別のストレージスナップショットはほとんど価値を追加しないかもしれません。アプリが匿名ボリュームや予期しないホストパスに静かに書き込んでいないことを確認してください。
この低リスクのパスでも正確な古いイメージダイジェストを記録してください。ホームサーバーの運用者は一般的に古いイメージダイジェストを求めます。これは、複数回の再起動後に発見された問題が、変更されたバージョンに関連付けられるようにするためです。
ライブファイルシステムスナップショットはアプリケーション整合性がない場合があります
ファイルシステムスナップショットはある時点をキャプチャしますが、アクティブなデータベースはメモリ内にダーティページを持っていたり、部分的に書き込まれたトランザクションや相互に整合性を保つ必要のある依存ファイルが存在する場合があります。データベースバックアップの指針では、クラッシュ整合性コピーとアプリケーション整合性スナップショットを区別しています。後者はデータベースがバックアップモード中または静止状態のときに作成されます。
小規模なホームNASアプリの場合、最も簡単で安全な選択は論理ダンプか、スナップショット前の短時間のクリーン停止かもしれません。ライブのMySQLボリュームの単純なアーカイブは同等ではありません。実践的なコンテナバックアップのアドバイスでは、アプリ対応の方法がない場合はデータベースを停止してからコピーすることを推奨しています。
すべてのアップデートルールの代わりにリスクマトリックスを使用する
| アップデート条件 | 推奨保護策 | 理由 |
|---|---|---|
| パッチリリース、マイグレーションなし、ステートレスサービス | 古いイメージを固定し、設定履歴を保持する | 永続的な状態の変更は予想されません |
| アプリは1つのスナップショットされたデータセットに通常のファイルを書き込みます | 高速な事前アップデートスナップショットと通常のバックアップ | すべてのパスがカバーされていればロールバックは簡単です |
| データベースマイグレーションまたは新しいストレージフォーマット | データベースネイティブバックアップと連携したスナップショット | 古いイメージはマイグレーションされたデータを理解できない可能性があります |
| 複数のデータセット、外部データベース、シークレット、または証明書 | 依存関係チェックリストと各状態所有者ごとの個別バックアップ | 1つのファイルシステムスナップショットではアプリ全体をカバーできません |
| アップデートは不可逆的、またはロールバックは一度もテストされていません | メンテナンスウィンドウ、分離されたリストアテスト、および長期スナップショット保持 | 未知のロールバックパスが主なリスクです |
可逆的なホームNASアップデートワークフローを使用する
- マイグレーション、権限変更、削除された設定、および最小データベースバージョンに関するリリースノートをお読みください。
- 現在のイメージダイジェスト、composeファイル、環境変数、マウント、アプリケーションバージョンを記録してください。
- リスクマトリックスに基づき、スナップショットなし、高速ファイルシステムスナップショット、アプリ対応データベースバックアップ、またはその両方の保護を作成してください。
- アプリスタックは一度に1つずつ更新し、古いイメージを利用可能な状態に保ってください。
- ログイン、コアデータ、バックグラウンドジョブ、アップロード、データベース書き込み、および代表的な復元またはエクスポートをテストしてください。
- アプリが通常の家庭内使用に耐え、定期的なバックアップサイクルを完了するまで、更新前のロールバックポイントを保持してください。
- 別のバックアップで現在の状態を再構築できるようになってから、一時的なスナップショットを削除してください。
ストレージプラットフォームが許す場合、ロールバックはクローンまたは別のターゲットでテストすべきです。直接のロールバックは新しい状態を破棄する可能性があります。例えばZFSユーザーはロールバックが後のスナップショットを破棄し、選択した時点以降の変更を失うことを理解しておくべきです。
よくある質問
稼働中のデータベースコンテナのスナップショットだけで十分ですか?
データベースとストレージ方式が回復可能なクラッシュ一貫性のある状態を生成できる場合、またはスナップショットがデータベースと連携している場合のみです。価値の高いホームサーバーアプリには、ライブボリュームスナップショットが十分と仮定せず、データベース一貫性のあるコンテナバックアップを使用してください。
更新前のスナップショットはどのくらいの期間保持すべきですか?
更新されたアプリが機能チェックに合格し、通常の使用に耐え、少なくとも1回の別途検証済みバックアップが完了するまで保持してください。移行が不可逆的で問題がゆっくり現れる可能性がある場合や、古いアプリスタックの再構築が困難な場合は、より長く保持してください。
スナップショットは短期的なロールバックツールであり、バージョン管理されたバックアップ、設定履歴、秘密情報の回復、またはアプリケーション対応のデータベース保護の代替ではありません。状態が変わる可能性のある更新時に使用し、更新が本当に使い捨て可能でロールバック経路が既に確立されている場合はスキップしてください。
サポートとヒント
もっと読む

Plexは別のDockerコンテナとGPUを共有できますか?
Plexと別のコンテナは同じGPUにアクセスできることが多いですが、ドライバーのサポート、デバイスマッピング、ビデオエンジンの負荷、メモリ、復旧動作をテストする必要があります。

Plexのエラーがクライアント側とサーバー側のどちらに起因するかを見分ける方法
別のクライアントで同じ項目を再現し、セッションパスを比較してから、スコープによって障害の実際の所在が特定された後にのみサーバーの証拠を収集してください。

Plexのキャッシュとトランスコード用一時ストレージを設定する方法
永続的な Plex の状態を保護しつつ、トランスコードの一時ファイルを適切なローカルストレージに配置し、クリーンアップ、空き容量、再起動時の動作を確認します。

