この記事を読むことで、dismやsfc /scannowを使ったWindwosの修復方法、dismとsfcの違い、dismとsfcはどっちが先か、といったことを理解できます。
古いマシンでWindows10をリカバリする機会がありました。
リカバリディスクで工場出荷状態へ戻した後、WindowsUpdateを行っていこうとするもうまくいかず、dismコマンドでも「ソースファイルが見つかりませんでした」エラー(0x800f081f)となりました。
ここでは解決策について詳しく解説します。
dismやsfcは、パソコンでブルースクリーンがでるようになったり、OSを長く使っているうちに不安定になってきたといった場合も重宝する機能ですよ。
Windowsをもっと使いたおす方法
この記事ではWindowsのかいつまんだ機能について紹介していますが、Windowsをもっと使いたおすための学習方法ついてはこちらにまとめています。
この現象が出た背景
付属のリカバリディスク等を使って工場出荷状態に戻すと、Windows10のバージョン(OSビルド)も販売当時のものになるので、WindowsUpdateをあてていく作業が必要になります。
ちなみに下記がWindows10のバージョンの変遷です。該当マシンの現在のバージョンはwinverコマンドで10586であることを確認。以下のリリース表からみると相当古いですね。
リリース | バージョン | OSビルド番号 | コードネーム |
2022年10月 | 22H2 | 19045 | 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) |
今回、WindowsUpdateを実行しようとしたところ、明らかに古いバージョンであるにもかかわらず、これ以上アップデートできない旨のメッセージが出ました。
お使いのデバイスは最新の状態です。最終確認日:今日、XX:XX
そこで以下を試していきました。
dismコマンドを試す
dism (Deployment Imaging Service and Management) コマンドというのは、Windowsのシステムイメージを管理・修復するためのツールです。
とりわけ、WindowsUpdateファイルを使い、破損したシステムファイルを修復することに使用されます。
例えば、以下のようなコマンドを打つことで実行できます。以下はインターネット上のWindowsUpdateファイルを使って修復を試みる例です。インターネット環境下で実行する必要があります。
dism.exe /online /cleanup-image /restorehealth
それでは早速dismコマンドを実行してみましょう。dismコマンドを実行するには管理者権限が必要です。
管理者としてコマンドプロンプトを起動するには、Windowsキー+Rで「ファイル名を指定して実行」を起動し、「cmd」と打った後、ctrl+shiftを押しながらEnterが手っ取り早いですよ。
実行すると…
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 にあります
なんと、ソースファイルが見つかりませんでしたとのメッセージがでました。エラーコードは0x800f081fのようです。
sfc /scannow コマンドを試す
システムファイルの破損も疑われるので、sfc / scannowコマンドを試しましょう。
これは、ファイルチェッカー(sfc)を使用して、Windowsシステムファイルの整合性をチェックし、破損したファイルを自動的に修復するコマンドです。
sfcはローカルに保存されているキャッシュをもとに修復をします。
ここでは、システムイメージをチェックする「dism」コマンドと、保護されたシステムファイルをチェックする「sfc /scannow」コマンドの両輪から探りをいれようという方針です。
この2つを同時に実行するとトラブルの原因になりますので、絶対に同時に実行しないでください。
先ほどと同じく管理者権限で実行する必要があります。
sfc /scannow
実行してみると…
システム スキャンを開始しています。これにはしばらく時間がかかります。
システム スキャンの検証フェーズを開始しています。
検証 100% が完了しました。
Windows リソース保護により、破損したファイルが見つかりましたが、それらの
一部は修復できませんでした。詳細は CBS.Log windir\Logs\CBS\CBS.log に
含まれています。例: C:\Windows\Logs\CBS\CBS.log。ただし、オフライン
サービス シナリオでのログの記録は現在サポートされていません。
何かもう少し根深い問題がありそうですね。
ソースを指定したdismコマンド
先ほど「ソースファイルが見つかりませんでした」でうまくいかなかったdismコマンドですが、以下のように、ソースとしてwimファイルを指定してみるというのが次に試すべき手です。
dism.exe /online /cleanup-image /restorehealth /source:wim:f:\sources\install.wim:1 /limitaccess
isoファイルをマウントするとFドライブとしてマウントされたので「f:\」としています。
引数に「/limitaccess」を指定しているのは、インターネット側のWindowsUpdateにdismがアクセスしにいかないようにするためのものです。
ちなみにwimファイルは、Windowsダウンロードサイトからディスクイメージ(isoファイル)をダウンロードし、それをダブルクリックしてマウントすると、その中のsourcesフォルダ配下にあります。
dism と sfc /scannowはどっちを先に実行する?
dism と sfc /scannowはどっちを先に実行するかという話になりますが、基本的にはdismから実行しましょう。上記のように、単純なdismコマンドがうまくいかなかった場合に、dismばかりを深追いせずに、一旦 sfc /scannow を試すといったように探りを入れながら進めていきましょう。
最終的な着地点
よくよく考えてみると、このマシンはかなり古いバージョン(OSビルド)であるため、最新にするにあたりWindowsUpdateを順番にあてていくのでは時間がかかりすぎてしまいます。
この事例についてだけでいうと、単純に最新バージョンのisoファイルを使ってWindowsをアップデートした方が早いということです。
ということで、今回はWindows10の最新isoをダウンロードし、更新アシスタントを実行するという方法をとり、特に問題なく無事にアップデートすることができました。
dism実行でソースファイルが見つかりませんでしたエラー(0x800f081f)がでたときは上記のような手順で対応していくと解決するはずです。
本ブログでは業務に役立つ技術情報をこれからも発信していきますので、困った時にはぜひ参考にしてみて下さいね。