КиберПротект приводит к INACCESSIBLE_BOOT_DEVICE
Резервное копирование должно спасать бизнес от простоя, а не устраивать его. Но иногда именно агент бэкапа, причём лицензионный, платный и вполне отечественный, кладёт боевой сервер так, что тот вообще перестаёт грузиться. Ниже реальный случай: сервер 1С на Windows Server 2022 ушёл в синий экран сразу после планового обновления, и корень проблемы оказался вовсе не в самом обновлении.
В чём суть проблемы
INACCESSIBLE_BOOT_DEVICE, это один из самых неприятных стоп-кодов Windows. Система на старте понимает, что не может достучаться до загрузочного раздела, и валится в синий экран сразу после включения. Чаще всего это прилетает после планового обновления Windows Update и особенно больно бьёт по боевым серверам: простой считается на часы, а причина на первый взгляд не очевидна.
Площадка была такая: продуктивный сервер 1С на платформе Supermicro, SAS3-бэкплейн, системный NVMe-диск, программное зеркало на Storage Spaces, сверху Windows Server 2022. Всё как у людей, и простой такого сервера бьёт сразу по бухгалтерии и всей работе с базой.
Как это выглядело
После обычного планового ребута, вызванного установкой накопительного обновления (Cumulative Update), сервер перестал загружаться. На экране стандартный синий экран с кодом INACCESSIBLE_BOOT_DEVICE, автоматический ребут по кругу, а штатная среда восстановления (WinRE) сама не поднималась. Единственное изменение перед сбоем: плановое обновление Windows. Руками в этот день никто ничего не трогал.
Причина может сидеть сразу на нескольких уровнях: от банального сбоя загрузочной записи до глубокого конфликта на уровне драйверов ядра. Без последовательной диагностики легко потратить часы на действия, которые не решают проблему. Поэтому идём по порядку, а не тыкаем наугад.
Алгоритм диагностики и восстановления
Принцип простой: двигаемся от быстрых и безопасных гипотез к более глубоким, каждый раз проверяя результат, прежде чем идти дальше. Вот одиннадцать шагов ровно в том порядке, в котором их стоит проходить.
Первый вопрос всегда один: что менялось непосредственно перед сбоем. Обновление Windows, правки в BIOS/UEFI, замена дисков или кабелей, обновление драйверов. Это сразу сужает круг гипотез. В нашем случае единственным изменением было плановое обновление системы.
Убеждаемся, что диск определяется в BIOS, режим контроллера накопителей (AHCI/RAID) не менялся, порядок загрузки корректен. Физическую исправность дисков стоит подтвердить в первую очередь: это исключает самый затратный по времени сценарий.
Если родная среда восстановления не поднимается сама после 2-3 неудачных попыток загрузки, берём установочный носитель той же версии Windows Server. Пункт «Восстановление системы» перед установкой гарантированно открывает WinRE с рабочим набором инструментов.
Здесь стоит честно заложить время на ожидание. Если сервер стоит в дата-центре, загрузочную флешку обычно готовит саппорт площадки, и это не мгновенно. Плюс серверное железо перезагружается не за секунды, как десктоп под столом, а по несколько минут на каждый цикл. В сумме каждая проверка растягивается, и пара «очевидных» шагов легко съедает час-полтора чистого ожидания.
diskpart
list disk
list volume
Здесь важно убедиться, что WinRE вообще видит физический диск и все ожидаемые тома: системный раздел (NTFS), EFI-раздел (FAT32, примерно от 100 до 500 МБ) и раздел восстановления. Если диска в списке нет, проблема на уровне контроллера или физики, и дальнейшие шаги с загрузчиком смысла не имеют.
Частая причина INACCESSIBLE_BOOT_DEVICE после сбойного апдейта, это повреждённая загрузочная запись. Присваиваем букву EFI-разделу и пересобираем BCD:
select volume <номер EFI-раздела>
assign letter=S
exit
bcdboot C:\Windows /s S: /f UEFI
BCD пересобрался чисто, а проблема осталась. Значит, дело не в загрузочной записи. Отмечаем это и идём дальше, а не переустанавливаем загрузчик по десятому кругу.
Следующий по вероятности сценарий: сам накопительный пакет повредил стек драйверов хранилища. Смотрим список установленных пакетов офлайн:
dism /image:W:\ /get-packages
Находим последний пакет со статусом Installed и временем установки, совпадающим с моментом сбоя, и удаляем его:
dism /image:W:\ /remove-package /packagename:<точное имя пакета>
В нашем случае откат прошёл успешно, но результата не дал. Ещё один сигнал: дело не в файлах самого обновления.
chkdsk W: /f /r
Полное сканирование не нашло ни одного битого сектора и ни одной ошибки файловой системы: сам раздел и диск были полностью здоровы. Это закрыло версию с физическим или логическим повреждением данных.
Загружаем куст SYSTEM из офлайн-образа и проверяем ключевые службы хранения:
reg load HKLM\OFFSYS W:\Windows\System32\config\SYSTEM
reg query HKLM\OFFSYS\ControlSet001\Services\storahci
reg query HKLM\OFFSYS\ControlSet001\Services\stornvme
Параметр Start у обоих драйверов должен быть 0x0 (Boot start). В нашем случае оба драйвера были настроены корректно: штатный стек хранения Windows был исправен.
Когда все штатные механизмы Windows проверены и исправны (загрузчик, обновления, файловая система, драйвер контроллера), а ошибка держится, почти наверняка виноват сторонний filter driver, встроенный в цепочку инициализации диска на уровне ядра. Это один из самых частых источников INACCESSIBLE_BOOT_DEVICE после обновлений, и чаще всего в роли виновника выступают агенты резервного копирования и антивирусы.
Проверяем списки фильтров на классах устройств Disk drives и Volumes:
reg query "HKLM\OFFSYS\ControlSet001\Control\Class\{4d36e967-e325-11ce-bfc1-08002be10318}" /v UpperFilters
reg query "HKLM\OFFSYS\ControlSet001\Control\Class\{71a27cdd-812a-11d0-bec7-08002be2092f}" /v UpperFilters
И вот тут всё встало на свои места. В обоих списках обнаружился посторонний драйвер fltsrv.sys, компонент агента Кибер Бэкап от КиберПротект, который отвечает за отслеживание изменённых блоков (CBT) при инкрементальном резервном копировании. Он встраивается прямо в цепочку инициализации диска и тома, и после обновления оказался несовместим с новой сборкой системы. Вместо штатной работы он блокировал доступ к загрузочному устройству ещё до старта Windows.
Вычищаем запись драйвера из списков фильтров, оставляя только штатные компоненты Windows:
reg add "HKLM\OFFSYS\ControlSet001\Control\Class\{4d36e967-e325-11ce-bfc1-08002be10318}" /v UpperFilters /t REG_MULTI_SZ /d "partmgr" /f
reg add "HKLM\OFFSYS\ControlSet001\Control\Class\{71a27cdd-812a-11d0-bec7-08002be2092f}" /v UpperFilters /t REG_MULTI_SZ /d "volsnap" /f
reg unload HKLM\OFFSYS
Система загрузилась без синего экрана. Но на этом работа не заканчивается: мы восстановили загрузку, а не решили проблему совместимости.
Удаление фильтра из реестра, это восстановление загрузки, а не лечение причины. После того как система стабилизировалась, обязательно доводим дело до конца.
- Обновить агент КиберПротект до версии, совместимой с текущей сборкой ОС. Это вернёт корректную регистрацию фильтр-драйвера и функциональность CBT.
- Убедиться, что задания резервного копирования снова выполняются штатно.
- Проверить состояние программного зеркала Storage Spaces. После нештатной перезагрузки массивы нередко уходят в ресинхронизацию.
- Только после этого возвращать откаченное обновление и разрешать его повторную установку.
Почему виноват именно КиберПротект
Если совсем на пальцах, система, это слоёный пирог. Внизу железо, на нём операционная система, между ними драйверы, а сверху проводник, где вы уже открываете свои таблицы и базы. В слой драйверов можно встраивать собственные надстройки, так называемые фильтры. Агент бэкапа как раз ставит такой фильтр поверх драйвера общения с дисками, и именно он после обновления встал поперёк загрузки.
Технически это выглядит так. Агент Кибер Бэкап встраивает свой фильтр-драйвер CBT прямо в цепочку инициализации диска и тома. Делает он это не со зла: так технология отслеживает изменённые блоки и снимает инкрементальные копии быстро, не перечитывая весь том. Пока версия агента совпадает со сборкой ОС, всё работает как надо.
Проблема вылезает после накопительного обновления. Сборка ядра уезжает вперёд, а драйвер остаётся прежним, и в какой-то момент он встаёт поперёк доступа к загрузочному устройству. Это неочевидный слой: мало кто вообще держит в голове, что поверх драйвера дискового массива живут чьи-то надстройки, поэтому шаг с фильтрами так часто и пропускают. Отдельная ирония в том, что речь про лицензионный, платный и вполне отечественный продукт, от которого по умолчанию ждёшь надёжности. Но на уровне ядра любая надстройка, хоть импортная, хоть своя, одинаково способна уронить загрузку после апдейта. И самое обидное, что уронил сервер тот самый инструмент, который призван его страховать.
Ценность точной диагностики здесь именно в сэкономленном времени. Найденный фильтр-драйвер убирается из реестра за минуту, тогда как альтернатива, полная переустановка Windows с нуля и повторная настройка 1С, это ещё несколько часов простоя. Ради этой минуты и стоит доходить до конца, а не сдаваться на середине и нести систему в переустановку.
Как не наступить на эти грабли снова
- Держите агенты резервного копирования и антивирусы в актуальных версиях. Рассинхрон между версией стороннего ПО и сборкой Windows после Cumulative Update, это одна из самых частых причин подобных сбоев.
- Если инцидент случился на одном сервере, проверьте остальные с таким же стеком ПО. Вероятность повторить сценарий на них высокая.
- Разносите во времени обновление Windows и обновление защитного ПО. Так при сбое сразу понятно, кто виноват.
- Обкатывайте критичные обновления на некритичном контуре перед массовым раскатыванием, если инфраструктура это позволяет.
Итог
Если сервер не поднимается после обновления, а стандартные шаги (загрузчик, откат апдейта, chkdsk) результата не дают, копайте на уровень драйверов сторонних приложений. Чаще всего виновник сидит именно там, в цепочке инициализации диска, и молча ломает загрузку ещё до старта системы.
Мы занимаемся администрированием серверной инфраструктуры и восстановлением после таких инцидентов: офлайн-диагностика через WinRE, работа с реестром на уровне драйверов, восстановление загрузки. Если сервер не грузится, а стандартные шаги не помогают, напишите нам.
Обсудить проблему