初日からJellyfinのバックアップ、復元、拡張を設計する方法

Eva Wong は テクニカルライター であり、 生粋の技術好き としてZimaSpaceで活動しています。ホームラボやオープンソースソフトウェア をこよなく愛する生粋のギークで、複雑な技術概念をわかりやすく、実践的なガイド にまとめることを得意としています。Evaは、セルフホスティングは難しいものではなく、楽しむものだと考えています。チュートリアルを通じて、初めてのNAS構築からDockerコンテナの使いこなしまで、コミュニティがハードウェアのセットアップをわかりやすく理解できるよう 支援しています。、初めてのNAS構築からDockerコンテナの習得まで。

Jellyfinを、ブート、アプリケーションの状態、メディア、キャッシュ、バックアップ、復旧の6つの役割に分けて設計し、容量の上限に近づいた役割だけを拡張します。

小規模な環境では、複数の役割を1台のマシンに置いてもかまいませんが、それぞれのライフサイクルを混同してはいけません。変更される状態は簡単にスナップショットできるようにし、メディアには安定した論理パスを使い、キャッシュは破棄可能にして、少なくとも1つの復旧用コピーを稼働中の障害ドメインの外に保管します。保持期間を自動化したりディスクを追加したりする前に、クリーンな復元先で復元して設計を検証してください。

ディスクを選ぶ前に、6つのデータの役割を整理する

ドライブベイではなく、達成したい結果から始めましょう。ブートファイルとランタイムファイルは再現可能である必要があります。Jellyfinのデータベース、設定、ユーザー、視聴履歴、整理済みメタデータは永続状態です。メディアは容量の大きなユーザーデータ、トランスコードと画像キャッシュは再構築可能なデータ、バックアップは復旧に使うデータ、復旧先はそのデータを使って復元を検証する場所です。

この分離によって、変化するデータベースと同じ頻度で不要なキャッシュのテラバイト単位のデータをバックアップしたり、データベースは保護しても、かけがえのないホームビデオには2つ目のコピーを用意しなかったりする、コストのかかる間違いを防げます。独立したUbuntuとDockerの復元手順でも、永続的な設定と再構築可能なキャッシュを区別しています。
役割 一般的な内容 設計ルール
ブート/システム OS、パッケージ、ランタイム定義 文書化またはイメージ化し、再構築できる前提にする
アプリケーションの状態 データベース、ユーザー、設定、メタデータ 高速なローカルストレージと一貫性のあるバックアップ
ユーザーメディア 映画、音楽、家族のファイル 安定したパスと個別の保護ポリシー
キャッシュ トランスコード、リサイズ済み画像、一時作業 スループットを優先して配置し、再構築を前提とする
バックアップ バージョン管理された復旧用コピー 稼働中の障害ドメインの外に保管する
復旧 クリーンなテスト用ホストまたは隔離された名前空間 本番環境の保存先ではなく、復元の検証に使う

プラグイン、証明書、字幕、カスタムアセットのいずれかに保存先が決まっていない場合は、ここで作業を止めてください。永続パスを分類しないままにすると、元のサーバーがなくなってから初めて見つかるファイルが生まれます。

状態はローカルに保持し、メディアのパスは安定させる

アプリケーションの状態は、空き容量を監視できる信頼性の高いローカルSSDに保存します。メディアは論理パスに個別にマウントし、ディスク、エンクロージャー、プールを変更しても維持できるようにします。ストレージ層の背後が変わっても、拡張の前後でJellyfinサービスから同じパスが見えるようにします。

キャッシュは復旧に必要なものではなく、スループットを消費するものとして扱います。軽いワークロードならシステムSSDと共用してもよく、書き込み量、容量、摩耗が問題として測定されるようになったら、専用の高速ボリュームに移せます。データベースとキャッシュがどちらも小さいというだけで、一緒に移動しないでください。

起動するたびに、メディアと状態のマウントが存在し、実行時のIDで書き込み可能であることを必須条件にします。ネットワークマウントが見つからず、空のローカルディレクトリとして暗黙に扱われると、誤ったパスに対してスキャンや書き込みが行われる可能性があります。関連するパス変更後の権限とIDの復旧ガイドでは、所有権の境界について説明しています。

復旧オブジェクトを軸にバックアップを構築する

アプリケーションの状態を、まとまりのある復旧オブジェクトとしてバックアップします。最もシンプルな構成では、短時間のコピー中にJellyfinを停止します。ストレージスナップショットを使う場合は、復旧可能な同一時点ですべての状態コンポーネントを取得できる場合に限ります。データベースの移行によって安易なイメージのダウングレードが危険になることがあるため、各チェックポイントにJellyfinのバージョンを記録してください。

メディアは別の頻度で保護しましょう。購入したメディアは入手元から再取得できるかもしれませんが、家族の録画はそうはいかない場合があります。レプリケーション、オフラインコピー、オフサイトストレージを選ぶ前に、これらのサブセットを分類してください。保持する状態の世代数を決めるには、次の保持と復旧ウィンドウのガイドを参照してください。

少なくとも1つの使用可能なコピーは、稼働中のホストと接続ストレージの損失や破損を乗り越えられる場所に保管する必要があります。ミラープールはデバイス故障時の可用性を高めますが、同期された削除やデータベースの破損はすべてのミラーに及ぶ可能性があります。冗長化とバックアップは、異なる障害に対応するものです。

自動化の前にクリーンな復元をリハーサルする

チェックポイントの作成時と同じバージョンのJellyfinを使い、隔離されたマシン、VM、またはコンテナに復元します。実行時のIDと論理マウントを再現し、新しいサーバーを本番クライアントに公開せずに起動してから、管理者ログイン、ユーザー履歴、ライブラリの件数、アートワーク、Direct Playの項目を1つ、代表的なトランスコードを1つ確認します。

重要なのはダッシュボードが読み込まれることではありません。最近のTrueNASの移行事例では、アプリケーションの状態、チャートの世代、新しいコンテナのルートが衝突する可能性が示されています。旧インスタンスがまだ存在するうちにクリーンなリハーサルを行えば、こうした依存関係を明らかにできます。
  1. ソースのバージョン、実行時の識別情報、マウント構成、バックアップのチェックサムを記録します。
  2. クリーンな隔離環境のターゲットに状態を復元します。
  3. ユーザー、ライブラリ、メタデータ、代表的な再生を確認します。
  4. 1回再起動して、主要なチェックを繰り返します。
  5. 手順にかかる時間を計測し、手作業で必要だった依存項目をすべてランブックに反映します。

文書化されていないシークレット、パスの書き換え、本番ファイルの使用が必要なら、その訓練は失敗とします。この手順を手動で2回成功させてから、自動化に進みます。

ライブラリ名を変更せずに容量を拡張する

緊急に追われることなくデータをコピーして検証できるよう、早めに拡張のしきい値を決めます。使用可能なプール容量の約4分の3を継続的に使用している状態は、計画を立てるための目安であり、普遍的な法則ではありません。実際のトリガーは、データ取り込み速度、再構築時間、バックアップ所要時間、空き容量アラートの履歴に基づいて設定します。

可能であれば、既存の論理メディアパスの背後で容量を拡張します。新しいデバイスまたはプールを準備し、健全性と書き込み動作を検証します。最初の代表データセットは移動ではなくコピーし、件数またはハッシュ値を比較します。通常の書き込み先に新容量を加える前に、ライブラリのスキャンと再生をテストします。

拡張に新しいファイルシステム、ホスト、共有プロトコル、マウントパスも必要な場合は、変更を分けて行います。コンピューティング、ストレージ、バックアップのトポロジーを参考に、容量の拡大に伴って1台の箱を拡張するのではなく、役割を分離すべきか判断します。

トポロジー全体とその制約を検証する

設計全体をシステムとして運用しましょう。計画的なシャットダウン後のコールドスタート、依存要素が1つ使えない状態での起動、テストボリュームをアラートしきい値まで埋めること、状態チェックポイントの復元、拡張後のパスからのメディア読み取りを行います。どの処理が安全側に停止するか、何が劣化するか、どの処理にオペレーターの対応が必要かを記録します。

合計負荷、配線、電力、復旧時間が目標範囲内である限り、1台のホストに複数の役割を持たせましょう。測定した容量、メンテナンス、障害ドメインの制約が現れた場合に限り、メディアストレージ、バックアップ、復旧機能を分離します。マシンを増やすと、それ自体がネットワークやライフサイクルへの依存関係を生みます。

最終的なルールはシンプルです。安定した論理パスを維持し、再構築できない状態を個別に保護し、トポロジーを変更するたびに復旧を実証します。復元できない容量は、利用可能な容量とは言えません。

NASとサーバーのセットアップ

続きを読む

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.