2021/05/06

【解決】Windows Updateエラー(0x800f0905)

3月からWindows Updateがうまく行かない。かなり以前の職場でWSUSといろいろと格闘したので、Windows Updateの扱いはよく知っているつもりではあるが、簡単には治らなかった。

次の累積パッチで治るかなと思って放置していたが、4月分もあたっていないし、最悪再インストールになるのであれば、ゴールデンウィークが終わる前に片付けてしまおうと真面目に対応した。

症状としては、パッチ適用を始めると5分くらいで20%までインストールが進み、その後、一気に100%になるものの、エラーがでて適用できていない。適用しようとしたパッチはKB5001330(品質更新プログラム ー 2021-04 x64 ベース システム用 Windows 10 Version 20H2 の累積更新プログラム)とKB5001391(その他の更新プログラム ー 2021-04x64 ベース システム用 Windows 10 Version 20H2 の累積更新プログラム)、エラーコードは0x800f0905。

よくある対応の実施

0x800f0905でネットを検索しても、それらしいのが出てこないので、よくある対応を一通り実施。


トラブルシューティングツール

いちばんお手軽な、Windowsのトラブルシューティングツールを利用。

[設定] → [更新とセキュリティ] → [トラブルシューティング] → [追加のトラブルシューティングツール] → [Windows Update]

トラブルシューティングツールを実行したあとに、再度Windows Updateをするが、同じく、エラーコード0x800f0905。


Windows Updateエージェントの中身を消去

これもよくある方法だが、Windows Updateがうまく行かないときは、Windows Updateが使用するフォルダを削除して、再度Windows Updateをするとうまくいくことが多い。

管理者として実行でコマンドプロンプトを立ち上げて、以下を実行してから、Windows Updateを再実行する

net stop bits
net stop wuauserv
~~~ C:\Windows\SoftwareDistribution をリネーム or 削除
net start wuauserv
net start bits

同じエラーコード0x800f0905。

もう少し真面目に消して、再度Windows Update

net stop bits
net stop wuauserv
~~~ C:\Windows\SoftwareDistribution をリネーム or 削除
~~~ C:\ProgramData\Microsoft\Network\Downloader をリネーム or 削除
net stop appidsvc
~~~ C:\Windows\system32\system32\catroot2 をリネーム or 削除を試みる。ファイルが使われているというエラーが出て、再試行のポップアップを出したままで、
net stop cryptsvc
~~~ C:\Windows\system32\system32\catroot2 をリネーム or 削除の再試行のポップアップで、再試行ボタンをすぐに押す。

Downloaderはbitsがすぐに立ち上がってくるかもしれないので、何回か繰り返すと良い。

catroot2は、cryptsvcがすぐに立ち上がってきてリネーム・削除ができないので、上記のようにnet stopをし始めたらすぐにリネーム・削除を行う。

一通り終わったら、PCを再起動してから、再度Windows Updateを行う。が、再び同じエラー。


SFCとDISMでシステムファイルの整合性を確認

Windowsのシステムイメージのエラーを修復するdismと、システムファイルの整合性異常を見つけて正常なファイルに置き替えるsfcを使い、OSに問題がないかを確認する。

管理者として実行でコマンドプロンプトを立ち上げて、以下を実行。

DISM /Online /Cleanup-Image /ScanHealth
~~~ エラーが出なければ、次のRestoreHealthは実行不要
DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow

ちなみに、実行時のログは、sfcはC:\Windows\Logs\CBSに、DISMはC:\Windows\Logs\DISMにある。

実行後に再度Windows Updateを行うが、相変わらずエラーコード0x800f0905。


メモ

Windows Updateのログは、以前はC:\Windowsの下にWindowsUpdate.logとしてあったのだが、今はログの形式が変わったので、このファイルはなくなった。

代わりに、PowerShellを管理者として実行して、Get-WindowsUpdateLogと打ち込むと、デスクトップ上にWindowsUpdate.logを生成してくれる。


最終手段として、OSの再インストール?

思いつく手段は一通りやったので、やりたくはないが、OSの再インストールしかないかと考えた。

ネットをいろいろと検索していると、最近のWindows 10のアップデートのイメージは、同じバーションにも適用できることがわかった。つまり、Windows 10のアップデート(例:20H2から21H1へのアップデート)と同じ操作を、同じバージョンに適用することができる(例:20H2に、20H2のアップデートを適用できる)。

これを行えば、インストール済みのソフトや設定、データなどをそのままにして、OS部分のみを上書きインストールができる。


Windows10のアップデートイメージからのOS再インストール

早速、マイクロソフトのWindows10のダウンロードページから、ISOファイルをダウンロード。別に、ISOでなくても良いが、アップデート用USBを作るのもめんどくさいので、ISOを選んだ。https://www.microsoft.com/ja-jp/software-download/windows10

上記URLの「ツールを今すぐダウンロード」からアップデートツールをダウンロードし、起動してISOファイルのダウンロードを選択したが、アップデートツールから直接アップデートを適用するという手順でも問題はないと思う。

ダウンロードしたISOファイル(もしくは、作成したUSBメモリ)をマウントして、setup.exeを実行する。あとは、よくあるWindows10の手動アップデート手順に従えば良い。

なお、途中、

setup.exeを立ち上げると、こんな画面が出るので、「Windowsセットアップでの更新プログラムのダウンロード方法の変更」をクリックする。


「更新プログラム、ドライバー、オプション機能をダウンロードする(推奨)」が選択されているが、今回は「今は実行しない」を選択する。「次へ」をクリック。



「同意する」をクリック。



引き継ぐものを選択


「個人用ファイルとアプリを引き継ぐ」が選択されているはず。もしされていなければ、変更する。もし、「何もしない」しかなければ、適用しようとしているWindows 10のイメージが間違っていると思われる。例えば、エディションが違う(Home、Pro、など)とか、ビット数が違う(32ビットと64ビット)とか、言語が違うとか。

「個人用ファイルとアプリを引き継ぐ」を選択して、「次へ」




先程と同じ画面。「✓個人用ファイルとアプリを引き継ぐ」となっているので、問題ない。「インストール」をクリックして、Windows10のアップデートをインストールする。


インストールが終わったら、Windows updateを再度実行する。適用しようとしていたWindows update以外にも適用されるので、適用するものが無くなるまで複数回再起動とWindows updateを繰り返す。

この方法を使い、エラーコード0x800f0905でパッチ適用できなかった問題を解決した。


余談(DISMの使い方)

C:\Windows\WinSxS (コンポーネントストア)は、プロパティを見るとディスクを多く消費しているように見えるが、正確な消費量は下記コマンドで確認できる。(「管理者として実行」でコマンドプロンプトを立ち上げて実行)

Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore

WinSxSは、「タスクスケジューラ」の「タスクスケジューラライブラリ\Microsoft\Windows\Servicing」に登録された「StartComponentCleanup」が、コンポーネント更新30日後に不用になった古いコンポーネントを削除している。

これを手動で実行するには、以下のコマンド。ただし、タスクスケジューラとは、①更新されたコンポーネントの以前のバージョンがすぐに削除されること (30 日間の猶予期間なし) と ②1 時間でタイムアウトになる制限がないことの2点が異なる。

Dism.exe /Online /Cleanup-Image /StartComponentCleanup

さらに、以下のコマンドにすると、コンポーネント ストアの各コンポーネントの置き換え済みバージョンのすべてが削除される。なお、このコマンドの完了後、既存の Service Pack と更新プログラムのすべてがアンインストールできなくなる。

Dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase

その他、下記のコマンドを行うと、Service Pack のアンインストールに必要となるすべてのバックアップ コンポーネントを削除し、Service Pack によって使用される領域を縮小する(Service Pack とは、Windows の特定リリース向けの累積更新プログラムのコレクション)。なお、このコマンドの完了後、Service Pack はアンインストールできなくなる。

Dism.exe /Online /Cleanup-Image /SPSuperseded


Windows 10のアップデート後の古いイメージを削除したければ、管理者権限でcleanmgr.exeを実行すると、簡単に削除できる。(多分、上記の/SPSupersededと同じ事をやっていると思う。)





0 件のコメント:

コメントを投稿