Повертаючись до технології сховища компонентів (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, викликаних пошкодженням сховища компонентів
Code | Error | Description |
0 × 80070002 | ERROR_FILE_NOT_FOUND | The system can not find the file specified. |
0x8007000D | ERROR_INVALID_DATA | The data is invalid. |
0x800F081F | CBS_E_SOURCE_MISSING | The source for the package or file not found. |
0 × 80073712 | ERROR_SXS_COMPONENT_STORE_CORRUPT | The component store is in an inconsistent state. |
0x800736CC | ERROR_SXS_FILE_HASH_MISMATCH | A component's file does not match the verification information present in the component manifest. |
0x800705B9 | ERROR_XML_PARSE_ERROR | Unable to parse the requested XML data. |
0 × 80070246 | ERROR_ILLEGAL_CHARACTER | An invalid character was encountered. |
0x8007370D | ERROR_SXS_IDENTITY_PARSE_ERROR | An identity string is malformed. |
0x8007370B | ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME | The name of an attribute in an identity is not within the valid range. |
0x8007370A | ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE | The value of an attribute in an identity is not within the valid range. |
0 × 80070057 | ERROR_INVALID_PARAMETER | The parameter is incorrect. |
0x800B0100 | TRUST_E_NOSIGNATURE | No signature was present in the subject. |
0 × 80092003 | CRYPT_E_FILE_ERROR | An error occurred while Windows Update reads or writes to a file. |
0x800B0101 | CERT_E_EXPIRED | A required certificate is not within its validity period when verifying against the current system clock or the time stamp in the signed file. |
0x8007371B | ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE | One or more required members of the transaction are not present. |
0 × 80070490 | ERROR_NOT_FOUND | Windows 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
Поради.
- DISM на відміну від більшості утиліт Windows чутлива до регістру символів.
- Команда 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