Os arquivos da área de trabalhoInicialização dupla com o Windows XP e o Windows PE 2.0

Wes Miller

Faça download do código deste artigo: Desktop2008_02.exe (151KB)

Nas edições anteriores de Os arquivos da área de trabalho, mencionei que o Windows PE se tornou uma ferramenta para recuperação e expliquei como usá-lo a partir de uma segunda partição. Uma consulta que recebi recentemente me fez pensar que talvez seja válido discutir um novo ponto—usar o Windows PE 2.0 e o Windows XP juntos.

Afinal, muitos de vocês podem estar usando o Windows® XP há algum tempo e o Windows PE 2.0 é a versão que a Microsoft está oferecendo suporte em avanço (observe que não haverá mais atualizações para o Windows PE 1.x).

Uma diferença importante entre o Windows PE 1.x e o 2.x é que o Windows PE 2.x pode ser inicializado por meio de uma interface de inicialização padrão (versus o método especializado que o Windows PE 1.x usa). Embora seja possível inicializar o Windows PE 1.x ou 2.x a partir de uma segunda partição, a conveniência de inicializá-lo na mesma partição em que o seu sistema operacional está instalado tem muito potencial, que discutiremos posteriormente.

Duas inicializações para o Windows

O Windows NT® sempre foi relativamente tolerante em relação a inicializações duplas. Mas como os computadores baseados em EFI (Extensible Firmware Interface) começaram a substituir os antigos IBM PC AT BIOS, a Microsoft alterou o mecanismo de inicialização do Windows para funcionar de maneira ideal com EFI e ter um mecanismo de inicialização em todas as arquiteturas. O novo mecanismo de inicialização do Windows, começando com o Windows Vista®, é chamado de Banco de dados de configuração de inicialização, ou BCD (consulte microsoft.com/whdc/system/platform/firmware/bcd.mspx). Mas se você estiver falando do antigo boot.ini ou do novo mecanismo BCD, o Windows pode geralmente inicializar outros sistemas operacionais, mesmo que isso signifique entregar o processo de inicialização para outro carregador de inicialização.

Antes de começarmos, é crítico lembrar que o Windows PE 2.0 funciona somente em sistemas que tenham compatibilidade total com ACPI (Interface de Energia e Configuração Avançada) e 384MB (em condições ideais, 512MB) de RAM. Como observei na minha coluna de maio (technetmagazine.com/issues/2007/05/DesktopFiles), sistemas não baseados em ACPI falharão em inicializar o Windows PE 2.0 e, como o Windows PE 2.0 deve ser inicializado em um RAMDisk, ele necessita que haja RAM suficiente para usar o RAMDisk, qualquer espaço temporário e todo o conjunto de trabalho da RAM. Se o seu sistema tem menos de 384MB de RAM, nem ao menos considere essa rota; use o Windows PE 1.6. Mesmo alguém com habilidade suficiente para reduzir o tamanho do Windows PE conseguiria executá-lo bem com 256MB.

Ah, os problemas que você resolverá

Agora, vamos examinar os problemas que você poderá resolver por meio da inicialização do Windows PE 2.0 da mesma partição que o Windows XP.

Recuperação total do sistema Essa é somente uma das tarefas possíveis com a inicialização do Windows PE diretamente da partição do Windows XP. Como o Windows PE 2.0 (bem como o Windows PE 1.6 antes dele) pode ser inicializado inteiramente em um RAMDisk, é possível recriar o disco inteiro—ou usar o ImageX para restaurar os arquivos do Windows XP automaticamente, uma vez que não é necessário recriar a partição inteira.

Ao permitir aos usuários a inicialização do Windows PE na inicialização, eles podem recuperar seus próprios sistemas mesmo ao trabalhar remotamente. A imagem pode vir de uma partição secundária, um compartilhamento de rede (se os usuários não puderem estar móveis), um DVD ou disco rígido USB de recuperação ou, se você estiver usando o ImageX, até mesmo armazená-la em uma partição em recuperação. Este tipo de recuperação em disco é uma ótima solução para muitos problemas (exceto para a corrupção de disco físico). Obviamente, não é a melhor para a restauração de dados de usuário, a menos que os dados estejam protegidos em primeiro lugar e então restaurados como parte da recuperação. Lembre-se de que você deve usar perfis móveis e realizar backup de dados do PC para prevenir esse tipo de perda. Você deve também certificar-se de que qualquer mecanismo de recuperação usado possa reduzir qualquer perda de dados em potencial em nome do usuário (incluindo perda devido à redefinição de chaves de criptografia EFS).

Recuperação de arquivos O Windows PE também fornece o mecanismo para colocar um sistema em execução mesmo que a instalação principal do Windows não seja inicializada. Nesse caso, é possível inicializar e recuperar os dados do usuário em outro sistema (desde que você tenha sistemas de backup recentes disponíveis para os usuários) ou em outro local para que o usuário possa começar logo a trabalhar novamente.

Reparação do sistema Finalmente, inicializar o Windows PE no Windows XP permite a reparação de um sistema por meio da execução de um conjunto de scripts de solução de problemas ou de um aplicativo simples de reparação ou recuperação controlado pelo usuário. O processo é semelhante à recuperação total do sistema, mas terá um escopo mais restrito (e não arriscará os dados do usuário).

Agora que você conhece o que é possível fazer inicializando o Windows PE na partição do Windows XP, vamos examinar o que acontece nos bastidores para que você possa aplicar o processo a qualquer solução desejada.

Antes do Windows Vista

Antes do advento do Windows Vista, era assim que os sistemas baseados em BIOS/MBR (registro mestre de inicialização) eram inicializados. O BIOS apontava para o dispositivo de inicialização (no caso do disco rígido, ele apontava para o MBR no disco). O MBR executava código que especificava qual partição inicializar. Observe que essa era a primeira partição que tivesse um sinalizador ativo definido para ela. Nas primeiras versões do diskpart, não era possível tornar uma partição inativa (ou seja, não era possível remover o sinalizador ativo). O comutador foi adicionado ao diskpart para corrigir isso—caso contrário, seria a primeira partição na ordem da tabela de partições que tivesse um sinalizador ativo definido. A partição contém o setor de inicialização—que informa qual código deve ser executado em seguida. Do Windows NT para o Windows Server® 2003, o código a ser executado está em um arquivo nomeado ntldr, sem extensão de arquivo. Se você já formatou um disco, não instalou o Windows e tentou a inicialização, viu a mensagem de erro "NTLDR not found".

Será interessante saber que o ntldr é totalmente compatível com versões anteriores—mas não é, obviamente, compatível com versões posteriores. Isso significa que o ntldr do Windows XP pode inicializar o Windows 2000, mas não o inverso. É por isso que é sempre importante instalar o sistema operacional mais antigo antes se você planeja realizar uma inicialização dupla. Como o ntldr não tem um número de versão anexado, é ainda mais importante manter isso em dia.

O ntldr é um aplicativo em modo real (16-bit) que inicia o NTDetect.com, que realiza a detecção de dispositivos básica e inicia o kernel, ntoskrnl.exe (esse pode ser um de vários arquivos—sempre renomeado para ntoskrnl.exe). O kernel é o componente crítico no processo de inicialização do Windows.

Este resumo do processe de inicialização é, de certa forma, simplista, e omiti totalmente a inicialização do Win32®, mas isso não é pertinente a esta discussão. Se você desejar obter mais informações sobre isso, recomendo a leitura do Windows Internals, Quarta Edição, de Mark Russinovich e David Solomon (Microsoft Press®, 2004).

Outra coisa a se observar é que ao inicializar do CD, a Instalação do Windows e do Windows PE executam o setupldr.bin em vez do ntldr. Esse arquivo, na verdade, contém um código de inicialização ligeiramente diferente para que possa ser inicializado a partir do CD (o ntldr não pode). Foi por isso que, para inicializar o Windows PE 1.x, você renomeou o setupldr.bin para ntldr e o colocou no disco. Foi por isso também que aquele arquivo não poderia carregar um arquivo boot.ini (pois o setupldr.bin foi desenvolvido para inicialização por CD e, como resultado, não é esperado que o boot.ini seja necessário).

Windows Vista e além

O Windows Vista mudou muitas partes desse processo. O Windows Server 2008 muda ainda mais habilitando o IA32 (suporte a 32-bit) para a inicialização a partir do EFI—algo que não era possível até agora fora dos sistemas baseados em Itanium. Para os sistemas baseados em BIOS, as etapas iniciais do processo de inicialização está basicamente inalterado. A diferença principal é que o BOOTMGR é o carregador de inicialização que é inicializado e então realiza as etapas seguintes.

Ele procura no diretório de inicialização pelo arquivo BCD, que é efetivamente o seu próprio hive de registro. O BCD contém as entradas de inicialização (incluindo a padrão) a serem inicializadas. Consulte a Figura 1 para tipos de imagem (tipos de arquivo executáveis e a Figura 2 para os tipos de aplicativo específicos a iniciar. Uma (ou mais) dessas entradas podem ser uma referência ao ntldr. Somente uma delas pode realmente fazer referência ao GUID conhecido usando para carregar o ntldr (consulte a quinta linha da Figura 3). O bootmgr decide então qual entrada será carregada a seguir, dependendo de se o sistema está sendo inicializado, se estava hibernando ou se está sendo inicializado pelo ntldr ou por outro gerenciador de inicialização (nesse caso, ele apontaria para outro setor de inicialização e iniciaria esse carregador). Isso seria mais comum se você estivesse realizando uma inicialização dupla com um sistema operacional diferente do Windows. É possível encontrar mais informações em microsoft.com/whdc/system/platform/firmware/bcd.mspx.

Figure 3 Objetos de aplicativo padrão

Descrição ID do BCDEdit GUID
Gerenciador de inicialização do Windows {bootmgr} 9dea862c-5cdd-4e70-acc1-f32b344d4795
Firmware de gerenciador de inicialização {fwbootmgr} a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba
Testador de memória do Windows {memdiag} b2721d73-1db4-4c62-bf78-c548a880142d
Aplicativo de retomada do Windows Sem alias 147aa509-0358-4473-b83b-d950dda00615
Carregador herdado do Windows {ntldr} 466f5a88-0af2-4f76-9038-095b170dc21c
Entrada de inicialização atual {current} fa926493-6f1c-4193-a414-58f0b2456d1e
Entrada de inicialização padrão {default} sem GUID predefinida
     

Figure 2 Tipos de aplicativo

Descrição Valor Descrição
Firmware de gerenciador de inicialização 0x1 Aplica-se somente a sistemas EFI.
Gerenciador de inicialização do Windows 0x2 Controla o fluxo de inicialização. Em um sistema de inicialização dupla, exibe para o usuário um menu de seleção de inicialização.
Carregador de inicialização do Windows 0x3 Carrega uma versão ou configuração específica do Windows.
Aplicativo de retomada do Windows 0x4 Restaura o Windows para o seu estado de execução quando um computador retorna da hibernação.
Testador de memória do Windows 0x5 Um aplicativo de diagnóstico de memória.
Ntldr 0x6 Aplica-se somente a sistemas PC/AT BIOS. Carrega as versões do Windows anteriores ao Windows Vista.
Setor de inicialização 0x8 Um aplicativo em modo real de 16-bit. Aplica-se somente a sistemas PC/AT BIOS. Pode ser usado para reiniciar o processo de inicialização e carregar um sistema operacional diferente do Windows.
     

Figure 1 Tipos de imagem

Descrição Valor
Aplicativo firmware 0x1
Aplicativo de inicialização 0x2
Objeto de carregador baseado em ntldr 0x3
Aplicativo em modo real 0x4
   

Você observará que a infra-estrutura de inicialização remodelada do Windows Vista é muito mais organizada do que as versões anteriores—fora do bootmgr, todo o código de inicialização existe dentro do nível raiz do diretório \boot e é transferido para os binários específicos do Windows uma vez que o BCD tenha especificado isso.

Inicializando o Windows XP e o Windows PE 2.0

Você provavelmente começa agora a ver como o Windows PE, usando o gerenciador de inicialização do Windows Vista, pode agir como um intermediário que permite continuar a inicializar o Windows XP ou versões anteriores do Windows enquanto adiciona o Windows PE 2.0 à mistura para uma ferramenta de recuperação integrada.

Claro, você adicionará uma outra etapa ao processo de inicialização, mas é uma etapa desenvolvida pela Microsoft. Sabendo que a nova infra-estrutura do bootmgr necessitava de compatibilidade com o ntldr existente e com outros gerenciadores de inicialização de terceiros, o bootmgr foi criado intencionalmente para oferecer suporte a essas soluções.

Agora que examinamos como o Windows é inicializado e como o novo BCD funciona, como unimos os dois e obtemos o Windows PE 2.0 na nossa instalação do Windows XP existente? Há duas maneiras de criar o setor de inicialização do Windows Vista—a parte do código de inicialização que informa ao sistema para iniciar o bootmgr. Uma delas é usar o diskpart e criar e formatar uma nova partição com o Windows PE 2.0. Mas essa não será uma opção aqui, uma vez que você já tem uma instalação do Windows XP existente que não deseja danificar ou mover. Em vez disso, siga este processo:

  1. Certifique-se de ter uma cópia do bootsect.exe e do bcdedit.exe no seu CD de inicialização do Windows PE 2.0 (os dois arquivos podem ser encontrados no seu DVD de instalação do Windows Vista).
  2. Inicialize o seu sistema Windows XP pelo CD do Windows PE 2.0.
  3. Uma vez inicializado, execute este comando:
    bootsect.exe /NT60 ALL

Isso definirá o setor de inicialização como sendo o setor de inicialização compatível com o Windows Vista que sabe como iniciar o bootmgr.

4. Copie o gerenciador de inicialização para o disco rígido:

    xcopy BOOTMGR C:\BOOTMGR /I

5. Copie o arquivo boot.SDI para o diretório \BOOT no disco rígido. Será necessário fazer uma cópia dele antes da inicialização, pois ele estará bloqueado e não poderá ser copiado enquanto executa o Windows PE:

    xcopy BOOT.SDI C:\BOOT\ 

Corrija o caminho de origem de acordo.

6. Copie o boot.WIM para o disco rígido. Como o SDI, você deve ter disponível uma cópia secundária; não será possível copiar o arquivo do qual você está executando:

    xcopy BOOT.WIM C:\BOOT\BOOT.WIM 

Corrija o caminho de origem de acordo.

7. Agora, crie um novo armazenamento BCD:

    bcdedit /createstore

8. Em seguida, crie as entradas BCD para carregar o Windows PE:

    bcdedit /create {ramdiskoptions} /d "Boot Windows PE"
    bcdedit /set {ramdiskoptions} ramdisksdidevice partition=c:
    bcdedit /set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
    bcdedit /create /d "Windows PE" /application OSLOADER

9. A última linha retornará um GUID. Substitua {YOURGUID} com o GUID real retornado. Essas são entradas no RAMDisk que inicializam o Windows PE do seu disco rígido, mostradas na Figura 4.

Figure 4 Entradas no RAMDisk que inicializam o Windows PE do seu disco rígido

bcdedit /set {YOURGUID} device ramdisk=[c:]\boot\boot.wim,{ramdiskoptions}
bcdedit /set{YOURGUID} path \windows\system32\winload.exe
bcdedit /{YOURGUID} osdeviceramdisk=[c:]\boot\boot.wim,{ramdiskoptions}
bcdedit /set{YOURGUID} systemroot \windows
bcdedit /set{YOURGUID} winpe yes
bcdedit /set {YOURGUID} detecthal yes

10. Agora, crie entradas do bootmgr para que o Gerenciador de Inicialização seja iniciado:

    bcdedit /create {bootmgr} /d "Boot Manager"
    bcdedit /set {bootmgr} device boot

11. Finalmente, configure uma entrada BCD para a sua instalação do Windows existente (altere o texto de exibição do Windows XP para qualquer um que você deseje exeibir no menu de inicialização do gerenciador de inicialização. O último comando também a define como a primeira (padrão) entrada no menu de inicialização:

    bcdedit /create {ntldr} /d "Windows XP"
    bcdedit /set {ntldr} device partition=C:
    bcdedit /set {ntldr} path \ntldr
    bcdedit /displayorder {ntldr} /addfirst

12. Agora deve ser possível reiniciar o seu sistema e iniciar a instalação anterior do Windows ou o Windows PE 2.0 selecionando a entrada de menu de atualização adequada. A Figura 5 mostra a saída de exemplo de bcdedit /enum all. Esse comando lista todas as entradas no BCD depois que as entradas foram adicionadas (de dentro do Windows PE 1.6).

Entrada de exemplo

Entrada de exemplo  (Clique na imagem para aumentar a exibição)

Venho trabalhando em um script que possa executar essa tarefa automaticamente. Atualmente, ele somente copia os arquivos de inicialização para o disco rígido e configura as suas entradas BCD. Ele não define o setor de inicialização como o novo valor do Windows Server 2008 enquanto executa o Windows —isso deve ser feito offline, no Windows PE. É possível encontrar o script na seção de downloads de código do site da TechNet Magazine em technetmagazine.com. Para executar o script, você deverá ter os seguintes itens no mesmo diretório do VBScript que está executando:

  1. BCDEdit
  2. BOOTMGR
  3. Um diretório \BOOT\ (da mídia do Windows Vista ou Windows PE 2.0)
  4. Um diretório \SOURCES\ com um arquivo BOOT.WIM do Windows PE válido e inicializável

Ele criará o BCD e copiará os arquivos de inicialização adequados. Depois de inicializar o Windows PE e executar o bootsect, você deve conseguir realizar a inicialização dupla.

Desfazendo a inicialização dupla

Desfazer a inicialização dupla é ainda mais fácil do que realizá-la. É necessário somente que você restaure o setor de inicialização para o setor de inicialização pré-Windows Vista executando o seguinte comando:

bootsect.exe /NT52 ALL

Uma vez que tenha sido restaurado, é possível excluir o bootmgr e o diretório \boot. Na inicialização seguinte, o setor de inicialização forçará o ntldr a iniciar e removerá completamente o Windows PE 2.0 e todos os binários de inicialização do Windows Vista do fluxo de inicialização.

Wes Miller é Gerente técnico de produto da Initiate Systems (InitiateSystems.com) em Austin, no Texas. Anteriormente, ele trabalhou na Winternals Software e como Gerente de programas na Microsoft. Entre em contato com ele pelo email technet@getwired.com.

© 2008 Microsoft Corporation e CMP Media, LLC. Todos os direitos reservados. A reprodução parcial ou completa sem autorização é proibida..