Server 2008 R2 xenpci.sys BSOD

Based on customer feedback, we have come across an error that can occur when restoring your VM onto the new
platform. After completing steps 11-k in the ‘Migrate_Server2k8r2’ guide you are told to restore the server and you
should get to the login. Sometimes you will be presented with another BSOD instead stating ‘”xenpci.sys, the driver
unloaded without cancelling pending operations’. If you experience this, you will need to remove the xen drivers
manually.
1. Select ‘Launch Startup Repair (recommended)’.
a. Select the radio button ‘use recovery tools….’, and install the Virtio Storage drivers and make a note
of the drive letter assigned to the OS drive. In this case, I’ll refer to it as the ‘F:\’ drive but yours
might be different.
b. Wait for the ‘Startup Repair’ process to fail, or cancel it and click ‘Finish’.
c. From the ‘Choose a recovery tool’ window select ‘Command Prompt’.
d. Now type the following:
i. ‘rmdir /q /s “f:\Program Files (x86)\Xen PV Drivers”
ii. ‘del /q “f:\Windows\System32\drivers\xen*”
iii. ‘del /q f:\Windows\inf\oem1.inf
iv. ‘del /q f:\Windows\inf\oem2.inf
v. ‘del /q f:\Windows\inf\oem3.inf
vi. ‘del /q f:\Windows\inf\oem4.inf
vii. ‘del /q f:\Windows\inf\oem5.inf
viii. ‘del /q f:\Windows\inf\oem*.pnf
e. Now type ‘regedit’, then hit enter.
f. Select ‘HKLM’, go to ‘File\Load Hive
g. For this step, make sure you select the drive you are recovering and not the X: (boot) drive. Go to
C:\Windows\system32\config’ and open the ‘SYSTEM’ file.
h. Type any ‘Key Name’ you want, example ‘temp’.
i. Navigate to ‘HKLM\temp\ControlSet001\services’.
i. Delete Key Names ‘xennet’, ‘xenpci’, ‘xenvdb’.
j. Navigate to ‘HKLM\temp\ControlSet002\services’.
i. Delete Key Names ‘xennet’, ‘xenpci’, ‘xenvdb’.
k. Navigate back to ‘HKLM\temp’.
i. Press ‘Ctrl + f’ to find.
ii. Search for ‘upperfilters’ and keep pressing F3 to find any key with reference to ‘xenpci’ that
have the same class value as below and delete them.
1. ‘HKLM\***\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}
2. ‘HKLM\***\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}
3. ‘HKLM\***\Class\{4D36E97B-E325-11CE-BFC1-08002BE10318}
l. Check these values are still true:
i. intelide ‘3’
ii. msahci ‘0’
iii. pciide ‘0’
iv. LSI_SAS ‘3’
m. Navigate back to the ‘temp’ registry key and select ‘File\Unload Hive’, then press ‘Yes’.
n. Restart the server.
2. When your server has started, Login.

Сегодня мы будем решать проблему, с которой я столкнулся давеча. Итак, у нас есть виртуальная машина Windows Server 2008 R2 на борту с установленными паравиртуальными драйверами. Эта виртаулка крутится работает под XEN’ом. Необходимо ее перести на другой сервер под VirtualBox. Но не все так просто. Первое, что необходимо было сделать – это сконвертировать. Как это сделать, я уже писал в одной из своих заметок:
VBoxManage convertdd linux_file.img linux_file.vdi
После того как вы сконвертируйте IMG в VDI формат и подключие к этот диск к новой виртуальной машине под VirtualBox, скорее всего вы получите первый BSOD с кодом 0x0000007B. 0x0000007B указывает, что  во время запуска операционная система Microsoft Windows потеряла доступ к системному разделу. Чтобы пофиксить эту проблему необходимо в настройках виртуальной машины удалить SATA-контроллер и добавить IDE-контроллер:
VirtualBox-IDE
Далее после попытки запустить сервер вы скорее всего получите второй BSOD (0x0000000d4 xenpci.sys), причиной которого будут установленные паравиртуальные драйверы. Давайте удалим их. Запускаем Windows в режиме восстановления и открываем командную строку. Далее по списку выполняем:
rmdir /q /s “f:\Program Files (x86)\Xen PV Drivers”
del /q “f:\Windows\System32\drivers\xen*”
del /q f:\Windows\inf\oem1.inf
del /q f:\Windows\inf\oem2.inf
del /q f:\Windows\inf\oem3.inf
del /q f:\Windows\inf\oem4.inf
del /q f:\Windows\inf\oem5.inf
del /q f:\Windows\inf\oem*.pnf
После удаления файлов перейдем к правке реестра. Введите команду regedit, выберите раздел HKLM и загрузите куст (File\Load Hive) C:\Windows\system32\config\SYSTEM с именем temp. В разделе HKLM\temp\ControlSet001\services и HKLM\temp\ControlSet002\services удаляем ключи xennetxenpcixenvdb.
Переходим обратно в HKLM\temp, жмем CTRL+F и ищем по фразе upperfilters (F3 для продолжения поиска). Как только в значение появится xenpci необходимо удалить этот раздел. У меня нашлись разделы:
  • HKLM\***\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}
  • HKLM\***\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}
  • HKLM\***\Class\{4D36E97B-E325-11CE-BFC1-08002BE10318}
Теперь вернемся к разделу temp и выгрузим куст (File\Unload Hive). После чего перезагрузим сервер и радуемся рабочему серверу.

Перенос образа из VirtualBox в XEN

vbxenelastixДля того, чтобы перенести ваш образ, созданный в VirtualBox в XEN необходимо сконвертировать VDI-диск в IMG формат. Для этого воспользуемся утилитой VBoxManage, поставляемой вместе с VirtualBox. Поскольку переношу я на MacOS, я воспользуюсь Terminal (поскольку программа консольная).

Итак, перейдите в каталог, где располагается ваш VDI-диск и выполните команду:

VBoxManage internalcommands converttoraw machine-name.vdi newmachine-name.img

После этого в консоли вы увидите сообщение:

Converting image "machine-name.vdi" with size 8908701696 bytes (8496MB) to raw...

Учтите, что процесс может занять длительное время, все зависит от размера вашего VDI-диска. После успешного конвертирования любым удобным способом заливаем newmachine-name.img на сервер с установленным гипервизором XEN.

Далее необходимо будет создать конфигурационный файл. (далее…)

Паравиртуализация XEN или решаем проблемы с производительностью

Паравиртуальные драйверы Xen — специальный вид драйверов устройств, которые используются в гостевой системе в домене Xen (в общем случае паравиртуальным драйвером может называться и та часть паравиртуального интерфейса ввода/вывода, которая находится в домене 0) и осуществляют операции ввода/вывода не через эмулируемые устройства, как это делают обычные драйверы, а при помощи специального интерфейса, предоставляемого системой виртуализации и хост-системой. Одна из главных причин разработки и использования паравиртуальных драйверов — возможность существенного повышения производительности работы гостевых систем, работающих в режиме полной виртуализации.

Недавно я столкнулся с проблемой гостевой ОС Windows Server 2008. Проблема заключалась в том, что производительность жестких дисков была очень медленной. Скорость копирования с раздела на раздел не превышала 5 МБ/с. Решением проблемы было установка паравиртуальных драйверов на гостевой ОС.

Драйвера можно скачать по ссылке. В моем случае это были драйвера gplpv_Vista2008x64_0.11.0.372.msi. На всякий случай сделайте резервную копию сервера. После чего, установите драйвера и перезагрузите систему.

После установки драйверов – производительность Windows Server 2008 поднялась до 100 МБ/c

Быстрое создание жесткого диска в XEN

Практически моментально можно создать виртуальный жесткий диск для XEN выполнив команду:

dd if=/dev/zero of=/home/xen/virt1/disk1.img bs=1024 seek=100000000 count=0

Данный пример создаст раздел размером 100Гб.