Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Желающим поучавствовать в доработке нового релиза скрипта SFC
Я подумал, что это может быть интересно и другим участникам форума.
Возможно, кто то предложит свои идей дополнитнльно.
Сейчас дорабатываю блок, который отрабатывает в случае, если защита ресурсов windows обнаружила поврежденные системные файлы, но не смогла восстановить их.
А так же дополнительные блоки - формирование лога с результатами для XP и монтаж с автоопределением wim для того, что бы дернуть оттуда файлы.
Итак, если sfc не справляется, то :
1) Проверяем доступность файла cbs.log
2) Парсим в вывод в лог строки с CSI
При этом повторяющиеся строки надо убрать.
Убираем
Ignoring duplicate ownership for directory
3) При обнаружении в конце строк записи file is missing проверяем каталоги в папке
C:\windows\WinSxS
Находим пустые каталоги и выводим их список в лог .
В идеале еще сопоставить связь с строкой с недостающим файлом.
Есть мысль выдергивать из wim образа поврежденные \ отсутствующие файлы в C:\windows\WinSxS
Но пока хз)
Есть еще файлы, не защищённые SFC. Они тоже подвержены повреждению. Можешь выдернуть список через HiJackThis. Их можно тоже проверить, например, через валидность ЭЦП.
Наверное обсуждение - важная часть, которой я ждал от тех, кто проявит желание.
У меня уже было несколько совершенно четких ТЗ, но все они оказались не годны.
Исходя из этого я и разместил общий план действий.
Те файлы, которые окажутся более старой модификации останутся работоспособными, так как в каталоге безопасности системы они должны все равно числиться.
Если что то потребуется очень уж сильно обновить до последней модификаций , например тот же DISM - можно либо накатить обновление заново, либо брать изначально актуальную версию файла.
Тут логика у меня такая: если в каталоге безопасности старая модификация должна числиться и быть работоспособной, то в обратном случае, когда файл не будет считаться родным мы получим как минимум "не удалось восстановить некоторые из них..."
Сразу предвижу вопрос: зачем, если результат не гарантирован?
Ответ: толк есть если покоцан файл, ссылка в реестре или файл в хранилище отсутствует.
Это наиболее распространенные варианты.
То есть если у человека проблемы в работе системы и ее эксплуатации - то до рабочего состояния система будет восстановлена.
Это на мой личный взгляд на сегодня самый лучший вариант, так как восхваляемые в сети патчи DISM для той же Win 7 вовсе не выполняет тех задач, о которых все под копирку пишут.
То есть он лишь сверяет имеются ли повреждения фалов в хранилище и выводит в лог.
Причем делает это не всегда корректно.
Самым лучшим информатором по прежнему остался CBS.log.
Причем общепринятый парсинг по строке [sr]
Это, если кто не помнит или не в курсе, как раз таки команда восстановления из автономного каталога, который, по моему мнению будет представлять из себя подключенный образ Wim.
Всю работу по сопоставлению легитимности файлов должна брать на себя утилита.
Мы лишь используем ее возможности.
Тут я как то плавно перешел к тому, что мы получаем новые возможности при работе с Wim - необходимость проверки в режиме среды восстановления благодаря этому сведется почти к нулю, за исключением случаев, когда необходимо заменить файлы используемой системой.
Да, упустил - на время работы с хранилищем на каталог Log и WinSxS даем права админу.
Есть еще файлы, не защищённые SFC. Они тоже подвержены повреждению. Можешь выдернуть список через HiJackThis. Их можно тоже проверить, например, через валидность ЭЦП.
Это каталоги, в том числе из которых производится восстановление файлов.
Поэтому когда в логе светится соответствующее сообщение - проверяем кто пустой.
Сопоставляем со строкой потому что будет сложно определить что там должно было находиться без остальной части лога.
Если какая то папка пуста, система никак не сможет восстановить файл.
Я пока еще определяюсь с принципом ссылок на них в реестре, поэтому пока только проверка на пустые при записи file missing
На этот вопрос уже ответил выше, разве что добавлю момент - хочется видеть о таких файлах информацию о версии,хэш,эцп... для тех, которые не удастся восстановить по описанной системе.
Для доработки следующей версии скрипта.
Те файлы, которые окажутся более старой модификации останутся работоспособными, так как в каталоге безопасности системы они должны все равно числиться.
Каталоги безопасности тоже обновляются вместе с накатыванием обновления. Остаются ли там старые хеши, я не знаю. Думаю, что нет. Но, нужно проверять.
Для эксперимента, можешь взять ту же утилиту проверки ЭЦП HJT и посмотреть в отчёте поле "Catalog Path". Если оно есть, то файл числится в этом каталоге. Если нет, то файла нет ни в одном каталоге безопасности текущей системы.
P.S. Работоспособность конкретной версии системного файла только частично соотносится с необходимостью его наличия в каталоге безопасности:
1) Это больше актуально для Windows 8 и выше, где используются усиленные меры проверки подлинности файла, прежде чем система разрешит запуск такого файла на исполнение (механизм Signing Levels, детально описанный Алексом Ионеску). Другими словами, если файл не подписан, или не удаётся выполнить проверку подписи, то он не запустится.
2) Как я уже говорил в прошлой теме (может быть слишком кратко?), 1 обновление часто заменяет не один файл, а несколько файлов + записи реестра, при чём функции, которые вызываются из этих файлов + ссылки в реестре работают совместно. Так что если ты вручную заменишь 1 файл одной версии на более новую или более старую, это может привести к нестабильностям в работе системы, вплоть до BSOD. Иначе говоря, будь готов параллельно с подобным фиксом, создавать скрипт бекапа, который исправно сможет вернуть систему к прежнему состоянию из-под режима восстановления.
Тут я как то плавно перешел к тому, что мы получаем новые возможности при работе с Wim - необходимость проверки в режиме среды восстановления благодаря этому сведется почти к нулю, за исключением случаев, когда необходимо заменить файлы используемой системой.
Пока не понятно, как это будет выглядеть на стороне пользователя. Он скачивает оригинальный образ? В котором все равно нет новых версий файлов. Так то SFC никакой замены не произвёдет. А для Windows 10 будет ещё большая проблема найти подходящий образ в связи с выходом различных билдов вместо старой модели простых хотфиксов.
На этот вопрос уже ответил выше, разве что добавлю момент - хочется видеть о таких файлах информацию о версии,хэш,эцп... для тех, которые не удастся восстановить по описанной системе.
Для доработки следующей версии скрипта.
Для этого нужно парсить базу, откуда SFC берёт инфу о каждом файле. Я пока даже не знаю, где эта база находится. Функции SFC недокументированны. Единственное, что я раскопал - список подзащитных файлов без какой-либо доп. инфы. Ну + из каталогов безопасности можно извлечь PE256 hash всех файлов, если тебе нужно для тестов.
1) Это больше актуально для Windows 8 и выше, где используются усиленные меры проверки подлинности файла, прежде чем система разрешит запуск такого файла на исполнение (механизм Signing Levels, детально описанный Алексом Ионеску). Другими словами, если файл не подписан, или не удаётся выполнить проверку подписи, то он не запустится.
На сейчас речь идет о костыле для 7 и виста по большей части, ведь 8 и 10 умеют восстанавливать хранилище.
Ок, пробую смоделировать ситуацию, а точнее уже накатываю максимум обновлений.
Уже интересно насчет списка файлов в хранилище, они ведь восстанавливаются с разных дистрибутивов.
По DISM ты вроде делал тестовый скрипт с установкой хотфикса для добавления в 7 функционала, только он у тебя почему то не сработал.
Откуда брал инфу об этом способе?
По DISM ты вроде делал тестовый скрипт с установкой хотфикса для добавления в 7 функционала, только он у тебя почему то не сработал.
Откуда брал инфу об этом способе?
Вообще изначально знакомый сисадмин сказал, я не поверил.
Загуглил.
Все кричат что теперь так можно)0
Я собрал тест-скрипт.
Параллельно начал изучать новые возможности и оказалось, что в реальности поддерживается только проверка целостности хранилища.
И то не все показывает, как оказалось.
Так же читал про умозаключения и о том, что некоторые патчи призваны восстановить файлы при установке себя.
Тоже не работает.
Ссылки на реестр - под рукой такого лога нет сейчас.
А,например, тот же file missing говорит об отсутствии исходного файла в одном из каталогов хранилища.
И если смотреть только [sr] строки, то мы не увидим в каком именно каталоге.
Это я уже сам смотрел, проверял.
Поэтому и хочу начать иначе парсить cbs, "общевойсковая" инструкция устарела.
А,например, тот же file missing говорит об отсутствии исходного файла в одном из каталогов хранилища.
И если смотреть только [sr] строки, то мы не увидим в каком именно каталоге.
Это я уже сам смотрел, проверял.
Можно по событиям через мониторинг файловой системы, запущенный на время проверки. Вот асинхронная следилка.
Правда, он тебе покажет только факт замены, но не случай, когда файл повреждён, но отсутствует на дистрибутиве / в хранилище.
Что я сделал.
Накатывал несколько дней все обновления.
Далее поубивал несколько файлов и заменил их файлами с дистрибутива - все исключительно в хранилище.
Из особенностей, что я заметил:
1) дата изменения папки с файлом в хранилище была свежая
2) дата изменения файла в папке - почему то 12 года.
3) дата изменения на дистрибутиве - 09 года.
4) при проверке sfc - ни один замененный файл в лог не попал, то есть все чисто и система "проглотила" файлы с дистрибутива даже после обновлений.
5) я точно помню, где то была тема, когда обновление закатывало новый файл и он считался системой поврежденным, все решилось только после многократного восстановления файла и наката обновления.
6) надо наверное сделать некоторый скрипт, который в каталогах хранилища переименует\удалит все (кроме определенных каталогов) и попробовать залить все файлы с дистрибутива
7) я умышленно не восстановил Microsoft.Build.Engine.resources.dll - если у кого есть ( win 7 ultimatum 86 ) скиньте,хочу попробовать с другого дистрибутива.
В кратце, дела обстоят так:
Если файл, который оказался поврежден и прилетел с обновлением не совпадает с версией в образе - то система указывает, что файл версии такой то поставляется с обновлением таким то, смотрите там то.
Если - скорее всего - на дистрибутиве такого обновления нет, то нужно его просто переустановить.
Либо найти такой же файл версии.
Если произвести грубую замену - а при этом данные о файле в хранилище уже обновлены - то мы тоже видим все записи, благодаря которым можно даже сказать где именно затык.
Таким образом функция sfc сводится к восстановлению из хранилища, а если указать путь к дистрибутиву - только тех файлов, которые имеются в базе данных хранилища.
Следовательно, концепция скрипта может немного измениться - парсить cbs нужно немного иначе.
Если система сама не в состоянии восстановить файлы то мы по логу должны просто сказать откуда и что с серверов ms надо скачать и все должно нормализоваться.
Сильно сомневаюсь, что научу скрипт самостоятельно в удобочитаемый вид переводить для чайников что откуда скачать ... ну посмотрим, что выйдет.
Кирилл, прочитав пост, поперхнулся спросонья.
Вся его сущность съежилась, а сознание покраснело от перенапряжения - осмысливание того, что предложил Dragokas все больше приобретало форму выражения мысли, в словах которую можно было бы материализовать как:
-Че??
Но как то так, да.
Я пока еще тоже соображаю, можно ли здесь сделать какую то полуавтоматику.
Смотрел еще файлы с win 8 -10
Всплывают периодически новые моменты, которые я раньше и не видел и не знал.
Дается мне что лучше всего сделать так:
1) Для обычного юзера упрощенный лог и экспресс проверка
2) Некий экспертный режим, когда собирается разная нужная информация о системе, которая может помочь в диагностике + сам файл cbs.log
На самом деле читать его не так и сложно, даже если вовсе не парсить.
Все вместе упаковываем в cab архив и юзер дает нам все это посмотреть.
Параллельно этому сделать мануал как можно, по возможности, самому разбирать лог.