Windowsの壊れたシステムを修復する

2017年6月30日Windows,Windows10,Windows8

Windowsは本当に壊れやすいOSで、結構簡単におかしくなりますね。

何かおかしくなった時にシステムのチェックと修復が比較的簡単に出来ます。

何か動作がおかしくなった時はやってみる価値アリです。

システムファイルチェッカーでシステムファイルを修復する

システムファイルチェッカーは、昔から使えるツールです。

管理者のコマンドプロンプトを開き下記コマンドを実行します。

C:\Windows\System32> sfc /scannow

時間がかかりますが、100%になり完了するまで待ちます。

「完了して整合性違反を検出しませんでした」と出れば問題なしです。

問題があっても自動修復される場合もあれば、修復できない場合もあります。

完了したら、再起動して問題が解決しているか確認します。

再起動は必ずスタートメニューから「再起動」の項目を選んでください。

 

修復できない場合は、ログを見ながら手動での修復になるのですが、該当の壊れていないファイルが無いと出来ませんし、置き換えるファイルの所有権を取得したり、ACL(アクセス制御リスト)のアクセス権を所得したりしないと置き換えできないので、かなり高度な事となるり、入れ替えても正常に動かない場合も結構ありますので諦めたほうが良いかもしれません。

一応メモしておきます。

ログから問題のファイルを摘出

スキャンしたログから該当部分を摘出してデスクトップにテキスト保存。

C:\Windows\System32> findstr /c:"[SR]" C:\Windows\Logs\CBS\CBS.log >"%userprofile%\Desktop\sfc.txt" 
C:\Windows\Syetem32> notepad "%userprofile%\Desktop\sfc.txt"

問題のファイルと場所が発見。

アクセス権取得

ここでは問題のファイルが仮に「abcde.dll」とします。

C:\Windows\Syetem32> takeown /f C:\Windows\System32\abcde.dll
C:\Windows\Syetem32> icacls C:\Windows\System32\abcde.dll /grant administrators:F

takeownコマンドは所有権の割り当てをします。

icaclsコマンドはアクセス制御の設定をします。

その後問題のないabcde.dllを上書きして入れ替えます。

Windowsの元のイメージから修復する

Window8以降から使える機能です。

Windowsの元のイメージと現在動いているOSのイメージの比較をして、問題があれば、元のイメージから修復ができるというものです。

Windowsの元のイメージはオンラインでWindows Updateから取得して動作します。

使うコマンドは「dism」で、Windowsのイメージを扱うコマンドです。

システムが破損しているか調べるには

C:\Windows\Syetem32> Dism /Online /Cleanup-Image /ScanHealth

これは比較的すぐに終わります。

修復できるか調べるには

C:\Windows\Syetem32> Dism /Online /Cleanup-Image /CheckHealth

ここで、正常か、修復可能か不可能か出ます。

システムを修復するには

C:\Windows\Syetem32> Dism /Online /Cleanup-Image /RestoreHealth

これで実際の修復がされます。

前の2個は飛ばして、いきなりこれでもOKです。

 

修復元のイメージは自動でOSを判断してWindowsUpdateからダウンロードしながら行われますので、修復を待つだけです。

完了したら再度

sfc /scannow を実行し、再起動して確認しましょう。

遅い回線しか無い、ネットに繋がらない場合

上級者向けです。

時間がかかるのでパソコンサポートでその場ではあまり出来ません。

オンラインスキャンが失敗した場合や、モバイル回線などで遅い場合や、ネットに繋がらない、WindowsUpdateに繋がらない場合など用です。

修復のイメージはネット経由で行いますので、モバイル回線や、速度の遅いインターネット回線の場合、相当なダウンロードが発生するため果てしなく時間がかかります。

またWindows Updateに繋がらない時はこちらの方法しかありません。

そんな時は、WindowsのインストールISOがあれば、そこから修復が可能です。

ただし、稼働しているOSと同じバージョンでないとダメです。(WindowsUpdateの自動更新でバージョンアプしていると、その最新バージョンのISOが必要になります。)

最新のイメージの入手先

Windows 10

Windows 8.1

ここのツールからISOファイルを作成すると、install.wimでなくinstall.esdになってしまい手順が変わってきます。(esdでも出来ないことはないです)

UserAgentをLinuxに偽装してアクセスするかLinuxやMACでアクセスすると、ISOイメージをそのままダウンロードでき、そのISOの中はinstall.wimになっています。

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36

ISOファイルは、Windows 10 の場合ISOファイルをダブルクリックするとドライブにマウントされます。

8の場合は7-zip等で開いてinstall.wimを適当な場所に保存しましょう。

install.esdからの変換は「C:\test 」にinstall.wimを保存とすると

C:\Windows\Syetem32> dism /Export-Image /SourceImageFile:E:¥source¥install.esd /SourceIndex:1 /DestinationImageFile:c:¥test¥install.wim /compress:max

ここでは仮に「Eドライブ」にインストールメディアがあるとします。

オフラインで修復する

そのままイメージを指定して修復します。

ネットに繋がっているが遅い回線の場合は、/LimitAccess  オプションは外した方が良いかもしれません。

また、エラーで失敗する場合も/LimitAccess オプションを外すと、内部のバックアップを優先するようなので成功する場合があります。

あとネットワークアダプタを無効にすると成功してみたりと、この辺の挙動については良くわかりません。

install.wimを利用する場合

C:\Windows\Syetem32> dism /Online /Cleanup-Image /RestoreHealth /Source:WIM:E:\sources\install.wim:1 /LimitAccess

install.esdを利用する場合

C:\Windows\Syetem32> dism /Online /Cleanup-Image /RestoreHealth /Source:ESD:E:\sources\install.esd:1 /LimitAccess

完了したらsfc /scannow を実行してから再起動して確認しましょう。

ダメだった場合、イメージをマウントすると成功する場合があります。

イメージをマウントする

マウントするフォルダを作成します。

ここでは仮に、C:\mount フォルダを作成します。

ここにインストールイメージをマウントします。

C:\Windows\system32> dism /Mount-Image /ReadOnly /ImageFile:E:\sources\install.wim /index:1 /MountDir:C:\mount

Win10のProなので、ここではindex:1 を指定していますが、Win10のHOMEの場合は index:2  となります。

イメージの場所が「Dドライブだとしたら」 /ImageFile:E:  の所を /ImageFile:D:  として下さい。

マウントには多少時間がかかります。

マウントしたイメージから修復する

修復する下記コマンドを実行。

C:\Windows\Syetem32> dism /Online /Cleanup-Image /RestoreHealth /Source:C:\mount\windows /LimitAccess

修復が完了したら、イメージをアンマウントしておきます。

C:\Windows\Syetem32> dism /Unmount-Image /MountDir:C:\mount /discard

全てのバージョンのISOファイルを用意しておくのも大変ですが、せめて最新のものは用意しておくといいかもしれませんね。

正常なWindowsからWindowsフォルダを持ってくる方法

もし正常に動く同じバージョンのWindowsがあったら、そのPCのWindowsフォルダを丸ごと持ってきて、元のイメージに指定できます。

別PCのWindowsフォルダを、仮に「C:\mount」に保存したとします。

ソースがC:\mount\windows になります。

C:\Windows\Syetem32> Dism /Online /Cleanup-Image /RestoreHealth /Source:C:\mount\windows /LimitAccess

それでも修復できなかったら

リカバリーした方が早そうですね。

一応全てログが

C:\Windows\Logs\CBS\CBS.log にありますので、そこから追えるかも知れませんが、かなり厳しいと思います。

一応WinSxSのキャッシュを掃除してみるコマンド

まず調査

dism /Online /Cleanup-Image /AnalyzeComponentStore

そしてクリーンアップ

dism /Online /Cleanup-Image /StartComponentCleanup

再度sfc /scannowをしてみましょう。

install.wimのバージョンやインデックスを調べる方法

格納されている内容を確認する

C:\Windows\system32>dism /Get-wiminfo /wimfile:D:\sources\install.wim

展開イメージのサービスと管理ツール
バージョン: 10.0.15063.0

イメージの詳細: D:\sources\install.wim

インデックス: 1
名前: Windows 10 Pro
説明: Windows 10 Pro
サイズ: 15,619,822,436 バイト

インデックス: 2
名前: Windows 10 Home
説明: Windows 10 Home
サイズ: 15,441,371,540 バイト

インデックス1の詳細を確認する

C:\Windows\system32>dism /Get-wiminfo /wimfile:D:\sources\install.wim /index:1

展開イメージのサービスと管理ツール
バージョン: 10.0.15063.0

イメージの詳細: D:\sources\install.wim

インデックス: 1
名前: Windows 10 Pro
説明: Windows 10 Pro
サイズ: 15,619,822,436 バイト
WIM ブート可能 : いいえ
アーキテクチャ: x64
HAL: <未定義>
バージョン : 10.0.15063
Service Pack のビルド : 0
Service Pack のレベル : 0
エディション : Professional
インストール : Client
製品の種類 : WinNT
製品群 : Terminal Server
システム ルート : WINDOWS
ディレクトリ : 20828
ファイル : 104964
作成日時 : 2017/03/20 - 13:21:36
変更日時 : 2017/03/20 - 13:39:26
言語 :
        ja-JP (既定)

操作は正常に完了しました。

インデックス2の詳細を確認する

C:\Windows\system32>dism /Get-wiminfo /wimfile:D:\sources\install.wim /index:2

展開イメージのサービスと管理ツール
バージョン: 10.0.15063.0

イメージの詳細: D:\sources\install.wim

インデックス: 2
名前: Windows 10 Home
説明: Windows 10 Home
サイズ: 15,441,371,540 バイト
WIM ブート可能 : いいえ
アーキテクチャ: x64
HAL: <未定義>
バージョン : 10.0.15063
Service Pack のビルド : 0
Service Pack のレベル : 0
エディション : Core
インストール : Client
製品の種類 : WinNT
製品群 : Terminal Server
システム ルート : WINDOWS
ディレクトリ : 20666
ファイル : 103784
作成日時 : 2017/03/20 - 13:22:42
変更日時 : 2017/03/20 - 13:39:50
言語 :
        ja-JP (既定)

操作は正常に完了しました。