Відновлення сховища компонентів в Windows 8

Повертаючись до технології сховища компонентів (Component Store) в Windows 8 розглянемо сценарії його відновлення. Нагадаємо, що починаючи з Windows Vista Microsoft ввела концепцію компонентного обслуговування ОС (component based servicing). Завдяки компонентної структурі вдалося домогтися створення більш стабільної системи установки / видалення оновлень, патчів і пакетів оновлень SP. Ця ж система лежить в основі архітектури Windows 8. Файли сховища компонентів Windows на диску розташовуються в каталозі \Windows\WinSxS, має властивість з часом значно розширився в розмірах (докладніше про те, чому розмір цього каталогу з часом зростає і як зменшити розмір папки WinSxS читайте в цій статті).

Однак в деяких випадках сховище компонентів може пошкоджуватися, що призводить до проблем при установці оновлень Windows та іншого ПО Microsoft. Для відновлення сховища компонентів в попередніх версіях Windows (Windows Vista, Windows 7, Windows Server 2008 / R2) Microsoft розробила спеціальну утиліту - CheckSUR або System Update Readiness Tool (KB947821). Дана утиліта є досить великий за розміром (більше 350 Мб), і в міру вихід нових оновлень Windows регулярно оновлюється. Це означає, що кожен раз доводиться викачувати свіжу версію CheckSUR.

Порада. В одній з попередніх статей ми вже розглядали приклад використання CheckSUR для пошуку і відновлення пошкоджених компонентів: 0x800F0818 - помилка при ролей в Windows Server 2008 R2.

Що ж робить дана утиліта? System Update Readiness Tool перевіряє цілісність наступних ресурсів:

    Файли в каталогах:

  • % SYSTEMROOT% \ Servicing \ Packages
  • % SYSTEMROOT% \ WinSxS \ Manifests
    Вміст гілок реєстру:

  • % SYSTEMROOT% \ WinSxS \ Manifests
  • HKEY_LOCAL_MACHINE \ Schema
  • HKEY_LOCAL_MACHINE \ Components
  • HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Component Based Servicing

У тому випадку, якщо утилітою CheckSUR будуть виявлені помилки або невідповідності, вона спробує їх відновити.

Проблеми зі сховищем компонентів можуть викликати різні помилки при установці оновлень Windows. Нижче наведено список типових кодів помилок, які дана утиліта повинна усунути.

Список помилок WindowsUpdate, викликаних пошкодженням сховища компонентів

CodeErrorDescription
0 × 80070002ERROR_FILE_NOT_FOUNDThe system can not find the file specified.
0x8007000DERROR_INVALID_DATAThe data is invalid.
0x800F081FCBS_E_SOURCE_MISSINGThe source for the package or file not found.
0 × 80073712ERROR_SXS_COMPONENT_STORE_CORRUPTThe component store is in an inconsistent state.
0x800736CCERROR_SXS_FILE_HASH_MISMATCHA component's file does not match the verification information present in the component manifest.
0x800705B9ERROR_XML_PARSE_ERRORUnable to parse the requested XML data.
0 × 80070246ERROR_ILLEGAL_CHARACTERAn invalid character was encountered.
0x8007370DERROR_SXS_IDENTITY_PARSE_ERRORAn identity string is malformed.
0x8007370BERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAMEThe name of an attribute in an identity is not within the valid range.
0x8007370AERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUEThe value of an attribute in an identity is not within the valid range.
0 × 80070057ERROR_INVALID_PARAMETERThe parameter is incorrect.
0x800B0100TRUST_E_NOSIGNATURENo signature was present in the subject.
0 × 80092003CRYPT_E_FILE_ERRORAn error occurred while Windows Update reads or writes to a file.
0x800B0101CERT_E_EXPIREDA required certificate is not within its validity period when verifying against the current system clock or the time stamp in the signed file.
0x8007371BERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETEOne or more required members of the transaction are not present.
0 × 80070490ERROR_NOT_FOUNDWindows could not search for new updates.

У Windows 8 і Windows Server 2012 функціонал, аналогічний утиліті CheckSUR, вже вбудований в систему і називається Inbox Corruption Repair (Вбудоване відновлення компонентів). Вбудоване відновлення компонентів може працює в двох режимах:  фоновому і ручному. Фонове відновлення автоматично запускається в разі появи помилок при спробі встановити оновлення Windows Update. Windows в цьому випадку автоматично намагається виправити пошкоджений компонент і перевстановити пакет Windows Update. У тому випадку, якщо автоматичне відновлення не може самостійно виправити проблему, адміністратор може виправити помилки вручну, відновивши працездатне стану сховища компонентів. Зробити це можна за допомогою утиліти обслуговування образу DISM (команда Dism / Online / Cleanup-Image)або за допомогою Powershell (командлет Repair-WindowsImage).

Щоб перевірити стан сховища компонентів, відкрийте командний рядок з підвищеними привілеями і виконайте:

Dism / Online / Cleanup-Image / CheckHealth

Поради.

  1. DISM на відміну від більшості утиліт Windows чутлива до регістру символів.
  2. Команда Dism / Cleanup-Image зберігає логи в каталогах C: \ Windows \ Logs \ CBS \ CBS.log і C: \ Windows \ Logs \ DISM \ dism.log

Аналогічна команда Powershell:

Repair-WindowsImage -Online -CheckHealth

Перевірка CheckHealth займе кілька хвилин. Як ви бачите, поточний статус сховища компонентів в образі - Healthy (Здоровий), тобто відновлення не потрібно.

У тому випадку, якщо будуть виявлені якісь проблеми або помилки, слід запустити процедуру відновлення сховища командою:

Dism.exe / Online / Cleanup-Image / Restorehealth

Аналогічна Powershell команда:

Repair-WindowsImage -Online -RestoreHealth

В даному прикладі відновлення системних файлів пройшло успішно:

The restore operation completed successfully. The component store corruption was repaired.

У тому випадку, якщо система самостійно не змогла відновити деякі компоненти в сховище, вам може знадобиться дистрибутив (установчий диск) Windows 8. Вставте даний диск в привід або змонтуйте його iso образ. Припустимо, диску з дистрибутивом призначена буква E. Отримаємо список доступних версій Windows 8 на диску за допомогою команди PoSH:

Get-WindowsImage -ImagePath E: \ sources \ install.wim

В даному прикладі, ми бачимо, що на диску є тільки один спосіб (Windows 8 Pro) з індексом 1 (Index: 1).

Наступна команда запустить відновлення сховища з відновленням пошкоджених компонентів з оригінального способу Windows 8:

Repair-WindowsImage -Online -RestoreHealth -Source G: \ sources \ install.wim: 1

, де 1 - індекс версії образу в дистрибутиві, отриманий раніше.

Після завершення відновлення упевніться, що сховище компонентів знаходиться в працездатному стані (статус: Healthy)

Наступний (не завжди обов'язковий етап) - перевірка цілісності системних файлів за допомогою команди:

sfc / scannow
Порада. Якщо до відновлення сховища компонентів ви вдалися через проблеми з установкою оновлень Windows, запустіть службу Windows Update і скиньте локальних кеш оновлень. Для цього в командному рядку послідовно виконайте наступні команди:
net stop wuauserv net stop bits net stop cryptsvc ren% systemroot% \ SoftwareDistribution oldSD ren% systemroot% \ System32 \ catroot2 oldCat2 net start cryptsvc net start bits net start wuauserv