КиберПротект приводит к INACCESSIBLE_BOOT_DEVICE — Блог техдира — admin-s
Блог техдира
канал техдира admin-s · IT-интегратор

КиберПротект приводит к 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/UEFI и физику дисков

Убеждаемся, что диск определяется в BIOS, режим контроллера накопителей (AHCI/RAID) не менялся, порядок загрузки корректен. Физическую исправность дисков стоит подтвердить в первую очередь: это исключает самый затратный по времени сценарий.

Заходим в среду восстановления (WinRE)

Если родная среда восстановления не поднимается сама после 2-3 неудачных попыток загрузки, берём установочный носитель той же версии Windows Server. Пункт «Восстановление системы» перед установкой гарантированно открывает WinRE с рабочим набором инструментов.

Здесь стоит честно заложить время на ожидание. Если сервер стоит в дата-центре, загрузочную флешку обычно готовит саппорт площадки, и это не мгновенно. Плюс серверное железо перезагружается не за секунды, как десктоп под столом, а по несколько минут на каждый цикл. В сумме каждая проверка растягивается, и пара «очевидных» шагов легко съедает час-полтора чистого ожидания.

Смотрим структуру дисков через diskpart
WinRE · diskpart
diskpart
list disk
list volume

Здесь важно убедиться, что WinRE вообще видит физический диск и все ожидаемые тома: системный раздел (NTFS), EFI-раздел (FAT32, примерно от 100 до 500 МБ) и раздел восстановления. Если диска в списке нет, проблема на уровне контроллера или физики, и дальнейшие шаги с загрузчиком смысла не имеют.

Проверяем и пересобираем загрузчик (BCD)

Частая причина INACCESSIBLE_BOOT_DEVICE после сбойного апдейта, это повреждённая загрузочная запись. Присваиваем букву EFI-разделу и пересобираем BCD:

WinRE · bcdboot
select volume <номер EFI-раздела>
assign letter=S
exit
bcdboot C:\Windows /s S: /f UEFI
Важный диагностический сигнал

BCD пересобрался чисто, а проблема осталась. Значит, дело не в загрузочной записи. Отмечаем это и идём дальше, а не переустанавливаем загрузчик по десятому кругу.

Откатываем последнее обновление через DISM

Следующий по вероятности сценарий: сам накопительный пакет повредил стек драйверов хранилища. Смотрим список установленных пакетов офлайн:

WinRE · DISM
dism /image:W:\ /get-packages

Находим последний пакет со статусом Installed и временем установки, совпадающим с моментом сбоя, и удаляем его:

WinRE · DISM
dism /image:W:\ /remove-package /packagename:<точное имя пакета>

В нашем случае откат прошёл успешно, но результата не дал. Ещё один сигнал: дело не в файлах самого обновления.

Проверяем целостность файловой системы
WinRE · chkdsk
chkdsk W: /f /r

Полное сканирование не нашло ни одного битого сектора и ни одной ошибки файловой системы: сам раздел и диск были полностью здоровы. Это закрыло версию с физическим или логическим повреждением данных.

Проверяем boot-critical драйверы контроллера в офлайн-реестре

Загружаем куст SYSTEM из офлайн-образа и проверяем ключевые службы хранения:

WinRE · reg
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:

WinRE · reg · UpperFilters
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:

WinRE · reg · fix
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, работа с реестром на уровне драйверов, восстановление загрузки. Если сервер не грузится, а стандартные шаги не помогают, напишите нам.

Обсудить проблему
Все статьи блога