null

Борьба с BSOD 0x0000007b после переноса виртуальной машины из Xen

Для работы паравиртуализации устройств ввода-вывода в виртуальной машине Xen под управлением Windows необходима установка дополнительных драйверов. Однако, они могут сыграть злую шутку, когда возникает необходимость мигрировать такую машину на другой гипервизор.

При попытке запустить машину, перенесённую с Xen на KVM Windows отказывается грузиться, демонстрируя BSOD с кодом 0x0000007b, рапортуя о невозможности получить доступ к системному диску.

Для исправления этой проблемы нам потребуется доступ к реестру Windows на проблемной машине. Проще всего это сделать, конечно, пока она находится на Xen, но если такой возможности уже нет, то можно подключить нужный куст реестра из режима восстановления (встроенного в инсталляцию, или c установочного iso), либо с другой Windows системы.

Чтобы попасть в Recovery на Windows 7, нажмите F8 во время загрузки и выберите вариант Repair your computer. На Windows 8 и Windows 10 необходимо 3 (три) раза прервать процесс загрузки ОС сразу после возникновения логотипа окон (что в случае с BSOD произойдёт само).

Получив доступ к командной строке какой-либо Windows системы:

  1. Запускаем редактор реестра regedit.exe
  2. Выбираем HKEY_LOCAL_MACHINE
  3. Жмём File -> Load Hive
  4. Выбираем файл реестра, находящийся на нашей проблемной машины по пути C:\Windows\System32\config\SYSTEM
  5. Задаём любое имя для временного раздела реестра, например Temp
  6. Теперь HKEY_LOCAL_MACHINE\SYSTEM с проблемной машины смонтирован в HKEY_LOCAL_MACHINE\Temp
  7. Не забываем сделать File -> Unload Hive по этой ветке после окончания работы

Для начала включим обратно поддержку AHCI и IDE, если вдруг это было переопределено установщиком драйверов Xen. Для этого:

  1. Идём по пути HKEY_LOCAL_MACHINE\Temp\ControlSet001\Services\
  2. В разделах msahci, pciide, iaStor, iaStorV, iaStorAVC устанавливаем параметр Start в значение 0.
    Примечание: в разных версиях Windows некоторых из данных разделов может не быть
  3. В разделах xenpci, xenvbd, xennet устанавливаем параметр Start в 3

После этого необходимо убрать UpperFilters драйвера Xen для устройств. Для этого:

  1. Идём по пути HKEY_LOCAL_MACHINE\Temp\ControlSet001\Control\Class\
  2. Жмём Edit -> Find и вводим или UpperFilters, или xen
  3. Проходимся по всем результатам с помощью F3
  4. Во всех найденных классах устройств, содержащих какие-либо драйверы от Xen в UpperFilters, просто удаляем параметр UpperFilters.
    Примечание: обычно это xenpci, xenvbd, xennet, и xenhide.
    Если в UpperFilters было неколько значений, ПКМ по нему -> Modify и удаляем строчки с xen

Вот неполный список классов устройств, где обычно встречаются драйвера паравиртуализации Xen:

  • HKEY_LOCAL_MACHINE\Temp\ControlSet001\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}
  • HKEY_LOCAL_MACHINE\Temp\ControlSet001\Control\Class\{4D36E97B-E325-11CE-BFC1-08002BE10318}
  • HKEY_LOCAL_MACHINE\Temp\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}
  • HKEY_LOCAL_MACHINE\Temp\ControlSet001\Control\Class\{4D36E97D-E325-11CE-BFC1-08002BE10318}

Обязательно пройдитесь поиском после обследования данных классов.

После этого выгружаем куст HKEY_LOCAL_MACHINE\Temp (File -> Unload Hive) и перезагружаемся. Загрузка должна пройти штатно.

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

Вперед