Восстановление хранилища компонентов при помощи средства проверки готовности системы к обновлению (SURT)

Метки:  , , , , , ,

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

Метод подходит только для операционной системы Windows 7. Для более новых ОС (Windows 8+) средство SURT не требуется, поскольку весь функционал интегрирован в систему и доступен через API стека обслуживания, из скриптов Powershell и сервисной утилиты dism.exe. Это подтверждают высказывания некоторых сотрудников Microsoft: Instead of needing to download and run a separate tool, the diagnostic and repair functionality in the System Update Readiness Tool is now built into Windows in Windows 8 and Windows Server 2012.

Что же это за средство проверки готовности системы к обновлению?

Средство проверки готовности системы к обновлению (System Update Readiness Tool, SURT, CheckSUR) - утилита, поставляемая в виде пакета обновления (с целью включения эталонных файлов хранилища компонентов), предназначающаяся для устранения проблем хранилища компонентов Windows.

Представляет собой набор (базу) файлов компонентов, регулярно обновляемый (был, до некоторого времени) по мере выхода новых исправлений. Грубо говоря, утилита SURT это отличный способ для большинства пользователей проанализировать хранилище компонентов в собственной системе на разного рода повреждения, и иметь возможность устранить найденные повреждения в случае, если встроенная база имеет необходимые для восстановления файлы.

Первый запуск SURT

Для начала необходимо получить пакет обновления по ссылке KB947821. Находим на странице ссылку для соответствующей операционной системы и разрядности (например: Средство проверки готовности системы к обновлению для 64-разрядных (x64) версий Windows 7 (KB947821) [май 2014 г.]), напротив пункта жмем кнопку Загрузить и в открывшемся окне находим файл вида windows6.1-kb947821-v33-x64_09970839dac6c42dc911c5b945d0639b07cfc79a.msu. После скачивания запускаем пакет обновления.

surt

Поскольку SURT представляет собой утилиту, в процессе выполнения кода образа KB947821, он обнаруживает несоответствия (фактически ошибки) в хранилище пакетов и пытается исправить их, если находит соответствующие файлы для восстановления в собственной внутренней базе (полезной нагрузке пакета обновления).

При установке пакета SURT стоит набраться терпения, поскольку на практике встречались станции, установка на которых занимала несколько часов.

После завершения процесса установки SURT в систему, появится сообщение Установка завершена, закрываем окно нажатием кнопки Закрыть. Результатом работы утилиты является файл отчета о проверке хранилища компонентов на наличие разного рода ошибок.

Анализ результатов

После окончания установки (статус: Установка завершена) проверяем лог-файл %Windir%\Logs\CBS\CheckSUR.log на предмет наличия записей об ошибках. На наличие проблем в хранилище компонентов обычно указывают сообщения о найденных ошибках (Found X errors) или недоступных файлов для восстановления (Unavailable repair files):

По изначальному замыслу разработчиков, средство SURT предназначалось для автоматического исправления найденных в хранилище компонентов ошибок, именно для этого в продукт поместили полный каталог эталонных файлов. Тем не менее, со временем ситуация изменилась:

..в последний раз SURT обновлялся в октябре 2014 года (о чем есть информация на странице загрузки Microsoft), а исправлений на операционную систему с того момента вышло довольно большое количество, соответственно многие файлы в базе средства попросту отсутствуют.

Вот именно поэтому, в случае обнаружения в лог-файле %Windir%\Logs\CBS\CheckSUR.log (битых) ненайденных файлов для восстановления, у нас имеется несколько вариантов решения.

Вариант 1: файловая часть

  • Проверяем результаты работы утилит восстановления хранилища в лог-файле %Windir%\Logs\CBS\CheckSUR.log. К примеру, в файле журнала могут быть обнаружены следующие данные:

    После того, как вы определили имена, есть несколько возможных вариантов решений:

    1. найти указанные в логе файлы на работоспособной операционной системе аналогичной редакции/версии;
    2. по имени проблемных файлов пакетов найти соответствующее [родительское] обновление (KB??????), которому принадлежит недостающие файлы (в примере выше это KB3037574), скачать его из Центра загрузок Майкрософт или Центра обновления Майкрософт, или попросту используя поисковик. Затем распаковать из скачанного обновления все необходимые файлы.
  • Все найденные/извлеченные недостающие файлы разместить в системе следующим образом:
    • *.mum- и *.cat-файлы складываются в %Windir%\Temp\CheckSUR\servicing\packages;
    • *.manifest-файлы складываются в %Windir%\Temp\CheckSUR\winsxs\manifests\;
  • Повторно запустить SURT;

Вариант 2: удаление битого пакета

Этот вариант заключается в ручном удалении проблемного пакета из командной строки.

  • По тем же логам вычисляем наименование пакета, в нашем случае это Package_for_KB3037574~31bf3856ad364e35~amd64~~6.1.1.0;
  • после этого пробуем удалить его при помощи утилиты dism:

    dism /Online /Remove-Package /PackageName:Package_for_KB3037574~31bf3856ad364e35~amd64~~6.1.1.0

  • Выполняем повторный запуск SURT;

Если получаем ошибку, к примеру 0x8007005, ошибка 5, отказано в доступе.. тогда переходим к следующему методу.

Вариант 3: реестровая часть

Обычно этот вариант предлагается как последняя надежда, когда остальные способы оказались бессильны.

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

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

  • запускаем редактор реестра regedit.exe;
  • перемещаемся в ветку HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages и для каждого найденного проблемного файла повторяем следующие шаги:
    • ищем интересующий нас подключ реестра (например, Package_for_KB3037574~31bf3856ad364e35~amd64~~6.1.1.0.mum);
    • меняем разрешения безопасности подключа: выделяем (ставим курсор) интересующую нас запись, нажимает правую кнопку мыши - пункт меню разрешения - выделяем курсором текущего пользователя - в нижней части окна ставим чекбокс напротив разрешения Полный доступ. Применяем изменения через кнопку OK. В случае необходимости меняем владельца объекта.
    • выполняем удаление записи:

  • после удаления всех требуемых записей реестра, запускаем Центр обновления Windows и повторно инициируем поиск обновлений. После определения списка устанавливаемых обновлений, выполняем их установку. Проблемный пакет, в этом случае, должен быть повторно загружен и установлен.
  • после окончания процесса установки повторно запускаем SURT;

Повторный запуск SURT

После выполнения действий, описанных в вариантах решений (выше), необходимо повторно произвести запуск средства проверки готовности системы к обновлению (используя все тот же скачанный файл обновления KB947821). При повторном запуске средство проверки готовности системы к обновлению сможет "подхватить" распакованные и размещенные нами файлы из каталога %Windir%\Temp\CheckSUR и произвести восстановление хранилища компонентов. Если процедура восстановления завершилась успешно, то в лог-файле %Windir%\Logs\CBS\CheckSUR.log можно будет увидеть следующие записи:

Об успешном восстановлении хранилища компонентов при помощи средства проверки готовности системы к обновлению можно говорить в случае, когда в файле количество найденных ошибок (Found X errors) соответствует количеству исправленных (Fixed X errors). Статус No errors detected говорит о том, что ошибок не было изначально.

Комментарии: 5

  1. Андрей33

    На мой взгляд не совсем оптимально. Особенно в большой корпоративной среде.
    Если обновление SURT уже стоит в винде, то командой запускаем
    dism /online /cleanup-image /scanhealth
    Потом читаем лог сурта %SYSTEMROOT%\Logs\CBS\CheckSUR.log
    Скачиваем апдейты которые указаны в логе.
    Не переименовывая кладем их в папку %SYSTEMROOT%\CheckSUR\packages (Ее нет создаем)
    Запускаем по новой
    dism /online /cleanup-image /scanhealth
    https://docs.microsoft.com/en-US/troubleshoot/windows-server/deployment/fix-windows-update-errors#how-to-fix-errors-that-are-found-in-the-checksur-log-file
    И все собственно, компонентую модель удаленно же можно проверить
    dism /online /get-features

    1. einaare

      а последняя команда для Win7 актуальна?

  2. Андрей33

    Да, конечно, все команды описанные в моем комментарии для Win7.

  3. st9202

    Ссылка на обновление KB947821 битая, поправьте пожалуйста

    1. einaare

      поправил, спасибо.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *