# バックアップからの復元

以前に作成したバックアップ スナップショットを使用して、 GitHub Enterprise Server インスタンスを復元します。

GitHub Enterprise Server インスタンスは、コマンド ラインを使用してバックアップから復元できます。 バックアップ サービスでは、構成やユーザー データを含む完全なインスタンスの復元がサポートされています。

> \[!WARNING] バックアップから復元すると、インスタンスの**既存データがすべて上書き**されます。 この操作を元に戻すことはできません。

## スナップショット バージョンの要件

復元できるスナップショットは、ターゲット インスタンスのバージョンより最大 2 つ前の機能バージョンまでのみです。

例えば次が挙げられます。

* バージョン 3.17 のスナップショットは、3.17.x、3.18.x、または 3.19.x を実行しているターゲットに復元できます。
* 3.17 のスナップショットを 3.20 に復元することは、2 バージョンより後であるため、できません。

また、新しいバージョンから古いバージョンに復元することもできません。 たとえば、3.18 スナップショットを 3.17 インスタンスに復元しようとすると、失敗します、次のように`Error: Snapshot can not be restored to an older release of GitHub Enterprise Server.`

## \[前提条件]

バックアップを復元する前に:

1. ターゲット インスタンスで**メンテナンス モードを有効にします**。 「[メンテナンスモードの有効化とスケジューリング](/ja/enterprise-server@3.18/admin/configuration/configuring-your-enterprise/enabling-and-scheduling-maintenance-mode)」を参照してください。
2. スナップショットが格納されているバックアップ ストレージに**アクセスできることを確認します**。
3. **干渉するサービスを一時的に停止する**: 高可用性 (HA) をお使いの場合、レプリケーションが停止されていることを確認します。
4. \*\*
   GitHub Actionsの準備\*\*— 有効になっている場合は、ターゲット インスタンスが正しい外部ストレージで構成されていることを確認します。 詳しくは、「[GitHub Actionsを有効にした状態での復元](/ja/enterprise-server@3.18/admin/backing-up-and-restoring-your-instance/restoring-with-github-actions-enabled)」をご覧ください。

## 復元操作の開始

スナップショットから復元するには:

1. `admin` ユーザーとしてターゲット インスタンスに SSH で接続します。

2. 次のいずれかのコマンドを実行します。

   * 最新のスナップショットを復元します。

     ```shell
     ghe-restore
     ```

   * 特定のスナップショットを復元します。
     `<SNAPSHOT_TIMESTAMP>` を復元するスナップショットのタイムスタンプ (例: `YYYYMMDDTHHMMSS`) に置き換えます。

     ```shell
     ghe-restore -s <SNAPSHOT_TIMESTAMP>
     ```

   * (省略可能) 構成、証明書、ライセンス データを強制的に上書きします。

     ```shell
     ghe-restore -c          # Latest snapshot
     ghe-restore -s <SNAPSHOT_TIMESTAMP> -c  # Specific snapshot
     ```

3. \*\*
   \[Management Console]で最終処理を行います。\*\*

   * すべての構成設定 (ネットワーク、認証、TLS など) を確認します。
   * **\[Save settings]** をクリックしてそれらを適用し、サービスを開始します。
   * このステップが完了するまで、インスタンスは完全には動作しません。

4. **復元されたインスタンスを検証**して、すべてが意図したとおりに動作していることを確認します。

5. **HA をお使いの場合**は、最初にスタンドアロン インスタンスでの復元を済ませます。 次に、HA を再構成します。

   * 同期の問題 (`ghe-repl-status` での古い UUID など) が発生する場合は、`ghe-repl-teardown` を実行します。
   * ヘルプについては、 GitHub のサポートにお問い合わせください。

6. 復元によって以前のトークンが無効になったので、**セルフホステッド GitHub Actions ランナーを再登録**します。

## スナップショットのローテーションと保持

スナップショットは、データ保持の設定に基づいて自動的に除去されます。

* 最新の n 個のスナップショットのみが保持されます (構成に応じて)。
* バックアップが成功するたびに、古いスナップショットが削除されます。
* スナップショットには、簡単に参照できるように、タイムスタンプ (`YYYYMMDDTHHMMSS`) を使って名前が付けられます。
* 変更されていないファイルについては、完全復元の機能を維持しながら効率的に格納するため、ハード リンクが使われます。

## 復元失敗のトラブルシューティング

復元操作が失敗する場合は、次のことを調べます。

* **バックアップの完全性**: スナップショットが中断されたり破損したりしていないことを確認します。
* **ストレージのアクセス**: インスタンスでバックアップ ボリュームのマウントと読み取りが可能であることを確認します。
* **バージョンの不一致**: スナップショットのバージョンとターゲット インスタンスの間に互換性があることを確認します。
* **ログ**: `/var/log/github-backup/restore-verbose-[timestamp].log` でエラーを確認します。

\[Management Console]に一般的なエラーが表示された場合は、インスタンスに SSH 接続して詳細なログにアクセスします。