かつて山市良と呼ばれたおじさんのブログ

vol.3 回復パーティションのサイズを拡張するには

2024年04月14日配信
執筆者:山内 和朗

 今回はWindows Server 2022(デスクトップエクスペリエンス)を例に、回復パーティションのサイズを拡張する手順をステップ・バイ・ステップで説明します。Windows Server 2022で2024年1月のWinREのセキュリティ更新プログラム(KB5034439)がエラーを繰り返している場合、この手順で問題を回避することができるはずです。エラーを繰り返しているWindows 10/11の一部のバージョンについても同様の手順で対応できます。

 

注:Windows Server 2022 Server Coreでも同様の手順で回復パーティションを拡張できますが、KB5034439のエラーの原因は別にあるため、更新エラーの問題は解決できません。

 

Microsoft提供のコマンドラインの難解手順と、それを自動化するPowerShellサンプル

 

 回復パーティションを拡張する手順については、Microsoftの以下の技術情報(KB)で説明されています。このKBは、2023年9月に初めて公開された、難しい操作を含みますが、一般的な手順であり、回復パーティションの空き容量不足が原因で失敗する更新プログラムのエラーの回避に利用できます。

KB5028997: WinRE 更新プログラムをインストールするためにパーティションのサイズを手動で変更する手順
https://support.microsoft.com/ja-jp/help/5028997

 

 MicrosoftはWinREのセキュリティ更新プログラムをWindows 10/11の一部のバージョン、およびWindows Server 2022に提供するのと同時に、Windowsの広範囲のバージョンでCVE-2024-20666(外部サイト)の脆弱性に対策できるように、以下のKBでPowerShellのサンプルスクリプト(PatchWinREScript_2004plus.ps1およびPatchWinREScript_General.ps1)を提供しました。このPowerShellスクリプトを実行することで、WinREへのオフラインパッチを実施することができますが、このスクリプトは回復パーティションのサイズを拡張してくれるものではないことに注意してください。このスクリプトもまた、回復パーティションの容量不足で失敗する場合があります。

 

KB5034957: CVE-2024-20666 のセキュリティの脆弱性に対処するために、展開されたデバイスの WinRE パーティションを更新する
https://support.microsoft.com/ja-jp/help/5034957


 言ってみれば、1月のWinREのセキュリティ更新プログラムのエラーは、この脆弱性対策を自動化しようとした結果です。このスクリプトの実行が成功すれば脆弱性は解消されますが、1月のWinREのセキュリティ更新プログラムのエラーが回避できるとは限りません。1月のWinREのセキュリティ更新プログラムは、脆弱性に対策済みであるかどうかに関係なく検出され、エラーで失敗する場合があります(PowerShellサンプルでパッチされたWinREイメージと更新プログラムでパッチされたWinREイメージのサイズの違いにより)。


 というわけで、(無視してもいい)エラー問題の解消のためには、手動で回復パーティションを拡張する必要があるわけです。Windows Server 2022をクリーンインストールした環境を例に、4月現在でもエラーが発生することと、回復パーティションを拡張する手順、そして回復パーティションの拡張でエラーが解消されることを示します。

 

クリーンインストールでは空き容量不足で更新に失敗することを確認

 

 Windows Server 2022デスクトップエクスペリエンスをベアメタルサーバー(この例ではHyper-V仮想マシン)にクリーンインストールしたところ、既定のパーティション構成はディスクの前方から100MBのシステムパーティション、16MBのMSR、126.3GBのWindowsパーティション(C:ドライブ)、そして最後に597MBの回復パーティションが作成されました(画面1)。なお、この回復パーティションのサイズは、使用したインストールメディア(定期的に更新版が提供されています)で異なる場合があります。

画面1

画面1 Windows Server 2022デスクトップエクスペリエンスのインストール直後のパーティション構成

 クリーンインストール後に初めてのWindows Updateを実行すると(4月上旬に実施)、最終的に問題のWinREのセキュリティ更新プログラム「KB5034439(外部サイト)」がエラーコード「08x0070643」でインストールに失敗します。このエラーコードからは何も分かりませんし、イベントログからもエラーを特定できるような情報は得られませんが、「C:¥Windows¥Logs¥WinREAgent」に作成される「setuact.log」や「setuperr.log」にはエラーの理由を示すログが記録されています。「setupact.log」には、回復パーティションの現在のサイズが「625995776」バイト(約597MB)、空き領域が「120168448」バイト(約114MB)、WinREの現在のサイズが「485485125」バイト(約463MB)、更新後のWinREのサイズ「518841747」バイト(約495MB)ですが、更新後のWinREと入れ替えた場合、必要な空き領域「88080384」バイト(84MB)を確保できない(現在の空き114MB-WinREの増分32MB=入れ替え後の空き82MB)ため入れ替えることがでずに失敗していることが記録されています(画面2)。ちなみに、WinREの更新の失敗したWindows 10/11では、必要な空き領域は「54525952」バイト(52MB)と記録されていました。WinREのセキュリティ更新プログラムのKB(外部サイト)には、“この更新プログラムを正常にインストールするには、回復パーティションに 250 MB の空き領域が必要です。 ”と書かれていますが、これは将来の更新の可能性を含めての推奨値であり、実際には250MBもの空き領域が必須というわけではありません。今回の失敗は、わずか数MBの容量不足でした。

 

画面2
画面2 WinREの更新失敗の理由が「C:¥Windows¥Logs¥WinREAgent¥setupact.log」に記録されている

 

※ Windows 10/11、Windows Server 2022のクリーンインストールで確認した限り、最近のWindows セットアップは、インストールメディアに収録されているWinREイメージ(winre.wim)のサイズ+84MBの空き領域を確保するように、回復パーティションのサイズを決定しているようです。

 

現在のWinREを無効化して、C:ドライブに退避する(これ重要!!)

 

 WinREのセットアップ情報は、コマンドプロンプト(管理者)で以下のコマンドラインを実行することで確認できます。このコマンドラインを実行して、WinREの状態が有効(Enabled)になっていることと、WinREの場所(ディスク番号、パーティション番号)を確認します。

reagentc /info

 回復パーティションのサイズを拡張する場合、現在の回復パーティションは一度削除することになります。そのため、以下のコマンドラインを実行して現在のWinREイメージ(Winre.wim)をC:ドライブに退避しておきます。退避された回復イメージは、「C:¥Windows¥System32¥Recovery」ディレクトリに隠しファイル属性を保持した状態でコピーされます(画面3)。

reagentc /disable

 

vol03_scr03

画面3 「reagentc /disable」を実行して、現在のWinREイメージをC:ドライブに退避し、回復パーティションの再作成に備える

 

DISKPARTコマンドを使用して回復パーティションを拡張する


 次に、コマンドプロンプト(管理者)で「DISKPART」コマンドを以下の順番で実行して、Windowsパーティション(この例ではディスク0パーティション3)を縮小(Shrink)して必要なディスク領域(この例では100MB)を確保し、現在の回復パーティション(この例ではディスク0パーティション4)を削除し、未使用のディスク領域すべてを使用して新しい回復パーティションを作成します(画面4)。つまり、以前の回復パーティションより100MB大きな回復パーティションに再作成します。

 

注: ディスク番号やパーティション番号および回復パーティションの拡張用に縮小するWindowsパーティションのサイズは、必ずお使いのシステムのパーティション構成に合わせてください。


DISKPART
DISKPART> LIST DISK
DISKPART> SELECT DISK 0
DISKPART> LIST PARTITION
DISKPART> SELECT PARTITION 3
DISKPART> SHRINK DESIRED=100 MINIMUM=100
DISKPART> SELECT PARTITION 4
DISKPART> DELETE PARTITION OVERRIDE
DISKPART> CREATE PARTITION PRIMARY
DISKPART> FORMAT QUICK FS=NTFS LABEL="WinRE"
DISKPART> set id=de94bba4-06d1-4d40-a16a-bfd50179d6ac
DISKPART> gpt attributes=0x8000000000000001
DISKPART> LIST PARTITION
DISKPART> EXIT


画面4

画面4 コマンドプロンプト(管理者)で「DISKPART」コマンドを使用してWindowsパーティションを縮小し、より大きな回復パーティションを再作成する

 新しい回復パーティションを作成したら、次のコマンドラインを実行して、WinREを有効にします。このとき、退避されていたWinREイメージが回復パーティションの「¥Recovery¥WindowsRE」下にセットアップされます(画面5)。

reagentc /enable
reagentc /info

画面5

画面5 回復パーティションの再作成前に無効にしておいたWinREを再び有効にする

 

KB5034439のインストール成功を確認

 

 回復パーティションを再作成し、WinREを有効にしたら、前回のWindows Update時のWinREの更新失敗の影響(一時ディレクトリ「C:¥$WinREAgent」)をクリアするために、いったんOSを再起動しましょう。その後、Windows Updateを実行すれば、失敗を繰り返していたWinREのセキュリティ更新プログラム「KB5034439」のインストール成功を確認できるはずです(画面6)

画面6

画面6 回復パーティションのサイズ拡張後、WinREのセキュリティ更新プログラム「KB5034439」のインストールは成功

 

まとめ

 

 今回説明した作業は、コマンドラインで行うため、何をやっているのか分かり難い部分があったかもしれません。ディスクのパーティションの状況とコマンドラインの対応を図示してみたので参考にしてみてください。

図1

図1 パーティションの状態とコマンドライン操作の対応(クリックで拡大

 

 Microsoftは今回のWinREセキュリティ更新プログラムのエラー問題とその回避策の難しさを受けて、回復パーティションを拡張するPowerShellサンプルスクリプトを提供しています。DISKPARTコマンドを使用した上記の方法が難しそうという場合は、このサンプルスクリプトを利用することもできます。ただし、このサンプルスクリプトを利用する場合は、Windows標準の.NET FrameworkベースのWindows PowerShell(powershell.exe)を使用してください。.NETベースのPowerShell(pwsh.exe)で実行すると、スクリプトはエラーで失敗します(エラーの原因については、旧ブログのこちらの記事《リンク先は将来、予告なく削除される場合があります》)。

 

Windows RE に更新プログラム パッケージを追加する>Windows RE のパーティションを拡張する
https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/add-update-to-winre#extend-the-windows-re-partition

 次回は、回復パーティションの操作が必要ないように、クリーンインストール時に十分な容量の回復パーティションを作成する手順を説明します。この話、まだまだ続きます。次々回はWindows Server 2016/2019を想定して、古いパーティション構成から現在の推奨パーティション構成への引っ越しの話など。

blog_subscribe

blog_comment

最新記事