2024年1月10日頃、Windows Update KB5034441のエラー0x80070643が Windows10で起こった。何回再試行しても、成功しない。
原因は、回復パーティションのサイズが1GB未満だからとの事。
にある通り、回復パーティションを増やしたら良い、というのが現時点の解法のようだ。そのためには、隣接しているC:ドライブのOSパーティションのサイズを小さくし、それと合わせて1GB以上の回復パーティションを再構築するとの事で、上記のブログで引用されているマイクロソフトの資料ページに具体的にその手順が示されている。
※上記ブログで、日本語機械訳に間違いがあるとの指摘があったが、f.の、「shrink desired=250 minimum=250」とのコマンドの一部を文章叙述に間違えて「圧縮 を実行します desired=250 minimum=250」としている点くらいで、英語ページと日本語ページとを注意深く見比べながら実行したら、特に問題はなさそうだった。
原文ページはこちら
機械語翻訳ページはこちら
この手順をまとめようかと思っていたが、既に、きれいにまとめてくれている人が居たので、
にリンクしておく。以下、リンク先が喪失したりしたときのために自分用にメモ。
なお、自分は、(この時点まで)MBRのケースしかこれまで扱っていない。
この手順で、一番引っかかったのは、
(回復)パーティションを作成し、
その後、フォーマットする。
そうすると、なぜか、プライマリパーティションタイプになってしまっていた。
この状態で、「reagentc /enable」すると、操作は成功するものの、「reagentc /info」で調べるとWinREのパーティションは、作成したもの(回復パーティションを作ったつもりで実はプライマリパーティションを作ってしまっていたやつ)ではなく、C:ドライブのOSパーティションになっていた!
これに気づかず、この状態で、Windows Update KB5034441 を実行したところ、エラーなく完了した。
だから、このエラーって、もしかしたら、回復パーティションのサイズを変えなくても、プライマリタイプに変更して、WinREシステム設置場所をOSパーティションに移動するだけで、Windows Update KB5034441 をやり過ごすだけだったらOKなのかも知れない。
以下、覚え書き。
「ディスクの管理」を開いておくと良い。リアルタイムで情報が更新されて便利。
diskmgmt.msc
作業は主に管理者権限のコマンドプロンプトで
管理者権限でコマンドプロンプトを開く【以下コマンドプロンプト中の操作】
WinREの状況を把握する。(例;ディスク0のパーティション4、パーティション3はC:OSパーティション)
reagentc /info
C:\WINDOWS\system32>reagentc /info
Windows 回復環境 (Windows RE) およびシステム リセット構成
情報:
Windows RE の状態: Enabled
Windows RE の場所: \\?\GLOBALROOT\device\harddisk0\partition4\Recovery\WindowsRE
ブート構成データ (BCD) ID: be4d8d56-68db-11ea-9ca3-bcc11e69a784
回復イメージの場所:
回復イメージ インデックス: 0
カスタム イメージの場所:
カスタム イメージ インデックス: 0
REAGENTC.EXE: 操作は成功しました。
WinREを無効化する
reagentc /disable
C:\WINDOWS\system32>reagentc /disable
REAGENTC.EXE: 操作は成功しました。
次から「diskpart」コマンドでの作業。プロンプトが「DISKPART>」に変わる。
diskpart
C:\WINDOWS\system32>diskpart
Microsoft DiskPart バージョン 10.0.19041.3636
Copyright (C) Microsoft Corporation.
コンピューター: 【デバイス名】
DISKPART>
回復パーティションのあるディスクを選ぶために、ディスクのリストを表示する。「ディスクの管理」画面の情報も活用する(例;回復パーティションのディスクは「0」)
list disk
DISKPART> list disk
ディスク 状態 サイズ 空き ダイナ GPT
### ミック
------------ ------------- ------- ------- --- ---
ディスク 0 オンライン 465 GB 1024 KB *
WinREと同じディスクを選択する(例;選択するディスクは「0」)
ちなみに、「GPT列」アスタリスク(*)があるかどうかを確認する。
あればGPT、なければMBR
GPT GUIDパーティションテーブル
MBR マスターブートレコード
今回はGPTのケース(初めて経験する)。
念のため、ディスクの管理(diskmgmt.msc)画面で、disk0を右クリックしてプロパティーを開き、ボリュームタブで、パーティションのスタイルを確認できる。
ディスクを開いて、パーティション構成を確認する
sel disk 0
list part
DISKPART> sel disk 0
ディスク 0 が選択されました。
DISKPART> list part
Partition ### Type Size Offset
------------- ------------------ ------- -------
Partition 1 システム 1024 MB 1024 KB
Partition 2 予約 128 MB 1025 MB
Partition 3 プライマリ 461 GB 1153 MB
Partition 4 回復 627 MB 462 GB
Partition 5 回復 3074 MB 462 GB
OSパーティションを選択して、サイズを圧縮する(例;C:OSパーティションは「3」)
sel part 3
DISKPART> sel part 3
パーティション 3 が選択されました。
DISKPART> list part
Partition ### Type Size Offset
------------- ------------------ ------- -------
Partition 1 システム 1024 MB 1024 KB
Partition 2 予約 128 MB 1025 MB
* Partition 3 プライマリ 461 GB 1153 MB
Partition 4 回復 627 MB 462 GB
Partition 5 回復 3074 MB 462 GB
マイクロソフトの資料では、250MB圧縮する例となっていたが、回復パーティションが不足するサイズは、約373MBないし397MBなので、400MB以上、キリ良く500MB圧縮することにする。そのため、資料の数字250を両方とも500に変更。
圧縮したい量(desired)、縮小する最小量(minimum)
shrink desired=500 minimum=500
DISKPART> shrink desired=500 minimum=500
ボリュームは、次の方法で正常に縮小されました: 500 MB
DISKPART> list part
Partition ### Type Size Offset
------------- ------------------ ------- -------
Partition 1 システム 1024 MB 1024 KB
Partition 2 予約 128 MB 1025 MB
* Partition 3 プライマリ 460 GB 1153 MB
Partition 4 回復 627 MB 462 GB
Partition 5 回復 3074 MB 462 GB
「desired」と「minimum」の違いが分かりにくい。
- desiredが指定されていない場合、minimumが指定されていればminimumだけ縮小しようとする。
- minimumが指定されていない場合、desiredが指定されていればdesiredだけ縮小しようとする。
- desiredもminimumも指定されていない場合、「使用可能な空き領域の最大容量」だけ縮小しようとする。
- minimumが指定されていても、十分な空き容量がない場合、コマンドはエラーになる。
WinRE回復パーティションを選択(例;最初WinREのあった回復パーティションは「4」)
sel part 4
DISKPART> sel part 4
パーティション 4 が選択されました。
DISKPART> list part
Partition ### Type Size Offset
------------- ------------------ ------- -------
Partition 1 システム 1024 MB 1024 KB
Partition 2 予約 128 MB 1025 MB
Partition 3 プライマリ 460 GB 1153 MB
* Partition 4 回復 627 MB 462 GB
Partition 5 回復 3074 MB 462 GB
これを削除
delete partition override
DISKPART> delete partition override
DiskPart は選択されたパーティションを正常に削除しました。
DISKPART> list part
Partition ### Type Size Offset
------------- ------------------ ------- -------
Partition 1 システム 1024 MB 1024 KB
Partition 2 予約 128 MB 1025 MB
Partition 3 プライマリ 460 GB 1153 MB
Partition 5 回復 3074 MB 462 GB
ここで、回復パーティションを作成するコマンドを打つことになるが、GPTとMBRとでコマンドが異なる。(今回はGPT)
GPTの場合(引き続いた2つのコマンドを投入する)
create partition primary id=de94bba4-06d1-4d40-a16a-bfd50179d6ac
gpt attributes =0x8000000000000001
DISKPART> create partition primary id=de94bba4-06d1-4d40-a16a-bfd50179d6ac
DiskPart は指定したパーティションの作成に成功しました。
DISKPART> gpt attributes =0x8000000000000001
選択された GPT パーティションに DiskPart で属性を割り当てました。
DISKPART> list part
Partition ### Type Size Offset
------------- ------------------ ------- -------
Partition 1 システム 1024 MB 1024 KB
Partition 2 予約 128 MB 1025 MB
Partition 3 プライマリ 460 GB 1153 MB
* Partition 4 回復 1128 MB 461 GB
Partition 5 回復 3074 MB 462 GB
MBRの場合(前回のログより)
create partition primary id=27
DISKPART> create partition primary id=27
DiskPart は指定したパーティションの作成に成功しました。
DISKPART> list part
Partition ### Type Size Offset
------------- ------------------ ------- -------
Partition 1 回復 20 GB 1024 KB
Partition 2 プライマリ 200 MB 20 GB
Partition 3 プライマリ 444 GB 20 GB
* Partition 4 回復 1065 MB 464 GB
新たに作成されたパーティションが選択されていることを確認して、フォーマットを行なう
GPTの場合
DISKPART> format quick fs=ntfs label="Windows RE tools"
100% 完了しました
DiskPart は、ボリュームのフォーマットを完了しました。
DISKPART> list part
Partition ### Type Size Offset
------------- ------------------ ------- -------
Partition 1 システム 1024 MB 1024 KB
Partition 2 予約 128 MB 1025 MB
Partition 3 プライマリ 460 GB 1153 MB
* Partition 4 回復 1128 MB 461 GB
Partition 5 回復 3074 MB 462 GB
GPTの場合は、フォーマットで属性が変わってしまったりしないようだ。
MBRの場合(前回のログより)
DISKPART> list part
Partition ### Type Size Offset
------------- ------------------ ------- -------
Partition 1 回復 20 GB 1024 KB
Partition 2 プライマリ 200 MB 20 GB
Partition 3 プライマリ 444 GB 20 GB
Partition 4 プライマリ 1065 MB 464 GB
ここで、MBRの時には異変が起きた。選択したパーティションが回復パーティションではなくなってしまったのだ。MBRの場合には、ここであらためて、パーティションタイプを変更するコマンドが必要だった。
set id=27
DISKPART> sel part 4
パーティション 4 が選択されました。
DISKPART> set id=27
DiskPart は、パーティション ID を設定しました。
また、ドライブレターの属性を削除するためには
ボリュームまたはパーティションを選んで
remove letter=<ドライブ文字> (今回はFの例)
DISKPART> remove letter=F
DiskPart はドライブ文字またはマウント ポイントを正常に削除しました。
か、あるいは単に
remove
とすれば良いようだ。後者の情報は次のページより。
出来たボリュームを確認する。
list vol
DISKPART> list vol
Volume ### Ltr Label Fs Type Size Status Info
---------- --- ----------- ---- ---------- ------- --------- --------
Volume 0 D DVD-ROM 0 B メディアなし
Volume 1 C NTFS Partition 460 GB 正常 ブート
Volume 2 FAT32 Partition 1024 MB 正常 システム
Volume 4 NTFS Partition 3074 MB 正常 非表示
* Volume 5 Windows RE NTFS Partition 1128 MB 正常 非表示
ここまでがdiskpartでの作業。exitで抜ける
exit
DISKPART> exit
DiskPart を終了しています...
C:\WINDOWS\system32>
WinREの再有効化
reagentc /enable
C:\WINDOWS\system32>reagentc /enable
REAGENTC.EXE: 操作は成功しました。
最後に、WinREがインストールされている場所を確認する。
reagentc /info
C:\WINDOWS\system32>reagentc /info
Windows 回復環境 (Windows RE) およびシステム リセット構成
情報:
Windows RE の状態: Enabled
Windows RE の場所: \\?\GLOBALROOT\device\harddisk0\partition4\Recovery\WindowsRE
ブート構成データ (BCD) ID: e612c280-b05c-11ee-9ce4-7c5cf8c03928
回復イメージの場所:
回復イメージ インデックス: 0
カスタム イメージの場所:
カスタム イメージ インデックス: 0
REAGENTC.EXE: 操作は成功しました。
ここまでで作業は終了です。お疲れさまでした。
これで、Windws Update KB5034441 が成功するようになると思われます。
ここまでメモしておけば、コピペで作業できるので、数をこなすことが可能と思います。
とは言え、アップデートプログラム自体が改良されて、この作業自体が不要になることを願っています。
※追記1:2024.1.13Sat. これだけではこのエラーによる失敗が解消されないケースが1件確認された。現在解決法を追求中。現時点で、再起動、トラブルシューティング、SFCスキャン、DIMSコマンド、Windows Update データのクリアでダメな事は把握している。(あと試してないのは、.NET Frameworkのインストールくらいか‥)もう少し粘ってみるつもり。
※追記2:結局、.NET Frameworkのインストールは行わなかった。パーティションサイズを10GB超えにしても成功しないため、サイズ増加による方向はあきらめた。回復パーティションを生じさせず、C起動ドライブにWinREシステムを置いても失敗するからサイズの問題でなさそう。
※追記3:WindowsUpdateに失敗した後、更新の履歴ページを表示させて、「インストールに失敗しました」という行の一つ前にリンクされているページが意外と充実していることが分かった。
KB5034441: Windows 10 バージョン 21H2 および 22H2 用 Windows 回復環境の更新プログラム: 2024 年 1 月 9 日 - Microsoft サポート
※追記4:別のシステムで、「reagentc /enable」しようとすると、「Windows RE イメージは見つかりませんでした。」というメッセージが出て、WinREシステムが喪失してしまった事例にぶつかった。こちらの結論は、過去の自システムから再構築する方法
は使えず、結局、新規にWinREを作成する方法で解決した。
追記5:これに気を良くして、先の何度やっても失敗するケースに応用できないかと考えた。すなわち、現在のものと入れ替えて『Windows.isoから新規にWinRE.wimを入れてしまう方法』。最終的に手順は以下の通り。
- 7ZIPのインストール。
- Windows10のダウンロードページからツール「MediaCreationTool22H2.exe」をダウンロードしWindows.isoを作成
- install.esdから「Winre.wim」を抽出(Windows Proは「3」)。隠しフォルダ「C:¥Recovery」に設置する。元あったもの(一見無いように見えるが隠しファイルなので隠しファイルを表示する)は、避けておく
- この状態で、「
reagentc /enable
」すると、C:ドライブのOSパーティションにWinREシステムが稼働してしまう - そこから、回復パーティションへWinREシステムを移すのは厄介だったので、もしやと思い、この状態でウィンドウズアップデートを実行したら、ようやっと成功した!
※追記6:最後に残されたのは、せっかく整備した回復パーティションへ、WinREシステムを移す方法。基本的に、
の資料によるが、Typoのようなものがあって悩まされた後、最終的に次の資料を参考にした。
回復パーティションへdiskpartでドライブレターを割り当てる
assign letter=R
removeする前に、フォーマットや削除してしまった場合、そのドライブ文字は再起動しないと使えなくなるので注意
この割り当てによって、回復パーティションがコマンドプロンプトやエクスプローラーで扱えるようになる
フォルダーを作る(⇒WinRE.wimをコピーする)
md r:\Recovery\WindowsRE
ここで、RecoverなのかRecoveryなのかWindowsREなのかWinREなのかで混乱した。
最初、コピーがうまくいかず、WinREの稼働をCドライブのOSパーティションで運用している状態でとりあえずウィンドウズアップデートに臨んでしまった理由もここにある。
最終的に、コピーはコマンドプロンプトでやらずに、エクスプローラーで操作して、間違って作ったりコピーしたのモノを、消したり移動したりして整えるのが結果的に良かった。
一旦 reagentc /disable して、イメージの設置場所を回復パーティションへ指定する
reagentc /setreimage /path R:\Recovery\WindowsRE
C:\WINDOWS\system32>reagentc /setreimage /path R:\Recovery\WindowsRE
ディレクトリは次に設定されています: \\?\GLOBALROOT\device\harddisk0\partition4\Recovery\WindowsRE
REAGENTC.EXE: 操作は成功しました。
C:\WINDOWS\system32>reagentc /enable
REAGENTC.EXE: 操作は成功しました。
C:\WINDOWS\system32>reagentc /info
Windows 回復環境 (Windows RE) およびシステム リセット構成
情報:
Windows RE の状態: Enabled
Windows RE の場所: \\?\GLOBALROOT\device\harddisk0\partition4\Recovery\WindowsRE
ブート構成データ (BCD) ID: f10e0622-b1a2-11ee-89ae-00dbdf44f4d9
回復イメージの場所:
回復イメージ インデックス: 0
カスタム イメージの場所:
カスタム イメージ インデックス: 0
REAGENTC.EXE: 操作は成功しました。
C:\WINDOWS\system32>
無事WinREシステムは回復パーティションへ移動した。
後はdiskpartでドライブレターをremoveするのを忘れずに。(了)