Траблшутинг SFC: Windows Resource Protection found corrupt files but was unable to fix
Архитектура хранилища компонентов (WinSxS)
При попытке восстановить системные файлы серверной ОС администратор запускает команду sfc /scannow, но вместо успешного завершения получает сообщение: "Защита ресурсов Windows обнаружила поврежденные файлы, но не может восстановить некоторые из них. Подробные сведения см. в файле CBS.Log" (Windows Resource Protection found corrupt files but was unable to fix some of them).
Механика сбоя:
Утилита SFC (System File Checker) работает просто: она сканирует активные файлы в C:\Windows\System32 и сравнивает их хэши с резервными копиями в хранилище компонентов WinSxS (Windows Side-by-Side). Если файл поврежден, SFC берет копию из WinSxS и заменяет битый. Эта ошибка возникает, когда само эталонное хранилище WinSxS повреждено (из-за сбоя диска, жесткого выключения или криво вставшего накопительного обновления CU). SFC просто неоткуда взять здоровый файл.
Дерево решений: Восстановление образа Windows (DISM)
Сценарий 1: Автоматическое восстановление через DISM (Интернет/WSUS)
Инструмент DISM (Deployment Image Servicing and Management) умеет чинить само хранилище WinSxS, скачивая эталонные файлы с серверов Windows Update (или корпоративного WSUS).
- Откройте CMD от имени Администратора.
- Запустите проверку и ремонт образа:
DISM /Online /Cleanup-Image /RestoreHealth - Если команда завершилась на 100% с сообщением "Операция успешно завершена" (The restore operation completed successfully), снова запустите
sfc /scannow— теперь файлы будут исправлены.
Сценарий 2: Восстановление DISM из локального ISO-образа (Без интернета)
Если сервер отключен от интернета (Air-gapped) или WSUS не имеет нужных файлов, DISM выдаст ошибку 0x800f081f (Source files could not be found). Нужен установочный ISO.
- Смонтируйте ISO-образ вашей версии Windows Server (например, диск
D:). - Узнайте индекс вашей редакции (Standard/Datacenter) внутри файла install.wim:
dism /Get-WimInfo /WimFile:D:\sources\install.wim(Предположим, индекс = 2). - Запустите DISM с явным указанием источника (LimitAccess отключает обращение к WSUS):
DISM /Online /Cleanup-Image /RestoreHealth /Source:WIM:D:\sources\install.wim:2 /LimitAccess
Сценарий 3: Расшифровка журнала CBS.log (Точечный ремонт)
Если ничего не помогает, найдите, какой именно файл не может быть восстановлен.
# Скрипт фильтрации CBS.log от лишнего мусора, вывод только ошибок SFC
findstr /c:"[SR]" %windir%\Logs\CBS\CBS.log > "%userprofile%\Desktop\sfcdetails.txt"Откройте sfcdetails.txt. Вы увидите строки вида "Cannot repair member file... tcpip.sys". Это позволит вам вручную заменить битый файл, загрузившись с WinPE (LiveCD).
Типовые ошибки администраторов
- Очистка папки WinSxS руками: Многие 'чистят' диск, удаляя файлы из WinSxS. Это смертный приговор ОС! SFC и DISM сломаются навсегда. Для очистки используйте только команду:
DISM /Online /Cleanup-Image /StartComponentCleanup.
Повреждение хранилища компонентов (WinSxS) — частая причина падения серверов. Доверьте инфраструктуру системным администраторам ITSTM. Мы проведем Health Check ОС, корректно установим накопительные пакеты (CU) и гарантируем бесперебойную работу серверов 24/7 без переустановок.
Частые вопросы (FAQ)
Почему команда sfc работает только до 14% или 20% и зависает?
Обычно это признак физического повреждения диска (Bad blocks) или сбоя драйвера контроллера. Сначала выполните 'chkdsk C: /f /r' и перезагрузитесь, чтобы исключить аппаратную проблему.
Можно ли использовать install.esd вместо install.wim в команде DISM?
Да. Если ваш установочный диск (часто это Media Creation Tool) содержит сжатый файл install.esd, синтаксис меняется на: /Source:ESD:D:\sources\install.esd:1
В чем отличие ключей /ScanHealth и /RestoreHealth?
ScanHealth только проверяет хранилище WinSxS на ошибки и пишет лог (Read-only). RestoreHealth выполняет сканирование и АКТИВНО пытается скачать/заменить битые файлы (Write operation).
Надо ли отключать антивирус перед SFC / DISM?
Настоятельно рекомендуется. Антивирусные драйверы фильтров могут блокировать доступ SFC к защищенным системным файлам на запись, вызывая ложные срабатывания (Access Denied).