Problemas de Inicialização do Windows

Problemas de Inicialização do Windows

Por Yuri Diógenes

Estava pensando em um tema para escrever e de forma saudosa lembrei do curso de tecnologias de núcleo do Windows NT (Windows NT Core Technologies). Ministrei este curso por várias vezes e lembro o quanto ele era aprofundado no que diz respeito a arquitetura e inicialização do Windows. Estes são temas que continuam cada vez mais em pauta e cada vez se faz mais necessário que os profissionais fiquem cientes de como funciona ambos os processos.

O processo de boot

Durante o processo de instalação do Windows no seu computador o programa de setup vai iniciar o processo de formatação do HD, neste momento este programa vai escrever em um setor chamado MBR (Master Boot Record) as informações de execução, chamada de código de boot (boot code) e em seguida escreverá também a tabela de partição do disco.

Muito bem, então agora que temos as informações corretamente escritas no disco já é possível seguir em frente. Após o POST (Power on Self Test) do computador é feita a carga da MBR através da BIOS do computador, ou seja, a BIOS carrega as informações da MBR que por sua vez carrega o código de boot. A tabela de partição então é verificada para checar se existe uma entrada que contenha a partição por onde será feito o boot (boot partition).

Após este processo mais de baixo nível, podemos então resumir o restante do processo de boot como sendo:

1) NTLDR (NT Loader) – após fazer a carga de alguns módulos do Windows, o NTLDR vai carregar o boot.ini.

2) BOOT.INI – a tela de seleção do sistema poderá ser escolhida neste momento (caso você tenha um disco com múltiplos SO’s). Se nenhuma opção for escolhida o NTLDR vai usar a opção padrão e então var fazer a carga do ntdetect.com

3) NTDETECT.COM – este arquivo será carregado em modo real (16 bit) e vai utilizar a BIOS para fazer uma consulta no computador no intuito de verificar as opções de hardware existente, como: tipo de barramento (ISA, PCI, etc), número de discos e tipo, número de portas paralelas, etc. Estas informações serão armazenadas na chave HKEY_LOCAL_MACHINE\Hardware\Description.

4) O NTLDR vai então mostrar neste momento a tela de inicialização com a logomarca do Windows dizendo que está sendo iniciado. Neste momento o NTLDR vai:

· Carregar os drivers de Kernel e HAL que são como padrão o ntoskrnl.exe e o hall.dll;

· Ler a chave SYSTEM (HKEY_LOCAL_MACHINE\System) que fisicamente está localizado na pasta %systemroot%\system32\Config, para checar quais são os drivers de dispositivos que precisam ser carregados para concluir o boot;

· Durante a leitura da chave System também é verificado quais são os drivers que precisam iniciar durante a carga do sistema operacional. Estes drivers são localizados na chave HKEY_LOCAL_MACHINE\CurrentControlSet\Services.

· À medida que cada driver vai sendo carregado à barra de progresso do Windows continua movendo para sinalizar a progressão da carga do sistema operacional.

5) O NTOSKRNL.EXE vai fazer a carga do kernel do Windows.

6) SMSS – perfaz ao todo treze tarefas, entre elas esta a carga do subsistema do Windows (win32k.sys, srss.exe e winlogon).

7) WINLOGON – carrega a tela de logon e faz a carga da DLL MSGINA (MS Graphical Identification and Authentication). Neste momento o processo winlogon também vai:

· Cria o SCM (Service Control Manager) que é representado pelo arquivo services.exe. Este arquivo é responsável por carregar os drivers de dispositivos que estão marcados para inicializar;

· Cria o LSASS (Local Security Authentication Subsystem) que é representado pelo arquivo lsass.exe

A partir deste momento existirão algumas diferenças quanto à efetuar o logon localmente ou no domínio, para mais informações sobre o processo de logon e autenticação veja o artigo abaixo:

Logon and Authentication Technologies

https://technet2.microsoft.com/WindowsServer/en/Library/78cb5d3c-d0b2-4d20-a693-fa66bde1a63b1033.mspx

É importante salientar que o processo de boot só termina depois que o usuário faz o logon na máquina por completo.

Como proceder durante uma falha no processo de boot

Antes mesmo de começar a dizer o que fazer caso isso aconteça é importante lembrar duas boas práticas para se resguardar nos casos de problemas no processo de boot:

· Tenha sempre um backup atualizado do System State

· Antes de aplicar hotfix ou service pack procure reiniciar o computador. Muitas vezes o computador está em execução por muito tempo e após aplicar um hotfix ou service pack temos a falsa impressão de que foi ele o causador do problema. Isso nem sempre é verdade e a melhor forma de se precaver quanto a isso é fazer um simples boot no sistema antes de atualizá-lo. Mais na frente neste artigo irei citar um exemplo mais formal deste cenário;

Bem, a par disso podemos começar a verificar algumas opções que podem nos ajudar a ter acesso ao computador em caso de falha durante a incialização. Vejamos então as principais formas abaixo:

Traz de volta a última configuração que estava funcionando.

Em termos gerais traz de volta informações de registro e configurações de drivers;

Inicia o computador apenas com os drivers e os serviços básicos do Windows.

Está é uma das grandes opções de inicialização que temos no Windows, através dela você terá acesso a partição de sistema e poderá executar uma série de comandos que poderão lhe ajudar durante a resolução de problemas.

Às vezes o problema da inicialização é apenas porque temos um arquivo corrompido (como o NTLDR), neste caso é possível criar um disco de boot para iniciar o computador a partir dele;

Para criar este disco você precisa apenas formatar o disco em uma máquina com o Windows 200x e em seguida copiar os arquivos ntldr, ntdetect.com, boot.ini e caso seu computador inicie através de uma controladora SCSI, também copie o arquivo ntbootdd.sys.

Muitas vezes mesmo utilizando todas as opções acima não conseguimos ter acesso ao sistema operacional original. Nestas situações uma forma paliativa de ter acesso ao disco é através de uma instalação paralela;

Neste caso você tanto pode instalar na mesma partição do sistema (usando outro nome para a pasta) ou instalar em uma outra partição que tenha espaço disponível.

Se você não tiver nenhuma alternativa use esta como a última, isso porque nesta opção o Windows vai reinstalar o sistema operacional preservando algumas opções de software.

Após reinstalar você terá que reaplicar todos os service packs assim como as atualizações de segurança.

A partir do momento que você tem acesso ao computador, é possível usar as seguintes formas de isolar a causa raiz do problema:

Ferramenta

O que faz?

Utilitário de configuração do sistema (msconfig.exe)

· Esta é uma ferramenta introduzida no Windows 2003 que ajudará entre outras coisas a isolar o problema através da desativação de drivers ou serviços de terceiros.

Log de Eventos

· Verifique o log de eventos de sistema, verifique o que ocorre logo após a carga do sistema, ou seja, após os eventos 6009 e 6005.

Log de Inicialização

· Esta opção cria um arquivo chamado Ntbtlog.txt na pasta %systemroot%, que contém informações sobre os drivers que foram carregados durante a inicialização do sistema operacional.

· O uso desta lista pode ajudar para identificar a causa raiz do problema.

A partir das opções apresentadas, podemos representar então esses passos no diagrama abaixo:

Considerações quanto a Hotfixes e Service Pack

Como havia falado anteriormente, muitas vezes a aplicação de um hotfix ou service pack acaba externando um problema que já havia no servidor. Uma forma de ter mais segurança quanto a isso é através de um processo formal e documentado de controle de alterações. A sugestão é que a empresa tenha uma política de gerenciamento de atualizações de forma que se um problema no processo de boot ocorrer seja fácil seguir o gráfico abaixo e no final responder a pergunta: “Quem pode ter causado o problema”

Para mais informações sobre gerenciamento de atualizações ver o artigo abaixo:

Service Management Functions

Release Management

https://www.microsoft.com/technet/itsolutions/cits/mo/smf/smfrelmg.mspx

Muitas vezes os clientes querem de alguma forma desinstalar para ter certeza que o problema foi ou não causado devido a tal atualização no sistema. A partir do Windows 2000 SP3 já existem mecanismos de fazer essa desinstalação de forma transparente e até mesmo fazer via console de recuperação (caso você não tenha acesso ao modo normal do SO).

É válido salientar que esse é um procedimento que deve ser realizado apenas para fins de isolar o problema, ou seja, é recomendado que seu servidor esteja sempre atualizado com as versões dos binários do Windows.

Um sumário com informações das atualizações de software é mantido na chave abaixo:

HKEY_LOCAL_MACHINE\Software\Microsoft\Updates\Product\SPx\KB######

O valor “Product” deve ser substituído pelo produto em questão, como por exemplo: “Internet Explorer 6” e o valor do KB será referente ao número do artigo que contém a explicação acerca da atualização.

Se você precisar desinstalar uma atualização e você tiver acesso ao sistema, basta ir na opção de adicionar/remover programas e então desinstalar o número do KB referente à atualização. Neste momento será lida a chave de registro abaixo: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

Mas em um cenário em que você não tem acesso ao modo normal, é possível fazer a desinstalação do hotfix através da console de recuperação. Neste momento é importante saber que sempre que é feita uma atualização de software uma pasta de backup é criada no caminho abaixo:

%SystemRoot%\$NtUninstall[KBArticleNumber]$\

Neste caso substitua a palavra chave “KBArticleNumber” pelo número do artigo que corresponde a atualização de software que você deseja desinstalar.

Sabendo que esta pasta é criada, vejamos os passos para desinstalar uma atualização de software:

1) Efetue um boot via CD do Windows e escolha a opção de recuperação;

2) Escolha a opção de console de recuperação e em seguida escolha a partição que contém a pasta do Windows;

3) Digite a seqüência de comandos abaixo:

cd $ntservicepackuninstall$\spuninst

batch spuninst.txt

exit

4) Reinicie o computador.

É importante salientar que se você fez uma atualização de diversos hotfixes ao mesmo tempo e estes hotfixes contêm dependências é necessário seguir a ordem reversa para remover, caso contrário você receberá uma mensagem de erro dizendo que o sistema não ficará estável após a remoção desta atualização.

Uma forma de você verificar o que foi realizado durante a atualização do software é através dos logs. Os logs estão localizados na pasta %windir%, segue abaixo os tipos existentes de log:

Tipo de Log

Nome do Arquivo

Log de instalação do Service pack

Svcpack.log

Log de remoção do Service pack

Spuninst.log

Log de instalação de atualização de software

KB######.log

Log de desinstalação de atualização de software

KB######Uninst.log

Conforme vimos, conhecer os componentes que são usados durante a inicialização do Windows é algo chave para a resolução de problemas, várias hipóteses podem ser consideradas quando o Windows não está inicializando com sucesso e com as diretrizes acima é possível delimitar qual o componente que está falhando e iniciar o processo de reparo.

No próximo artigo continuaremos nessa linha de resolução de problemas de boot, porém iremos focar especificamente no registro do Windows. Até a próxima J