適用対象: ✔️ Windows VM
この記事では、Windows が起動に失敗し、状態またはエラー コードの #0xC0000017 ("Status No Memory" とも呼ばれます) が表示される問題を解決する手順について説明します。
症状
ブート診断を使用して仮想マシン (VM) のスクリーンショットを表示したときに、スクリーンショットにエラー コード 0xC0000017
が表示されていることがわかります。 実行している Windows のバージョンに応じて、Windows ブート マネージャーまたは回復画面にこのコードが表示されることがあります。
Windows ブート マネージャー
回復画面
原因
オペレーティング システムのディスクがいっぱいであるか、断片化されているか、オペレーティング システム (OS) がメモリまたはページ ファイル、またはその両方にアクセスできない。
ソリューション
プロセスの概要
ヒント
VM の最新のバックアップがある場合は、そのバックアップから VM の復元を試行して、起動の問題を修正することができます。
- 修復 VM を作成してアクセスする
- ディスクの空き領域を増やす
- BCD ストアから不良メモリを削除する
- ページ ファイルを既定の場所に復元する
- シリアル コンソールとメモリ ダンプの収集を有効にする
- VM を再構築する
Note
このエラーが発生する場合、ゲスト OS は動作しなくなります。 この問題を解決するには、オフライン モードでトラブルシューティングを行います。
修復 VM を作成してアクセスする
- VM 修復コマンドの手順 1 から 3 を使用して、修復 VM を準備します。
- リモート デスクトップ接続を使用し、修復 VM に接続します。
第 2 世代 VM の場合は、拡張ファームウェア インターフェイス (EFI) パーティションに文字を割り当てます
第 2 世代 VM を使用している場合、アタッチされているディスクの EFI パーティションに文字が割り当てられていない可能性があります。 このトラブルシューティング ガイドに進む前に、次の手順に従って、このパーティションに文字を割り当てる必要があります。
Windows Search で「
diskmgmt
」と入力し、ディスクの管理コンソールを開きます。修復 VM にアタッチされている破損したディスクを特定します。 通常、このディスクはコンソールの最後に表示され、最も大きな数値になっています。
そのディスクに、 EFI システム パーティションを保持するパーティションがある場合に注意してください。このパーティションには文字値も割り当てられません (ドライブ F: など)。 すべてのパーティションが割り当てられている場合は、ディスクの空き領域を増やす手順に進んでかまいません。 それ以外の場合は、引き続きこのディスクに文字を割り当てます。
管理者として管理者特権でのコマンド プロンプトを開き、「
diskpart
」と入力して、DiskPart ツールを起動します。次のコマンドを入力します。
list disk sel disk <NUMBER OF THE ATTACHED DISK> list partition sel partition <NUMBER OF THE SYSTEM (EFI) PARTION> assign
- コマンドの
<NUMBER OF THE ATTACHED DISK>
を、手順 2. で特定したディスク番号に置き換えます。 - コマンドの
<NUMBER OF THE SYSTEM PARTION>
を、EFI システム パーティションのパーティション番号に置き換えます。 このパーティションには文字がまだ割り当てられていませんが、種類が System で、サイズが約 100 MB である必要があります。
Note
ディスクの管理コンソールのパーティションと、DiskPart ツールに表示されるものを比較すると、アタッチされているディスクの EFI システム パーティションに対応するパーティション番号を確認するのに役立ちます。
- コマンドの
コマンド プロンプト ウィンドウを閉じます。
ディスクの空き領域を増やす
破損したディスクが修復 VM にアタッチされたら、そのディスクの OS に、正しく機能するための十分な空き領域があることを確認する必要があります。
アタッチされているディスクのドライブを右クリックし、[プロパティ] を選択して、ディスクがいっぱいになっていないかどうかを確認します。
ディスクの空き領域が 300 MB 未満の場合は、PowerShell を使用して最大 1 TB まで拡張します。
ディスク サイズが 1 TB になったら、ディスク クリーンアップを実行する必要があります。 ディスク クリーンアップ ツールを使用して、空き領域を増やすことができます。
管理者特権でのコマンド プロンプト (管理者として実行) インスタンスを開き、ドライブのデフラグを実行します。
defrag <LETTER ASSIGNED TO THE OS DISK>: /u /x /g
- 断片化のレベルによっては、デフラグに数時間かかることがあります。
- コマンドで、
<LETTER ASSIGNED TO THE OS DISK>
を OS ディスクの文字 (ドライブ F: など) に置き換えます。
ブート構成データ (BCD) ストアから不良メモリを削除する
管理者特権でのコマンド プロンプト (管理者として実行) を開きます。
次のコマンドを使用して、ブート構成ファイルに対して無効なメモリ フラグのクエリを実行します。
bcdedit /store <LETTER ASSIGNED TO THE OS DISK>:\boot\bcd /enum {badmemory}
- コマンドで、
<LETTER ASSIGNED TO THE OS DISK>
を OS ディスクの文字 (ドライブ F: など) に置き換えます。
- コマンドで、
クエリで不良メモリ ブロックが示されない場合は、次のタスクに進んでください。 それ以外の場合は、手順 4. に進みます。
不良メモリ ブロックが特定された場合は、これらのブロックが ramdisk の作成の妨げとなっているので、次のコマンドを使用して削除する必要があります。
bcdedit /store <LETTER ASSIGNED TO THE OS DISK>:\boot\bcd /deletevalue {badmemory} badmemorylist
- コマンドで、
<LETTER ASSIGNED TO THE OS DISK>
を OS ディスクの文字 (ドライブ F: など) に置き換えます。
- コマンドで、
ページ ファイルを既定の場所に復元する
ページ ファイルには、オーバーフロー/バックアップの形式として、コンピューターのランダム アクセス メモリ (RAM) で保持できないデータが格納されます。 Azure の既定の場所である一時ドライブではなく、VHD でこのファイルがホストされている可能性があります。 その場合、ファイルにアクセスできない可能性があるため、既定の場所に復元する必要があります。
手順を実行する前に、正常なディスクに \windows\system32\config フォルダーのコピーを作成してください。 この手順により、不要な変更を元に戻すことができるようになります。 重要なシステム ファイルを操作するため、この予防措置を強くお勧めします。
Windows Search で「regedit」と入力し、レジストリ エディター アプリケーションを開きます。
レジストリ エディターで、キー HKEY_LOCAL_MACHINE を強調表示し、メニューから File > Load Hive... を選択します。
[ハイブの読み込み] ダイアログで、\windows\system32\config\SYSTEM を選択し、[開く] をクリックします。
- 名前の入力を求められたら、「BROKENSYSTEM」と入力します。 この名前は、トラブルシューティング中に影響を受けるハイブを区別するのに役立ちます。
- [HKEY_LOCAL_MACHINE] を展開して、追加した新しい BROKENSYSTEM キーを表示します。
レジストリ エディターを使用して、マシンの起動元の ControlSet を特定します。
- BROKENSYSTEM >> Select HKEY_LOCAL_MACHINE >>に移動します。
- 表示されたキーで、Current のデータ値を確認します。 たとえば、この値が 1 または 0x00000001 (1) の場合、コントロール セットは ControlSet001 になります。
ページ ファイルの作成が構成されている場所を確認します。
- HKEY_LOCAL_MACHINE\BROKENSYSTEM で、手順 4. で確認した ControlSet 番号 (ControlSet001 など) に一致するディレクトリを展開します。
- Control >> Session Manager >> Memory Management に移動しExistingPageFiles キーの場所をメモします。
- このキーは、Azure の既定の場所である一時ドライブにある必要があります。 データ ディスク ドライブや OS ドライブなど、VHD が存在せず、別の場所にある場合は、削除する必要があります。
- エクスプローラーでその場所を参照し、pagefile.sys ファイルを削除します。
シリアル コンソールとメモリ ダンプの収集を有効にする
推奨: VM を再構築する前に、次の手順に従ってシリアル コンソールとメモリ ダンプの収集を有効にします。
管理者として管理者特権でのコマンド プロンプト セッションを開きます。
/ems および /emssettings オプションを使用して、次の BCDEdit コマンドを実行します。
シリアル コンソールを有効にします。
bcdedit /store <volume-letter-containing-the-bcd-folder>:\boot\bcd /ems {<boot-loader-identifier>} ON bcdedit /store <volume-letter-containing-the-bcd-folder>:\boot\bcd /emssettings EMSPORT:1 EMSBAUDRATE:115200
OS ディスクの空き領域が、VM のメモリ サイズ (RAM) よりも大きいことを確認します。
OS ディスクに十分な領域がない場合は、メモリ ダンプ ファイルが作成される場所を変更し、その場所を、十分な空き領域がある VM に接続されているデータ ディスクを参照します。 場所を変更するには、次のコマンドで、
%SystemRoot%
をデータ ディスクのドライブ文字 (F:
など) に置き換えます。OS ダンプ ファイルを有効にするには、次の load、 add、および unload コマンドを実行して、 reg ツールを使用して推奨される構成を実装します。
壊れた OS ディスクからレジストリ ハイブを読み込みます。
reg load HKLM\<broken-system> <volume-letter-of-broken-os-disk>:\windows\system32\config\SYSTEM
ControlSet001 での有効化:
reg add "HKLM\<broken-system>\ControlSet001\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f reg add "HKLM\<broken-system>\ControlSet001\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f reg add "HKLM\<broken-system>\ControlSet001\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f
ControlSet002 での有効化:
reg add "HKLM\<broken-system>\ControlSet002\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f reg add "HKLM\<broken-system>\ControlSet002\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f reg add "HKLM\<broken-system>\ControlSet002\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f
壊れた OS ディスクをアンロードします。
reg unload HKLM\<broken-system>
VM を再構築する
VM 修復コマンドの手順 5 を使用して、VM を再構築します。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。