Corrigindo falha de migração do XenServer para o Azure
Fala pessoal! Tudo bem? Vou fugir um pouco do assunto de M365 para passar uma experiência que tive em uma migração para o Microsoft Azure. Para você que está migrando da Citrix On-premises para o Azure, este artigo é para você!
O cenário é resumidamente assim: em uma migração de XenServer para o Microsoft Azure e tive um problema muito peculiar, ao fazer o failover para a nuvem. Todas as VMs Windows, durante o failover, inicializavam esta tela:
Pelo fato de tudo aparecer a tela de recuperação de sistema, eu não tinha como interagir com a Máquina virtual. Após uma análise com o time Premier da Microsoft, este foi o finding que eles tiveram:
Findings
=======
1. Dump Info
Dump Name: memory2.dmp
Windows 7 Kernel Version 7601 (Service Pack 1) UP Free x64
Product: WinNt
Built by: 7601.24545.amd64fre.win7sp1_ldr_escrow.200102-1707
Kernel base = 0xfffff800`01666000 PsLoadedModuleList = 0xfffff800`0189fc90
System Uptime: 0 days 0:00:00.671
Bugcheck: 7E (FFFFFFFFC0000005, 220, FFFFF880009B0C68, FFFFF880009B04D0)
Kernel Complete Dump File: Full address space is available.
2. Bugcheck
SYSTEM_THREAD_EXCEPTION_NOT_HANDLED (7e)
This is a very common bugcheck. Usually the exception address pinpoints
the driver/function that caused the problem. Always note this address
as well as the link date of the driver/image that contains this address.
Arguments:
Arg1: ffffffffc0000005, The exception code that was not handled
Arg2: 0000000000000220, The address that the exception occurred at
Arg3: fffff880009b0c68, Exception Record Address
Arg4: fffff880009b04d0, Context Record Address
3. Call Stack
# Child-SP RetAddr Call Site
00 fffff880`009afca8 fffff800`01a091a4 nt!KeBugCheckEx
01 fffff880`009afcb0 fffff800`019c29ec nt!PspUnhandledExceptionInSystemThread+0x24
02 fffff880`009afcf0 fffff800`016e8248 nt!PspSystemThreadStartup$filt$0+0xe
03 fffff880`009afd20 fffff800`017011fd nt!__C_specific_handler+0x8c
04 fffff880`009afd90 fffff800`016c1125 nt!RtlpExecuteHandlerForException+0xd
05 fffff880`009afdc0 fffff800`017e0eee nt!RtlDispatchException+0x415
06 fffff880`009b04a0 fffff800`017083c2 nt!KiDispatchException+0x17e
07 fffff880`009b0b30 fffff800`017060a8 nt!KiExceptionDispatch+0xc2
08 fffff880`009b0d10 00000000`00000220 nt!KiPageFault+0x428
09 fffff880`009b0ea0 fffff880`011db028 0x220
0a fffff880`009b0ea8 fffffa83`02095910 xen+0x1028
0b fffff880`009b0eb0 fffff880`009b0f50 0xfffffa83`02095910
0c fffff880`009b0eb8 fffff880`011e6239 0xfffff880`009b0f50
0d fffff880`009b0ec0 fffff880`011de202 xen!HypercallPopulate+0xd9
0e fffff880`009b0ef0 fffff880`011dc420 xen!XenVersion+0x22
0f fffff880`009b0f20 fffff880`01001bd8 xen!XenTouch+0x50
10 fffff880`009b0f80 fffff800`01bedc48 xenfilt+0x1bd8
11 fffff880`009b1140 fffff800`01bedd9e nt!IopInitializeBuiltinDriver+0x368
12 fffff880`009b1210 fffff800`01bedfa2 nt!PnpInitializeBootStartDriver+0xbe
13 fffff880`009b1290 fffff800`01b4c229 nt!PnpLoadBootFilterDriver+0x142
14 fffff880`009b1300 fffff800`019cfd61 nt!PipCallDriverAddDeviceQueryRoutine+0x269
15 fffff880`009b1400 fffff800`0193543a nt!RtlpCallQueryRegistryRoutine+0x9ae65
16 fffff880`009b1480 fffff800`01a84c96 nt!RtlQueryRegistryValues+0x17e
17 fffff880`009b1550 fffff800`01a84f6f nt!PipCallDriverAddDevice+0x5d6
18 fffff880`009b1700 fffff800`01bec95e nt!PiProcessAddBootDevices+0x4f
19 fffff880`009b1730 fffff800`01ac7ed1 nt!PipAddDevicesToBootDriverWorker+0x1e
1a fffff880`009b1760 fffff800`01bdf0c3 nt!PipApplyFunctionToServiceInstances+0x1e1
1b fffff880`009b17e0 fffff800`01bee7bc nt!PipAddDevicesToBootDriver+0x33
1c fffff880`009b1830 fffff800`01bef20f nt!IopInitializeBootDrivers+0x4cc
1d fffff880`009b1900 fffff800`01bf2463 nt!IoInitSystem+0x80f
1e fffff880`009b1a00 fffff800`01b555b9 nt!Phase1InitializationDiscard+0x1293
1f fffff880`009b1bd0 fffff800`019a52e8 nt!Phase1Initialization+0x9
20 fffff880`009b1c00 fffff800`016ffec6 nt!PspSystemThreadStartup+0x194
21 fffff880`009b1c40 00000000`00000000 nt!KxStartSystemThread+0x16
4. Process
Found KCB = fffff8a0000c9a70 :: \REGISTRY\MACHINE\SYSTEM\CONTROLSET001\SERVICES\XENFILT
Hive fffff8a000024010
KeyNode fffff800012777fc
[SubKeyAddr] [SubKeyName]
fffff80001278a74 Parameters
[SubKeyAddr] [VolatileSubKeyName]
fffff8a000041da4 Enum
Use '!reg keyinfo fffff8a000024010 <SubKeyAddr>' to dump the subkey details
[ValueType] [ValueName] [ValueData]
REG_DWORD Type 1
REG_DWORD Start 0
REG_DWORD ErrorControl 1
REG_DWORD Tag 8
REG_EXPAND_SZ ImagePath system32\drivers\xenfilt.sys
REG_SZ DisplayName XenServer Generic Bus Filter
REG_SZ Group Boot Bus Extender
Next action
==========
According to our analysis, the issue is due to system loads the xenfilt.sys driver as a system driver during boot up process, which is not necessary for both Azure VM and hyper-v VM.
Ou seja, o que causou o problema em questão foi o driver de inicialização presente no XenServer Tools. Durante as conversas com o time Microsoft, eles informaram que realmente o Azure Site Recovery não possui suporte para lidar com ambientes baseados em Xen. Desta forma, é possível que erros como este sejam frequentes nas migrações.
O driver em questão foi o xenfilt.sys e a Microsoft solicitou a remoção. A seguir, eu apresento como fiz para remover o driver. Devo informar que este processo somente foi testado em Windows Server 2008 R2 SP1.
Infelizmente, não há garantia de que seja o mesmo para outras versões do Windows Server. Novos artigos serão postados em caso de haver um processo diferenciado.
Leia este aviso!
Aviso: NÃO REALIZE ESTE PROCESSO se você NÃO POSSUIR uma solução de backup existente no seu ambiente. Este guia tem por objetivo apresentar o que funcionou para o ambiente onde apliquei estas alterações. A partir das próximas estapas, siga por sua conta em risco.
Agora que você entende os riscos, acesse a VM que você pretende migrar e siga as etapas a seguir:
- Vá ao Menu Iniciar > Digitar “msconfig” e pressionar enter;
- Então, na aba Services > marcar o checkbox Hide all Windows Services e desmarcar TODOS os serviços do XenServer, pode ser que apareça mais de um, faça questão de desmarcar também. Finalizada esta atividade, clicar em Apply seguido de OK.
- Ao receber o pop-up de aviso do Windows para reinicialização do sistema clique em Restart;
* Se por qualquer motivo você for impedido de reinicializar o servidor force a reinicialização mesmo assim. NÃO prossiga para a próxima etapa enquanto esta não tiver sido concluída com êxito. Caso tenha ocorrido qualquer problema com o servidor, restaure o Snapshot e comece novamente as etapas.
- Entre novamente no Menu Iniciar > Painel de Controle
- Troque a visualização do Menu para “Ícones Grandes” ou “Ícones pequenos”, à sua escolha;
- Clique em Programs and Features e desinstale os aplicativos da Citrix, iniciando pelo Agent, em seguida PV, e depois cada um dos drivers individualmente (se houver). Caso nenhuma das ferramentas XenServer tools esteja instalada, vá para a próxima etapa;
- Em
C:\Windows\System32\drivers\
, mova todos os arquivos xen*.sys para uma pasta de backup, conforme abaixo:
- Clique no Menu Iniciar, digite regedit e pressione enter;
- Exporte a chave HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\xenfilt\ para uma pasta de backup e REMOVA;
- Exporte a chave HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\xenfilt\ para uma pasta de backup e REMOVA;
- Procure por mais ocorrências da chave xenfilt e remova.
- Ainda no Regedit, procure por estas classes HKLM\SYSTEM\CurrentControlSet\Control\Class{4d36e96a e HKLM\SYSTEM\CurrentControlSet\Control\Class{4d36e97d e LIMPE o valor “XENFILT” do registro UpperFilters. Deixe vazio se for necessário;
- Reinicie a VM.
Conclusão
Aqui você pode ver como corrigir estre problema de driver que impediu a inicialização bem sucedida do Windows após uma tentativa de migração para o Azure. Se este guia ajudou você, compartilhe para que mais pessoas tenham acesso a este conteúdo!
Com isso termino este artigo. Muito obrigado por ter lido até aqui e até a próxima!