Amazon EC2 Windows インスタンスの問題のトラブルシューティング - Amazon Elastic Compute Cloud

Amazon EC2 Windows インスタンスの問題のトラブルシューティング

次は、Amazon EC2 Windows インスタンスの問題の解決に役立つトラブルシューティングのヒントです。

EBS ボリュームが Windows Server 2016 および 2019 で初期化されない

Windows Server 2016 および 2019 用の Amazon マシンイメージ (AMI) から作成されたインスタンスでは、さまざまなスタートアップタスク (例: EBS ボリュームの初期化) に EC2Launch v1 エージェントが使用されます。デフォルトでは、EC2Launch v1 はセカンダリボリュームを初期化しません。ただし、これらのディスクを自動的に初期化するには、次のように EC2Launch v1 を設定します。

ドライブ文字をボリュームにマッピングする
  1. 設定するインスタンスに接続し、C:\ProgramData\Amazon\EC2-Windows\Launch\Config\DriveLetterMappingConfig.json ファイルをテキストエディタで開きます。

  2. ボリューム設定を次のように指定します。

    { "driveLetterMapping": [ { "volumeName": "sample volume", "driveLetter": "H" }] }
  3. 変更内容を保存し、ファイルを閉じます。

  4. Windows PowerShell を開き、次のコマンドを使用して、ディスクを初期化する EC2Launch v1 スクリプトを実行します。

    PS C:\> C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1

    インスタンスが起動するたびにディスクを初期化するには、-Schedule フラグを次のように追加します。

    PS C:\> C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1 -Schedule

    EC2Launch v1 エージェントは、initializeDisks.ps1 などのインスタンス初期化スクリプトを InitializeInstance.ps1 スクリプトと並行して実行できます。InitializeInstance.ps1 スクリプトでインスタンスを再起動する場合は、インスタンスのスタートアップ時に実行される他のスケジュールされたタスクが中断される可能性があります。コンフリクトが発生しないように、インスタンスの初期化が最初に完了したことを確認するために initializeDisks.ps1 スクリプトにロジックを追加することをお勧めします。

    注記

    EC2Launch スクリプトがボリュームを初期化しない場合は、ボリュームがオンラインとなっていることを確認します。ボリュームがオフラインの場合は、次のコマンドを実行してすべてのディスクをオンラインにします。

    PS C:\> Get-Disk | Where-Object IsOffline -Eq $True | Set-Disk -IsOffline $False

ディレクトリサービス復元モード (DSRM) で EC2 Windows インスタンスを起動する

Microsoft Active Directory を実行するインスタンスでシステム障害やその他の重要な問題が発生した場合、ディレクトリサービス復元モード (DSRM) と呼ばれる特殊なバージョンのセーフモードで起動することで、インスタンスをトラブルシューティングできます。DSRM では、Active Directory を修復または復元できます。

DSRM のドライバーサポート

DSRM を有効にしてインスタンスで起動する方法は、インスタンスが実行されているドライバーによって異なります。EC2 コンソールで、システムログからインスタンスのドライバーバージョンの詳細を表示できます。次の表に、DSRM でサポートされるドライバーを示します。

ドライバーのバージョン サポートされる DSRM 次のステップ
Citrix PV 5.9 いいえ バックアップからインスタンスを復元します。DSRM を有効にすることはできません。
AWS PV 7.2.0 いいえ このドライバーでは DSRM がサポートされていませんが、インスタンスからルートボリュームをデタッチして、ボリュームのスナップショットを取得するか AMI を作成し、同じアベイラビリティーゾーン内の別のインスタンスにセカンダリボリュームとしてアタッチできます。その後、DSRM を有効にすることができます (このセクションで説明します)。
AWS PV 7.2.2 以降 はい ルートボリュームのデタッチ、別のインスタンスへの接続、DSRM の有効化 (このセクションで説明しています)。
拡張ネットワーキング はい ルートボリュームのデタッチ、別のインスタンスへの接続、DSRM の有効化 (このセクションで説明しています)。

拡張ネットワーキングを有効にする方法については、「EC2 インスタンスで ENA による拡張ネットワーキングを有効にする」を参照してください。AWS PV ドライバーのアップグレードについては、「Windows インスタンスでの PV ドライバーのアップグレード」を参照してください。

DSRM で起動するインスタンスを設定する

オペレーティング システムを実行する前に、EC2 Windows インスタンスでネットワーク接続は行われません。このため、キーボードの F8 ボタンを押して起動オプションを選択することはできません。次のいずれかの手順を使用して、DSRM で EC2 Windows Server インスタンスを起動する必要があります。

Active Directory が破損していて、インスタンスがまだ実行されていることが疑われる場合、[System Configuration] ダイアログボックスまたはコマンドプロンプトを使用して、DSRM で起動するようインスタンスを設定できます。

[System Configuration] ダイアログボックスを使用して DSRM でオンラインインスタンスを起動するには
  1. [Run] ダイアログボックスで、「msconfig」と入力して Enter キーを押します。

  2. [Boot] タブを選択します。

  3. [Boot options] で、[Safe boot] を選択します。

  4. [Active Directory repair] を選択し、[OK] を選択します。サーバーを再起動するよう求められます。

コマンドラインを使用して DSRM でオンラインインスタンスを起動するには

コマンドプロンプトウィンドウから次のコマンドを実行します。

bcdedit /set safeboot dsrepair

インスタンスがオフラインで到達不可能な場合は、ルートボリュームをデタッチし、別のインスタンスにアタッチして DSRM モードを有効にする必要があります。

DSRM でオフラインインスタンスを起動するには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[インスタンス] を選択します。

  3. 影響を受けるインスタンスを探して選択します。[Instance state (インスタンスの状態)]、[Stop instance (インスタンスの停止)] の順に選択します。

  4. [Launch instances (インスタンスの起動)] を選択し、影響のあるインスタンスと同じアベイラビリティーゾーンに一時インスタンスを作成します。別のバージョンの Windows を使用するインスタンスタイプを選択します。例えば、インスタンスが Windows Server 2016 である場合、Windows Server 2019 インスタンスを選択します。

    重要

    影響のあるインスタンスと同じアベイラビリティーゾーンにインスタンスを作成しない場合、影響のあるインスタンスのルートボリュームを新しいインスタンスにアタッチできません。

  5. ナビゲーションペインの [Volumes] を選択します。

  6. 影響のあるインスタンスのルートボリュームを見つけます。ボリュームをデタッチし、先ほど作成した一時インスタンスにアタッチします。デフォルトのデバイス名 (xvdf) でアタッチしてください。

  7. リモートデスクトップを使用して一時インスタンスに接続したら、Disk Management ユーティリティを使用してボリュームを有効にします

  8. コマンドプロンプトを開き、次のコマンドを入力します。D を、アタッチしたセカンダリボリュームの実際のドライブ文字と置き換えます。

    bcdedit /store D:\Boot\BCD /set {default} safeboot dsrepair
  9. Disk Management ユーティリティで、先ほどアタッチしたドライブを選択し、右クリックコンテキストメニューを開いて、[オフライン] を選択します。

  10. EC2 コンソールで、影響のあるボリュームを一時インスタンスからデタッチし、/dev/sda1 というデバイス名で元のインスタンスに再アタッチします。ボリュームをルートボリュームとして指定するには、このデバイス名を指定する必要があります。

  11. インスタンスを起動します。

  12. インスタンスが EC2 コンソールでヘルスチェックに合格したら、リモートデスクトップを使用してインスタンスに接続し、DSRM モードで起動することを確認します。

  13. (オプション) この手順で作成した一時インスタンスを削除するか停止します。

インスタンスのネットワーク接続が失われる、または、スケジュールされたタスクが予定通りに実行されない

インスタンスを再起動するとネットワーク接続が失われる場合は、インスタンスの時刻設定が間違っている可能性があります。

デフォルトで、Windows インスタンスは協定世界時 (UTC) を使用します。別のタイムゾーンにインスタンスの時刻を設定して再起動すると、時刻がずれて、インスタンスの IP アドレスが一時的に失われます。最終的にインスタンスのネットワーク接続は復旧されますが、これには数時間かかることがあります。インスタンスがネットワーク接続を復旧するのにかかる時間は、UTC と他のタイムゾーンとの時差に左右されます。

時刻に関するこの同じ問題によって、スケジュールされたタスクが予定通りに実行されないことがあります。この場合、インスタンスの時刻が正しくないため、スケジュールされたタスクは予定通りに実行されません。

UTC 以外のタイムゾーンを永続的に使用するには、RealTimeIsUniversal レジストリキーを設定する必要があります。このキーがない場合、インスタンスは再起動後、UTC を使用します。

ネットワーク接続を失う原因となる時刻の問題を解決するには
  1. 推奨 PV ドライバーを実行していることを確認します。詳細については、「EC2 Windows インスタンスでの PV ドライバーのアップグレード」を参照してください。

  2. 次のレジストリキーが存在し、1 に設定されていることを確認します: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal

コンソールの出力を取得できない

Windows インスタンスの場合は、インスタンスコンソールに Windows 起動プロセス中に実行されたタスクの出力が表示されます。Windows が正常に起動した場合、記録される最後のメッセージは Windows is Ready to use です。コンソールでイベントログメッセージを表示することもできますが、この機能は Windows のバージョンによってはデフォルトで有効になっていない場合があります。詳細については、「Amazon EC2 Windows インスタンス上の Windows 起動エージェント」を参照してください。

Amazon EC2 コンソールを使用してインスタンスのコンソール出力を取得するには、インスタンスを選択してから、[アクション]、[モニタリングおよびトラブルシューティング]、[システムログの取得] の順に選択します。コマンドラインを使用してコンソール出力を取得するには、get-console-output (AWS CLI) コマンド、または Get-EC2ConsoleOutput (AWS Tools for Windows PowerShell) コマンドを使用します。

Windows Server 2012 R2 以前を実行しているインスタンスで、コンソール出力が空の場合は、設定ファイルが正しく設定されていない、Windows が正しく起動しなかったなど、EC2Config サービスの問題を示している可能性があります。問題を修正するには、EC2Config の最新バージョンをダウンロードしてインストールします。詳細については、「EC2Config の最新バージョンのインストール」を参照してください。

Windows Server 2012 R2 をネットワークで使用できない

ネットワークで使用できない Windows Server 2012 R2 インスタンスのトラブルシューティングについては、「Windows Server 2012 R2 でインスタンスの再起動後にネットワークおよびストレージとの接続が失われる」を参照してください。

ディスク署名の衝突

ディスク署名の衝突をチェックして解決するには、EC2Rescue for Windows Server を使用します。または、次の手順を実行して、ディスク署名の問題を手動で解決できます。

警告

以下の手順では、レジストリエディタを使用して Windows レジストリを編集する方法を説明します。Windows レジストリに慣れていない場合や、レジストリエディターを使用して安全に変更する方法については、「レジストリを構成する」を参照してください。

  1. コマンドプロンプトを開き、「regedit.exe」と入力して、[Enter] を押します。

  2. [レジストリエディタ] で、コンテキストメニュー (右クリック) から [HKEY_LOCAL_MACHINE] を選択し、[検索] を選択します。

  3. [Windows Boot Manager] を入力して、[次を検索] を選択します。

  4. 11000001 というキーを選択します。このキーは、前の手順で検索したキーの兄弟です。

  5. 右のペインで [Element] を選択し、コンテキストメニュー (右クリック) から[変更] を選択します。

  6. データのオフセット 0x38 で 4 バイトのディスク署名を見つけます。これは、ブート構成データベース署名 (BCD) です。バイトの順序を逆にしてディスク署名を作成し、書き留めます。例えば、次のデータで表されるディスク署名は E9EB3AA5 です。

    ... 0030 00 00 00 00 01 00 00 00 0038 A5 3A EB E9 00 00 00 00 0040 00 00 00 00 00 00 00 00 ...
  7. コマンドプロンプトウィンドウで、次のコマンドを実行して Microsoft DiskPart を起動します。

    diskpart
  8. select disk DiskPart コマンドを実行して、ディスクシグネチャが衝突しているボリュームのディスク番号を指定します。

    ヒント

    ディスクシグネチャが衝突しているボリュームのディスク番号をチェックするには、[ディスク管理] ユーティリティを使用します。コマンドプロンプトを開き、「compmgmt.msc」と入力して、[Enter] を押します。左側のナビゲーションパネルで、[ディスク管理] をダブルクリックします。[ディスク管理] ユーティリティで、ディスクシグネチャが衝突しているオフラインボリュームのディスク番号をチェックします。

    DISKPART> select disk 1 Disk 1 is now the selected disk.
  9. 次の DiskPart コマンドを実行して、ディスク署名を取得します。

    DISKPART> uniqueid disk Disk ID: 0C764FA8
  10. 前の手順で表示されたディスクシグネチャが以前に書き留めたディスクシグネチャと一致しない場合は、次の DiskPart コマンドを使用してディスクシグネチャを変更し、一致させます。

    DISKPART> uniqueid disk id=E9EB3AA5