Перейти к основному содержанию
BeginPC.ru

Компьютер для новичков и не только

стилизованный компьютер с надписью sfc на мониторе

Операционная система имеет в своем составе большое количество системных файлов обеспечивающих ее нормальную работу. В случае, если один или несколько файлов окажутся поврежденными, то ОС не сможет полноценно функционировать. Это может выражаться, как ошибками и сбоями в процессе работы, например, крахом Проводника или проблемами с управлением компонентами Windows, так и невозможность компьютера загрузиться.

Причин повреждения системных файлов операционной системы Windows может быть множество. Это могут быть вирусы, твикеры, сознательное изменение файлов пользователем, повреждение жесткого диска и так далее. Разработчики компании Майкрософт предвидели возможность наступления такого события, поэтому ими была создана система проверки целостности системных файлов Windows (System File Checker tool). Она позволяет не только выявить изменения, но и вернуть все к первоначальному состоянию в автоматическом режиме, если это возможно.

Смысл работы сводится к сравнению системных файлов расположенных в папках Windows с эталонными образцами, которые хранятся в специальном хранилище компонентов Windows расположенном в папке WinSxS. Если они отличаются или файл отсутствует, то он заменяется оригинальным из хранилища.

Чтобы воспользоваться средством проверки системных файлов требуется командная строка запущенная с правами администратора компьютера. Для проверки служит команда sfc у которой есть несколько ключей. Для запуска проверки целостности всех защищенных файлов и автоматического исправления измененных или отсутствующих вводим команду sfc/scannow и ждем окончания процесса верификации файлов. Он может занять продолжительное время, так что запаситесь терпением. В конце будет показано итоговое сообщение.

утилита sfc не выявила нарушений целостности файлов

Не всегда требуется полное сканирование с автоматическим исправлением, поэтому есть еще несколько ключей, которые могут пригодиться.

  • /verifyonly — осуществляет только проверку всех системных файлов без попытки их автоматического восстановления
  • /scanfile — выполняет проверку и восстановление конкретного файла, требует указания полного пути к файлу
  • /verifyfile — проверка конкретного файла без автоматического исправления

Если в системе все в порядке, то сообщение уведомит, что защита ресурсов Windows не обнаружила нарушений целостности. В противном случае сообщение будет отличаться в зависимости от ситуации. Если Windows не может выполнить данную команду, то проделайте все то же самое в безопасном режиме.

В случае обнаружения поврежденных файлов и их успешной заменой корректными версиями, Windows известит об этом соответствующим сообщением. На этом можно считать операцию по проверке и восстановлению целостности системных файлов Windows успешно завершенной.

Защита ресурсов Windows выявила поврежденные файлы и успешно их восстановила

Восстановление хранилища компонентов

Однако возможна ситуация, когда само хранилище будет повреждено или отсутствовать. Что особенно актуально для любителей устанавливать кастомные сборки ОС вместо оригинальных образов. В этом случае работа утилиты sfc будет невозможна. Для решения проблемы можно попробовать выполнить автоматическое восстановление хранилища компонентов Windows с помощью команды доступной начиная с Windows 8:

dism /Online /Cleanup-Image /RestoreHealth

Владельцы 7 имеющие установленное обновление KB2966583 могут лишь выполнить проверку хранилища командой:

DISM /Online /Cleanup-Image /ScanHealth

Результаты выполнения можно узнать, посмотрев лог по адресу C:\Windows \Logs\CBS\Checksur.log

Ручное восстановление поврежденных файлов

Тем не менее, может случиться ситуация, когда сканирование покажет ошибки, однако защита ресурсов Windows не сможет автоматически их исправить. Сведения о них будут содержаться в файле лога CBS расположенного по адресу C:\Windows\Logs\CBS\CBS.log который можно открыть любым текстовым редактором.

Только для этого он должен быть запущен с правами администратора компьютера. В файле хранится много технической информации, но нас интересуют строчки содержащие [SR]. Их можно найти воспользовавшись поиском встроенным в редактор нажав комбинацию клавиш Ctrl+F или пойти другим путем и выполнить в командной строке запущенной от имени администратора следующую команду.

findstr /c:"[SR]" c:\windows\logs\CBS\CBS.log >c:\sfcresult.txt

Тем самым мы говорим Windows, что нужно в файле CBS.log найти все строчки содержащие [SR] и результат сохранить на диск C в файле sfcresult.txt. Таким образом, в файле окажется отфильтрованная информации относящаяся к работе команды sfc. Осталось его внимательно изучить, не забывая обращать внимание на дату и время указанные в строке со временем проведения сканирования, чтобы не изучать старые результаты. В данном случае система успешно восстановила файл autoplay.dll используя эталонный файл из хранилища в папке WinSxS, о чем в логе есть соответствующая запись.

2017-02-04 13:30:58, Info                  CSI    0000032f [SR] Repairing 1 components
2017-02-04 13:30:58, Info                  CSI    00000330 [SR] Beginning Verify and Repair transaction
2017-02-04 13:30:59, Info                  CSI    00000331 [SR] Repairing corrupted file [ml:520{260},l:46{23}]"\??\C:\Windows\System32"\[l:24{12}]"autoplay.dll" from store
2017-02-04 13:30:59, Info                  CSI    00000332 Repair results created:
POQ 140 starts:
     0: Move File: Source = [l:192{96}]"\SystemRoot\WinSxS\Temp\PendingRenames\e0b17dc6d17ed201983d0000f415f015._0000000000000000.cdf-ms", Destination = [l:104{52}]"\SystemRoot\WinSxS\FileMaps\_0000000000000000.cdf-ms"
    1: Move File: Source = [l:162{81}]"\SystemRoot\WinSxS\Temp\PendingRenames\3a1480c6d17ed201993d0000f415f015.$$.cdf-ms", Destination = [l:74{37}]"\SystemRoot\WinSxS\FileMaps\$$.cdf-ms"
    2: Move File: Source = [l:214{107}]"\SystemRoot\WinSxS\Temp\PendingRenames\a29d89c6d17ed2019a3d0000f415f015.$$_system32_21f9a9c4a2f8b514.cdf-ms", Destination = [l:126{63}]"\SystemRoot\WinSxS\FileMaps\$$_system32_21f9a9c4a2f8b514.cdf-ms"
    3: Hard Link File: Source = [l:236{118}]"\SystemRoot\WinSxS\amd64_microsoft-windows-autoplay_31bf3856ad364e35_6.1.7601.17514_none_04c88123045c625c\autoplay.dll", Destination = [l:72{36}]"\??\C:\Windows\System32\autoplay.dll"

POQ 140 ends.
2017-02-04 13:30:59, Info                  CSI    00000333 [SR] Repair complete

В случае невозможности исправить поврежденный системный файл автоматически, нам придется заняться исправлением самостоятельно. Весь смысл операции сводится к замене имеющихся на компьютере файлов на заведомо исправные копии. Их можно скопировать с другого компьютера с аналогичной версией операционной системы Windows и сохранить в какую-нибудь папку на вашей машине или на флешку.

Однако просто так заменить файлы операционная система вам не позволит, сначала придется получить соответствующий допуск. Это можно сделать в графическом интерфейсе, о чем мы уже писали. Здесь мы рассмотрим, как это можно сделать с помощью командной строки. Сначала нам нужно стать владельцем поврежденного файла, выполним следующую команду.

takeown /f полный_путь_к_файлу, например
takeown /f C:\windows\system32\autoplay.dll

Полезный прием упрощающий выполнение данной операции. Теперь предоставим группе администраторов полный доступ к проблемному файлу. Воспользуемся командой icacls. В Windows на английском языке нужно заменить «АДМИНИСТРАТОРЫ» на «ADMINISTRATORS».

icacls полный_путь_к_файлу /GRANT АДМИНИСТРАТОРЫ:F, например
icacls C:\windows\system32\autoplay.dll /GRANT АДМИНИСТРАТОРЫ:F

Теперь мы можем заменить старый файл на новый оригинальный. Это можно сделать как воспользовавшись Проводником Windows так и продолжив работу в командной строке.

copy полный_путь_к_новому_файлу полный_путь_к_заменяемому_файлу
copy D:\new\autoplay.dll C:\windows\system32\autoplay.dll

В результате всех манипуляций, мы заменили поврежденный системный файл вручную. Остался последний штрих, чтобы подстраховаться от возможных проблем в будущем, нам нужно восстановить прежнего владельца объекта в лице TrustedInstaller и вернуть себе прежние права. Опять-таки это можно выполнить с помощью Проводника Windows или с помощью следующих команд:

icacls C:\windows\system32\autoplay.dll /setowner "NT Service\TrustedInstaller"
icacls C:\windows\system32\autoplay.dll /GRANT:r АДМИНИСТРАТОРЫ:RX

команды ручной замены поврежденного системного файла

Где еще можно взять оригинальные системные файлы

Копировать файлы с другого компьютера способ довольно удобный и простой, но не всегда под рукой есть еще компьютер с аналогичной операционкой. В этом случае можно воспользоваться диском с дистрибутивом Windows или диском восстановления системы, если вы его делали.

Сложность в том, что информация на них хранится в запакованном виде в файле с расширением .wim и поэтому придется немного потрудиться. Чтобы не возится с командной строкой, воспользуемся бесплатным архиватором 7-zip. Если у вас на компьютере он отсутствует, то его можно скачать здесь, наверняка вам еще пригодится для работы с архивами.

Интересующие нас системные файлы находятся в файле-образе с именем install.wim в папке sources, при этом образ может содержать сразу несколько разных версий операционной системы в соответствующих папках, будьте внимательны. На диске восстановления файл имеет имя boot.wim.

Если компьютер не загружается

Все выше сказанное относилось к случаю, когда компьютер мог загружаться и мы имели возможность выполнять проверку прямо в Windows. Однако повреждения системных файлов может быть настолько критичным, что он не сможет загрузиться. В этом случае можно выполнить проверку системных файлов Windows в среде восстановления WinRE (Windows Recovery Enviroment). Для этого загружаемся в среду восстановления, как описано здесь и запускаем командную строку.

меню windows re

А дальше все тоже самое только команда будет немного отличаться, поскольку появится еще несколько параметров.

sfc /scannow /OFFBOOTDIR=X:\ /OFFWINDIR=X:\windows

Здесь X нужно заменить на букву диска на которой находится ОС которую мы хотим проверить. Сложность в том, что буквы дисков в Windows RE могут не совпадать с буквами разделов в самой Windows. Чтобы их узнать выполним последовательно следующие команды.

Diskpart
List disk
Sel disk 0
Detail disk
Exit

В результате получим список томов на системном диске и соответствующие им метки. Нужную метку подставим вместо X в команду запуска сканирования системных файлов. Впрочем узнать нужную метку диска можно и по другому, методом перебора.

cd /d C:
dir /b

Здесь мы сначала перешли на диск C, а затем вывели список файлов в этом разделе, по которому мы можем понять какой это диск на самом деле. Не угадали, тогда переходим на следующую букву и опять смотрим список.

cd /d D:
dir /b

Методом «научного тыка» рано или поздно будет найден системный диск. Допустим в среде восстановления у диска с Windows будет буква G и мы хотим проверить оригинальность и в случае необходимости автоматически исправить файл «C:\Windows\System32\msconfig.exe», тогда команда примет следующий вид:

sfc /scanfile=G:\Windows\System32\msconfig.exe /offbootdir=G:\ /offwindir=G:\windows

Мы рассмотрели различные способы восстановления поврежденных системных файлов в Windows в автоматическом и ручном режимах, в том числе с использованием среды восстановления Windows. С ее помощью вы сможете устранить неполадки в работе компьютера вызванные поврежденными компонентами операционной системы.