Windows Updateが何度も失敗するので調べてみると、回復パーティションの更新でエラーが発生していました。エラーの原因は回復パーティションの容量不足です。
この記事では最近のWindows 11/10での回復パーティションの状況とエラーに対処するための手順について説明します。
概要
Windows 11/10において累積更新プログラムの適用を避けることはできません。もちろん非公式アプリやシステム設定を書き換えることで回避はできますが、セキュリティリスクを考えるとやめるべきです。
その累積更新プログラムですが様々な理由で適用に失敗する場合があります。この記事では回復パーティションの容量が不足しているにもかかわらず、自動拡張が行われないことでWindows Updateが失敗するのを回避する手段を説明しています。
ただし、動作しているWindows環境に対する操作のため、間違えると動作している環境を壊したりユーザーデータを消してしまう危険性があります。実施する場合は入力する値を間違えないように十分注意してください。
なお、Windows 11/10の機能だけでは回復パーティションの拡張はできても縮小はできません。縮小する場合はパーティション操作ソフトを使う必要があります。詳しくはこちらの記事を参考にしてください。
Windows 回復環境サービスが失敗しました
Windows 11に9月の累積更新プログラムを適用しようとしたところ、エラーが発生して適用に失敗しました。
何度再試行してもエラーは解消されません。エラーコードを検索して回避策を試してみても効果はありませんでした。何かエラーの手掛かりはないかとシステムログを確認してみました。
システムログは「スタート」ボタンを右クリックするか、[Win]+[X]キーを押すことで表示されるメニューから「イベントビューアー」をクリックすることで見ることができます。
気になる項目がありました。「Windows 回復環境サービスが失敗しました。」という項目です。
調べてみるとこんな記事がありました。
Microsoftから公開されたWindows回復環境に関する記事で、Windows回復環境は累積更新プログラムの適用時に更新されるが、容量が不足している場合に更新に失敗する場合があるそうです。そのため手動で容量を変更する手順が公開されたということです。
Windows 回復環境サービスとは
Windows 11/10には起動できなくなったり障害が発生した場合に、回復作業を行うため最低限の環境だけを揃えたWindows回復環境(Windows Recovery Environment、通称WinRE)がインストールされています。このWinREがインストールされている場所が回復パーティションです。
これはMicrosoftの標準的な構成で、パソコンメーカーが独自のソフトを使って別の回復環境をインストールしている場合もあります。両方存在することは無く、どちらか一方だけがインストールされています。
ちなみにWinREと似た名称のWinPEというものがあります。WinPEはWindowsプリインストール環境(Windows Preinstallation Environment)というWindowsのインストールに使われるものです。WinREはWinPEに必要なオプションモジュールを追加してカスタマイズしたものです。
回復パーティションは必要か
ではWindows 回復環境がインストールされている回復パーティションが、必要かどうかは疑問があります。
Windows 11/10が立ち上がらなくなるような障害が発生した場合に、自分だけで修復できるような人は極めて少ないでしょう。企業のサポートサービスに依頼してもまず対応してくれません。リモートサポートができませんので出張料を取られて「直らないので買い替えた方がよい」と新しいパソコンを買わされることでしょう。
Windows 11/10をアップデートやアップグレードすると回復パーティションが増殖するなどの問題がありましたが、SSDが安くなった現状では数百MB増えたところで問題とはなりません。
回復パーティションが何かしらの不具合で消えてしまったり、操作ミスで削除してしまっても、自分では回復できないし、企業のサポートも期待できないなら、Windows 回復環境がインストールされている回復パーティションは必要ありません。
ただし、回復パーティションの問題でWindows Updateが失敗する状況は、無視できません。Windows Updateが失敗するということは、セキュリティリスクが増すということです。
最近の回復パーティションに関わる状況
今回、回復パーティションの問題が発生したので、「ディスクの管理」で見てみるとおかしなことが起きていました。Windows 11をクリーンインストールしたときは、こちらの記事で説明したツールで回復パーティションのサイズを1.00GBにしたのですが
1.15GBに増えていました。
調べてみるとこちらにWindows 回復環境についての詳しい説明がありました。
その中にこのような記述があります。
- 既存の Windows RE パーティションが Windows パーティションの直後に配置されている場合は、Windows パーティションが縮小され、Windows RE パーティションに領域が追加されます。 新しい Windows RE イメージは、拡大された Windows RE パーティションにインストールされます。
- 既存の Windows RE パーティションが Windows パーティションの直後に配置されていない場合は、Windows パーティションが縮小され、新しい Windows RE パーティションが作成されます。 新しい Windows RE イメージは、この新しい Windows RE パーティションにインストールされます。 既存の Windows RE パーティションは孤立します。
2番目の記述はこちらで説明した回復パーティションの増殖の動作です。
問題は1番目です。回復パーティションが不足する場合は、Windowsパーティションを縮小して回復パーティションを拡大するとのことです。
1.00GBで確保したはずの回復パーティションが1.15GBに増えていた理由は解りました。Microsoftが発表の情報では2023年6月からWindows 回復環境の更新は実施されているようですが、それなら9月の更新で実施されなかったのは何故かという疑問があります。
Windows 11 バージョン21H2からWindows 11 バージョン22H2への大型アップデートの時しか、回復パーティションのサイズの調整が行われないと考えると筋は通ります。しかし、その時にはまだWindows 回復環境の更新は行われていなかった可能性があります。
そのため、何故、回復パーティションの拡張が行われなかったのかは謎のままです。
回復パーティションの使用量の確認
どうして回復パーティションの自動拡張が行われなかったのかは分かりませんが、不足してエラーが発生している状況は対策しなければなりません。
Windows回復環境の説明にもあるように実体は「WinRE.wim」というファイルです。Windows 11/10をインストールした直後は、「C:\Windows\System32\Recovery」にあるらしいのですが、どこかに移されて最新版はどこにあるか分かりません。
「C:\$WinREAgent」という非表示のフォルダーがある場合は「C:\$WinREAgent\Scratch」にある「update.wim」が最新版のようです。
「WinRE.wim」は更新プログラムや接続されているデバイスのドライバーも追加されるため、徐々に増えていきます。
「WinRE.wim」から作られたWindows回復環境が、どの程度の容量になっているかは調べることができます。
「設定」アプリの左側で「システム」を選択して右側で「ストレージ」をクリックします。
スクロールさせて「ストレージの詳細設定」をクリックして展開させます。
「ディスクとボリューム」をクリックします。
「Microsoft 回復パーティション」とある部分の「プロパティ」をクリックします。
サイズという部分で現状の回復パーティションのサイズと使用済みのサイズを確認できます。
こちらのパソコンでは1.00GBを確保していますが、既に944MBも使用されています。
ちなみにWindows 11/10をクリーンインストールした場合に、確保される回復パーティションのサイズと場所は以下の通りです。
現状の回復パーティションの使用量と今後のアップデートで更に増加する使用量が、現状確保している容量で不足する可能性があるなら、手動での回復パーティションの拡張を考えた方がよいでしょう。
Windows | バージョン | サイズ | 配置場所 |
---|---|---|---|
Windows 11 | 23H2 | 794MB | 最後 |
Windows 11 | 22H2 | 668MB | 最後 |
Windows 11 | 21H2 | 646MB | 最後 |
Windows 10 | 22H2 | 572MB | 最後 |
Windows 10 | 21H2 | 552MB | 最後 |
Windows 10 | 2004~21H1 | 550MB | 最後 |
Windows 10 | 1903~1909 | 530MB | 先頭 |
Windows 10 | 1709~1809 | 500MB | 先頭 |
Windows 10 | 1507~1703 | 450MB | 先頭 |
Microsoftからの提案
Microsoftは回復パーティションが不足するなら手動で拡張するように情報を公開しました。
機械翻訳のためコマンドまで翻訳されているので、実施する場合は英語の原文を見てください。
この手順通りに実行すれば250MB拡張することができます。
250MBではなく100MB拡張するにはどこを変更したらよいのかとか、データパーティションも確保している場合はどうするのかとか、自分の環境に合わせた変更は実行しているコマンドを理解していなければできません。
そもそも、これらのコマンドを間違えずに入力するのも大変です。
そして「パーティションの削除」というコマンドを実行するため、間違えると大変なことになる可能性もあります。
回復パーティションを拡張するスクリプト
できるだけ簡単に、そして各人の環境に合わせてパラメーターを変更できるような64ビット版専用のスクリプトを作りました。
値の入力を間違えると大変なことになる危険性は変わりませんが、コマンドの入力ミスは減らせます。
安全対策
動作しているパソコンのパーティション操作には危険が伴います。そのためスクリプトには可能な安全対策を施しています。
パーティション構成にはいくつかの種類があります。
これはWindows 10 バージョン1909までのGPTディスクでのパーティション構成です。メーカー製パソコンでは違う場合もありますが、クリーンインストールするとこの構成になります。この構成では回復パーティションを拡張することができませんので、今回のスクリプトでは対応していません。
回復 | システム | 予約 | Windows |
また、こちらはMBRディスクでのパーティション構成です。この構成は基本的にはWindows 10の32ビット版でしか使われない構成ですが、今回のスクリプトでは対応していません。
システム | Windows | 回復 |
こちらは、Windows 10 バージョン2004以降及びWindows 11のGPTディスクでのパーティション構成です。
1:システム | 2:予約 | 3:Windows | 4:回復 |
スクリプトでは回復パーティションのパーティション番号を指定する必要があり、指定されたパーティションは一度削除されます。パーティション番号は1から始まるので、この場合の回復パーティションの番号は「4」と指定することになります。そのためスクリプトでは4以上しか指定できないようにしています。
「システム」、「Windows」パーティションはWindowsが起動中は削除できないようになっていますが、4以上しか指定できないようにすることで「予約」も指定の間違いで削除されないようにしています。
問題はデータ・パーティションを分けている場合です。その場合はこれら2つの構成となりますが、データ・パーティションはパーティション番号が4以上となります。
1:システム | 2:予約 | 3:Windows | 4:データ | 5:回復 |
1:システム | 2:予約 | 3:Windows | 4:回復 | 5:データ |
スクリプトではデータ・パーティションと回復パーティションの区別がつかないため、データ・パーティションを分けている場合はパーティション番号の指定には十分注意してください。
なお、スクリプトの動作確認については実際に稼働しているパソコンや仮想PCの5台で確認しています。
注意事項
Windows 11/10をクリーンインストールする場合にパーティションを切り直すスクリプトとは違い、今回のスクリプトは、Windows 回復環境を拡張しても稼働中のWindows 11/10に影響を与えてはなりません。
そのため、次の各項目をよく読んで実行してください。
- 32ビット版Windows 10には対応していません
- 64ビット版Windows 11/10ではGPTディスクのはずですが、MBRディスクの場合は対応していません
- 回復パーティションがディスクの先頭にある場合は対応していません
- スクリプトを実行する前に、消えては困るデータは必ずバックアップしてください
- ドライブが暗号化されている場合は一時的に暗号化を解除する必要があります。必要な場合は拡張後に再度暗号化してください
- 入力する値の意味が分からない場合は実行しないでください
- 値の入力は間違えないよう十分に確認してください
- 回復パーティションの直前のパーティションは縮小するため、十分な空き容量が必要です
- スクリプトの実行による障害は保証できません、自己責任で実行してください
自分には難しそうと思う場合は、分かる人に頼むか、実行を諦めてください。
スクリプトファイルのダウンロード
こちらからZIPファイルをダウンロードしてください。
ダウンロードした「expand-recovery-partition.zip」のプロパティで「セキュリティ」部分の「許可する」にチェックを入れて「適用」をクリックします。
「セキュリティ」部分が消えたことを確認して「OK」をクリックしてプロパティを閉じます。
「expand-recovery-partition.zip」の中の「expand-recovery-partition.bat」を任意のフォルダーに展開します。
実行手順
「設定」アプリを起動して左側で「プライバシーとセキュリティ」を選択して右側で「デバイスの暗号化」をクリックします。「デバイスの暗号化」が「オン」の場合は「オフ」にして、デバイスの暗号化を無効化して、暗号化解除が完了するのを待ちます。
「スタート」を右クリックするか、[Win]+[X]キーを押して表示されたメニューから「ターミナル(管理者)」をクリックします。
カレントドライブ、カレントフォルダーを「expand-recovery-partition.bat」を展開したドライブ、フォルダーに変更して、
- .\expand-recovery-partition.bat [enter]
でスクリプトを実行します。[enter]は[enter]キーを押すことを意味します。「.\」から入力しなくても、expand-recovery-partition.batの最初の数文字と[Tab]で自動補完してくれます。
ターミナル(管理者)はWindows PowerShellで実行されるため、カレントフォルダーにファイルがあっても「.\」を付けないと実行されません。cmd [enter]でコマンドプロンプトに切り替えれば従来の感覚で操作できます。
実行すると注意事項が表示されスクリプトが止まるので任意のキーを押して進めます。
スクリプトを途中で止める場合は[Ctrl]+[C]キーを押して画面の質問に[Y]キーで答えて止めます。
順番に必要な値を問い合わせてきますので、画面に表示された情報を見て入力していきます。
すべての値を入力すると一覧で表示されます。
内容に間違いが無ければ、スクリプトを進めて回復パーティションの拡張を実行します。
スクリプトの実行が完了したら、「ディスクの管理」でパーティションの状態を確認してください。
この時、回復パーティションがあるべきパーティションに「回復パーティション」と表示が無いなら失敗しています。下記の「暗号化されたドライブで実行してしまった場合」を参照してください。
暗号化を一時的に解除していて、やはり暗号化は必要と考える場合は「設定」アプリを起動して、左側で「プライバシーとセキュリティ」を選択して右側で「デバイスの暗号化」をクリックしてから、「デバイスの暗号化」を「オン」にします。
実行例
実行例を示します。
拡張前のパーティションの状態です。
「C:\tmp」に「expand-recovery-partition.bat」がある前提で実行しています。
入力する部分を「黄色の下線」、参照する部分を「黄色の枠線」で示しています。
拡張後のパーティションの状態です。
暗号化されたドライブで実行してしまった場合
暗号化されたドライブでスクリプトを実行した場合、実行途中でエラーとなり、回復パーティションが正常に作成されません。
その場合は、「設定」アプリを起動して左側で「プライバシーとセキュリティ」を選択して右側で「デバイスの暗号化」をクリックします。「デバイスの暗号化」が「オン」の場合は「オフ」にして、デバイスの暗号化を無効化して、暗号化解除が完了するのを待ちます。
暗号化が解除されたらスクリプトを再度実行してください。回復パーティションにするパーティションは既に拡張されているため、1MBでもよいので更に拡張するように値を入力して実行してください。
暗号化されたドライブにスクリプトを実行すると、diskpartコマンドでのIDの設定と属性の設定に失敗します。そのため回復パーティションの有効化にも失敗します。失敗したコマンドだけ暗号化解除後に実行すればよいのですが、IDと属性は打ち込むのが大変ですので、スクリプトを再度実行した方が確実です。
補足
この記事で公開したスクリプト(バッチファイル)は必要に迫られて、大急ぎで作ったものですので最低限の機能しかありません。最終的にはパーティション分割スクリプトに統合するつもりです。
動作確認は数台のパソコンで行っているので大丈夫だと思いますが、環境によっては不具合が発生するかもしれません。その場合はコメントで教えて頂けると助かります。
スクリプトを改良する場合はメモ帳で構わないのですが、保存する場合のエンコードは必ず「ANSI」にしてください。Windows 11/10ではUTF-8を使っていますが、コマンドプロンプトはMS-DOS時代の資産を引きずっているため、Shift-JISでないと日本語が化けます。メモ帳では「ANSI」で保存するとShift-JISになります。
またスクリプトには意味がないと思われる半角スペースがありますが、これの有無で動作が変わってしまいます。このあたりはこの本が非常に参考になりました。Kindle Unlimitedなら無料で読めます。
まとめ
回復パーティションは1GBも確保しておけば十分だと思っていました。しかし予想を上回るスピードで使用量が増えていました。
SSDも安くなり256GB、512GBが当たり前の時代になりましたのでケチケチせず、回復パーティションは数GB確保しておいた方がよいかもしれません。
何度も言いますが、スクリプトの実行にあたって値の入力には十分注意してください。
コメント
partitionはなぜ4以上しか選択できないのですか?
当方のpartitionは3です。よってbatファイルが機能しなかったです。
コメントを頂きありがとうございます。
説明が不足しており申し訳ございません。
「3」となるのはMBRディスクの場合で、今回のスクリプトではMBRディスクには対応しておりません。