Windows: Проверка и восстановление системных файлов и компонентов.
Гигантское количество проблем в операционных системах Windows возникает из-за повреждения системных файлов. Для восстановления критичных файлов предусмотрена функция защиты системных файлов. Система сама мониторит изменения особо важных файлов и заменяет их эталонными версиями из образа установки (хранилища компонентов Windows), если те были изменены или повреждены сторонним софтом. Однако, если поврежден образ установки или повреждены не критичные но значимые файлы, ОС Windows требуется помощь. Помочь можно с помощью утилит SFC и DISM. Ниже подробный мануальчик по восстановлению ОС с использованием этих утилит.
1. SFC. (System Files Checker)
Утилита для восстановления номер раз. Восстанавливает файлы системы из образа установки. Присутствует во всех версиях Windows начиная с Windows 2000. Механика работы программы отличается в зависимости от версии ОС, но общий принцип один и тот же -- программа проверяет целостность системных файлов и отменяет обнаруженные изменения. Эталоны файлов программка может брать из нескольких источников.
Список источников в порядке убывания.
Для версий до Windows XP включительно:
1. Папка %WinDir%\System32\Dllcache\
2. Путь к дистрибутиву указанный в параметре SourcePath ветки реестра HKLM\Software\Policies\Microsoft\Windows NT\Setup
3. Путь к дистрибутиву указанный в параметре SourcePath ветки реестра HKLM\Software\Microsoft\Windows\CurrentVersion\Setup
4. CD-ROM.
Для версий начиная с Windows Vista и выше:
1. Папка %WinDir%\winsxs\Backup
2. Путь к дистрибутиву указанный в параметре SourcePath ветки реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup
3. Путь к дистрибутиву указанный в параметре SourcePath ветки реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
4. Путь к дистрибутиву указанный в параметре SourcePath ветки реестра HKLM\Software\Policies\Microsoft\Windows NT\Windows File Protection
5. Путь к дистрибутиву указанный в параметре SourcePath ветки реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\ServicePackSourcePath
6. CD-ROM.
Применение программы:
1. Сканировать текущую ОС немедленно с восстановлением поврежденных файлов.
sfc /scannow
2. Сканировать текущую ОС немедленно без восстановлением поврежденных файлов.
sfc /verifyonly
3. Сканировать автономную ОС немедленно с восстановлением поврежденных файлов.
sfc /scannow /OFFWINDIR=<автономная папка Windows> /OFFBOOTDIR=<автономная папка загрузки>
4. Сканировать отдельный файл
sfc /SCANFILE=C:\windows\system32\kernel32.dll
Если программа пишет ошибки восстановления, детальную информацию можно посмотреть в журнале. Журнал выполнения пишется в папку %windir%\logs\cbs\cbs.log.
DISM (Deployment Image Servicing and Management).
Утилита для восстановления номер два. DISM проверяет и восстанавливает хранилище компонентов Windows (то место откуда sfc берет файлы для восстановления). Утилита присутствует начиная с Windows Vista, однако возможность восстановления хранилища из коробки работает только начиная с Windows 8. Для восстановления хранилища в Windows 7 с помощью DISM, нужно установить обновление KB2966583. Скачать можно с оф.сайта или отсюда.
В отличии от SFC, DISM может подключиться к серверам Майкрософт и взять эталонные файлы оттуда.
Команды для Windows 8 и выше:
Проверить наличие признака повреждения хранилища компонентов образа Windows (флага CBS):
DISM /Online /Cleanup-Image /CheckHealth
Полное сканирование хранилища компонентов на наличие повреждений в системных образа Windows:
DISM /Online /Cleanup-Image /ScanHealth
Восстановление поврежденных компонентов:
DISM /Online /Cleanup-Image /RestoreHealth
В Windows 7 отсутствует возможность проверки флага CBS, а команды сканирования и восстановления объединены в одну:
DISM /Online /Cleanup-Image /ScanHealth
Также как и SFC, dism может восстановить образ используя установочные файлы Windows. Для этого нужно указать путь до .wim или .esd файла и индекс образа в ключе /source
Индекс можно узнать powershell-командой
Get-WindowsImage -ImagePath "D:\sources\install.wim"
Команда восстановления будет выглядеть примерно так:
DISM /online /cleanup-image /restorehealth /source:WIM:E:\sources\install.wim:1
DISM /online /cleanup-image /restorehealth /source:ESD:E:\sources\install.esd:1
где 1 - индекс образа.
Чтобы dism не искал файлы на серверах Microsoft, а сразу брал их из файла установки можно дописать ключ /limitaccess
DISM /online /cleanup-image /restorehealth /source:WIM:E:\sources\install.wim:1 /limitaccess
DISM /online /cleanup-image /restorehealth /source:ESD:E:\sources\install.esd:1 /limitaccess
Можно еще восстановить образ автономной ОС. Чтобы это сделать, вместо ключа /Online написать ключ /Image:<путь до ОС>. Например
dism /image:C:\ /Cleanup-Image /RestoreHealth /Source:WIM:E:\sources\install.wim:1
Если программа пишет ошибки восстановления, детальную информацию также можно посмотреть в журнале. Журнал выполнения пишется в папку %windir%\Logs\DISM\dism.log.
Иногда DISM выдает ошибку 0x800f081f Не удалось найти исходные файлы хотя образ точно тот. Лечится очисткой компонентов образа системы с помощью команды:
Dism.exe /online /Cleanup-Image /StartComponentCleanup
Общий алгоритм для восстановления системных файлов.
Насколько я понял, dism не восстанавливает сами системные файлы, он работает только с хранилищем компонентов Windows. После восстановления хранилища компонентов либо ОС сама подменит нужные системные файлы, либо их нужно заменить с помощью sfc. Вообщем, алгоритм действий примерно следующий:
1. Восстановление с помощью sfc.
sfc /scannow
2. Если sfc пишет ошибки, запускаем сначала dism по завершении снова sfc.
DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow
3. Если в пункте 2 тоже возникают ошибки, открываем логи и разбираемся.