Добавить в корзинуПозвонить
Найти в Дзене
ТЕХНО 89

🔧 Архитектура порядка: как DISM, SFC и CBS.log чинят Windows без магии и переустановок

В эпоху нейросетей-диагностов и облачных телеметрических дашбордов многие забывают: Windows всё ещё работает на железобетонной логике транзакций. Component-Based Servicing — это не реликт. Это хирургический протокол. DISM готовит донорский материал, SFC делает пересадку, а CBS.log ведёт медицинскую карту. Риск вмешательства минимален. Точность абсолютна. Ниже — полевая инструкция, от калибровки для новичков до интеграции в DevOps-конвейеры. 1️⃣ Подготовка поля. Откройте терминал от имени администратора (Win + X). Оставьте ≥ 15 ГБ на диске C:. На полчаса отключите сторонние антивирусы — они часто принимают TrustedInstaller за угрозу. 2️⃣ Восстановление архива. Запустите DISM. Прогресс может замереть на 20–40% — это не зависание, а индексация манифестов. dism /Online /Cleanup-Image /RestoreHealth 3️⃣ Замена файлов. Только после успешного DISM вызывайте SFC. Он работает с локальным хранилищем, а не с интернетом. sfc /scannow 4️⃣ Фиксация изменений. Перезагрузка обязательна. Без неё систем
Оглавление

В эпоху нейросетей-диагностов и облачных телеметрических дашбордов многие забывают: Windows всё ещё работает на железобетонной логике транзакций. Component-Based Servicing — это не реликт. Это хирургический протокол. DISM готовит донорский материал, SFC делает пересадку, а CBS.log ведёт медицинскую карту. Риск вмешательства минимален. Точность абсолютна. Ниже — полевая инструкция, от калибровки для новичков до интеграции в DevOps-конвейеры.

Ритуал восстановления: пошагово, без паники

1️⃣ Подготовка поля. Откройте терминал от имени администратора (Win + X). Оставьте ≥ 15 ГБ на диске C:. На полчаса отключите сторонние антивирусы — они часто принимают TrustedInstaller за угрозу.

2️⃣ Восстановление архива. Запустите DISM. Прогресс может замереть на 20–40% — это не зависание, а индексация манифестов.

dism /Online /Cleanup-Image /RestoreHealth

3️⃣ Замена файлов. Только после успешного DISM вызывайте SFC. Он работает с локальным хранилищем, а не с интернетом.

sfc /scannow

4️⃣ Фиксация изменений. Перезагрузка обязательна. Без неё система продолжит использовать закэшированные дескрипторы.

5️⃣ Верификация. Откройте C:\Windows\Logs\CBS\CBS.log. Ищите маркер [SR]. Фраза successfully repaired — ваш зелёный свет.

Инженерный протокол: для тех, кто пишет код, а не кликает

⚙️ Контекст исполнения. SFC и DISM требуют прав NT SERVICE\TrustedInstaller. В скриптах используйте Start-Process -Verb RunAs или psexec -s. Обычный Administrator иногда не проходит фильтр ACL.

🤖 Пайплайн-интеграция. Готовая функция для CI/CD. Возвращает чистый лог и код завершения. Идеально для Ansible, GitHub Actions или Azure Runbooks.

function Invoke-WindowsIntegrityCheck {
param([string]$LogPath = "$env:TEMP\cbs_check_$(Get-Date -Format 'yyyyMMdd_HHmm').log")
Write-Host "▶ DISM /RestoreHealth" -ForegroundColor Cyan
$dism = Start-Process dism.exe -ArgumentList "/Online","/Cleanup-Image","/RestoreHealth","/Quiet" -NoNewWindow -Wait -PassThru
if ($dism.ExitCode -ne 0) { throw "DISM failed with code 0x$($dism.ExitCode.ToString('X8'))" }
Write-Host "▶ SFC /scannow" -ForegroundColor Cyan
$sfc = Start-Process sfc.exe -ArgumentList "/scannow" -NoNewWindow -Wait -PassThru
if ($sfc.ExitCode -gt 1) { Write-Warning "SFC returned non-clean state: 0x$($sfc.ExitCode.ToString('X8'))" }
Select-String -Path "$env:windir\Logs\CBS\CBS.log" -Pattern "(?i)(\[SR\]|0x800f|corrupt|cannot repair)" |
Select-Object -Last 50 |
ForEach-Object { "$($_.LineNumber) | $($_.Line)" } |
Out-File $LogPath -Encoding UTF8
return $LogPath
}

📦 Offline-сценарии и контейнеры. В Windows-контейнерах /Online недоступен. Работайте через /Image:\path. В air-gapped средах добавляйте /LimitAccess + локальный install.wim. Сверяйте билды через winver.

📊 Телеметрия инженера. CBS.log — это транзакционный журнал. Ищите Begin/Commit/Rollback CBS Session. Ошибки 0x800f* — отсутствие донора. В 24H2/25H2 внутри <Provider> появились JSON-вставки: игнорируйте их, если нет Error или Corrupt.

I/O-дисциплина. На NVMe — 5–15 минут. На HDD — до двух часов. Не запускайте параллельно с chkdsk, бэкапами или индексацией. CBS не любит конкуренцию за дескрипторы файлов.

🔴 Диагностическая матрица: симптом → причина → вмешательство

🔸 0x800f081f / 0x800f0906 — хранилище компонентов не находит донора. 👉 Подключите ISO точной сборки: /Source:wim:D:\sources\install.wim:1 /LimitAccess.
🔸 Resource Protection could not perform... — блокировка на уровне драйвера или файловой системы. 👉 Отключите EDR, выполните chkdsk C: /f /r, повторите цикл.
🔸 SFC зависает на 100% >40 мин — файл захвачен процессом или повреждена NTFS-структура. 👉 Найдите блокировку через handle.exe, перезагрузитесь, запустите из WinRE.
🔸 cannot repair для ntdll.dll / kernel32.dll — аппаратный дрейф. 👉 mdsched.exe или memtest86+, SMART-диагностика, обновление контроллеров хранения.
🔸 DISM останавливается на 20.4% — рассинхронизация манифестов WinSxS. 👉 Извлеките .manifest из ISO, замените вручную, перезапустите.
🔸 SFC молчит, но система нестабильна — проблема вне системного дерева. 👉 Reliability Monitor, Event Viewer, ProcMon для трассировки профилей и реестра.

📖 Чтение пульса системы: как не утонуть в логе

🔹 [SR] Beginning Verify... — транзакция запущена.
🔹 Successfully repaired file... — замена подтверждена подписью.
🔹 Error CSI 000000xx (F) STATUS_... — критический отказ, требующий ручного вмешательства.
🔹 Cannot repair member file... — источник недоступен или файл заблокирован.
🔹 CBS Session: 0x... completed — финализация. Сверяйте ExitCode.

💻 Инструмент парсинга:

$CBS = "$env:windir\Logs\CBS\CBS.log"
$Out = "$env:USERPROFILE\Desktop\CBS_Integrity_$(Get-Date -Format 'yyyyMMdd_HHmm').txt"
if (!(Test-Path $CBS)) { Write-Error "CBS.log не найден. Запустите sfc /scannow хотя бы один раз."; return }
Select-String -Path $CBS -Pattern "(?i)(\[SR\]|0x800f|corrupt|cannot repair|failed|STATUS_)" |
Select-Object -Last 80 |
ForEach-Object {
$time = ($_.Line -split ",")[0].Trim()
$level = if ($_.Line -match "Error") { "🔴" } elseif ($_.Line -match "Warning") { "🟡" } else { "🟢" }
"$level $time | $($_.Line.Substring($_.Line.IndexOf(','))).Trim()"
} | Out-File $Out -Encoding UTF8
Write-Host "✅ Отчёт сохранён: $Out" -ForegroundColor Green

💡 Полевые приёмы, которые экономят часы

🔹 Точечный скальпель: sfc /scanfile=C:\Windows\System32\ntdll.dll — проверка конкретного модуля без полного скана.
🔹
Сброс кэша обновлений: чистит SoftwareDistribution и catroot2, часто обходит 0x800f081f без скачивания.

net stop wuauserv & net stop cryptSvc & net stop bits
ren C:\Windows\SoftwareDistribution SoftwareDistribution.old
ren C:\Windows\System32\catroot2 catroot2.old
net start wuauserv & net start cryptSvc & net start bits

🔹 Анализ без риска: dism /Online /Cleanup-Image /AnalyzeComponentStore покажет реальный вес и reclaimable-пространство. ⚠️ /ResetBase на продакшене отключает откат обновлений — используйте осознанно.
🔹
Intune/Autopilot: Оберните проверку в Proactive Remediation. Detection — верификация хешей, Remediation — запуск DISM + SFC + shutdown /r /t 300.
🔹
ACL-правило: Файлы после SFC получают TrustedInstaller:(F). Ручная смена прав ломает будущие транзакции CBS.

Протокол «До / Во время / После»

🔹 До: chkdsk C: /f /r + перезагрузка. Исключаем физические артефакты.
🔹
До: mdsched.exe или внешний тест RAM. Исключаем битые ячейки памяти.
🔹
До: Временное отключение стороннего AV/EDR. Снимаем фильтрацию I/O.
🔹
Во время: Никаких браузеров, игр или бэкапов. Снижаем contention на диск.
🔹
После: Обязательная перезагрузка. Фиксируем транзакции.
🔹
После: Get-WindowsUpdateLog → проверка событий CBS. Подтверждаем валидацию компонентов.
🔹
После: wevtutil qe System /c:5 ...Kernel-PnP... → валидация драйверов хранения.

🎯 Границы метода: когда копать глубже

🔹 DISM >60 мин без прогресса → повреждение манифестов или деградация накопителя.
🔹 CBS.log чист, но краши продолжаются → реестр, политики, конфликт сторонних служб.
🔹 0xc0000005 → нарушения доступа к памяти, разгон, драйверы ядра.
🔹 Ошибки после клонирования → рассинхрон HAL, контроллеров или групповых политик.
Здесь DISM/SFC — только первая точка входа. Далее: WinDbg, ProcMon, анализ minidump, аппаратная диагностика.

🔚 Эпилог: порядок как инженерная дисциплина

Протокол DISM → SFC → CBS.log — это не магия восстановления. Это архитектура доверия. Каждый шаг транзакционен, каждая замена подписана, каждый отказ трассируем. Для новичка — чёткий алгоритм. Для инженера — предсказуемый инструмент. Для системы — единственный легитимный путь к эталону. 📥 Сохраните этот гайд. Запустите скрипт при первом 0x800.... В восьми случаях из десяти Windows не сломана — она просто ждёт, когда вы приведёте её компоненты в согласие.

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

#Windows #DISM #SFC #CBSlog #SystemAdmin #DevOps #ITSupport #Windows11 #Windows10 #Server2025 #TechGuide #SysAdminTips #Infrastructure #Automation #PowerShell #CmdLine #Troubleshooting #WinSxS #TrustedInstaller #ComponentBasedServicing #ITSecurity #SystemIntegrity #WindowsUpdate #LogAnalysis #EnterpriseIT #CloudOps #ITOperations #TechTutorials #WindowsInternals #SysAdminLife