古いマシンでWindows10をリカバリする機会があった。リカバリディスクで工場出荷状態へ戻した後、WindowsUpdateを行っていく際にうまくいかず、dismコマンドでもエラーとなった際の対応メモを残す。
現象
リカバリディスクを使って工場出荷状態に戻すと、当然ながらWindows10のバージョン(OSビルド)も当時のものになるので、WindowsUpdateが必要となる。ちなみに下記がWindows10のバージョンの変遷。該当マシンの現在のバージョンはwinverコマンドで10586であることを確認。
リリース バージョン OSビルド番号 コードネーム 2022年10月 22H2 2021年11月 21H2 19044 21H2 2021年5月 21H1 19043 21H1 2020年10月 20H2 19042 20H2 2020年5月 2004 19041 20H1 2019年10月 1909 18363 19H2 2019年5月 1903 18362 19H1 2018年10月 1809 17763 Redstone 5 (RS5) 2018年4月 1803 17134 Redstone 4 (RS4) 2017年10月 1709 16299 Redstone 3 (RS3) 2017年4月 1703 15063 Redstone 2 (RS2) 2016年8月 1607 14393 Redstone 1 (RS1) 2015年11月 1511 10586 Threshold 2 (TH2) 2015年7月 1507 10240 Threshold 1 (TH1)
今回、アップデート実行時に以下のような感じで、明らかに古いのにこれ以上アップデートできない旨のメッセージが出た。
お使いのデバイスは最新の状態です。最終確認日:今日、XX:XX
そこで以下を試す。
dismコマンドを試す
C:\Windows\system32>dism.exe /online /cleanup-image /restorehealth
dismコマンドを管理者で実行してみる。すると…
Windows10
展開イメージのサービスと管理ツール
バージョン: 10.0.10586.0
イメージのバージョン: 10.0.10586.0
[==========================100.0%==========================]
エラー: 0x800f081f
ソース ファイルが見つかりませんでした。
機能の復元に必要なファイルの場所を指定するには、"Source" オプションを使用してください。ソースの場所の指定の詳細について は、http://go.microsoft.com/fwlink/?LinkId=243077 を参照してください。
DISM ログ ファイルは C:\Windows\Logs\DISM\dism.log にあります
ソースファイルが見つかりませんでしたとのこと。
sfc /scannow コマンドを試す
システムスキャンを試す。同じく管理者権限で。
C:\Windows\system32>sfc /scannow
結果
システム スキャンを開始しています。これにはしばらく時間がかかります。
システム スキャンの検証フェーズを開始しています。
検証 100% が完了しました。
Windows リソース保護により、破損したファイルが見つかりましたが、それらの
一部は修復できませんでした。詳細は CBS.Log windir\Logs\CBS\CBS.log に
含まれています。例: C:\Windows\Logs\CBS\CBS.log。ただし、オフライン
サービス シナリオでのログの記録は現在サポートされていません。
何かもう少し根深い問題がありそう。
最終的な着地点
本来であれば、ここからdismのソースを指定してみるなど試せることはまだまだありそう。例えば以下のような感じで。
DISM /Online /Cleanup-Image /RestoreHealth /source:WIM:D:\Sources\Install.wim:1 /LimitAccess
だけどよく考えるとこのマシンはかなり古いバージョン(OSビルド)であり、最新にするには、順を追ってWindowsUpdateを重ねていくのではなく、最新バージョンを直接あてたほうが早い。そして、その場合はおそらく現状のシステムの整合性などは無視で、強制的に最新バージョンがインストールされるような気がする。
ということで、今回は以下からWindows10の最新isoをダウンロードし、更新アシスタントを実行するという方法をとり、無事にアップデートできた。