Não é possível inicializar o Windows Server 2012 do iSCSI

7

Estou trabalhando em como instalar vários sistemas operacionais em servidores sem disco para serem executados via iSCSI. Os servidores não possuem hardware especial para isso (nenhum iSCSI HBAs, etc.)

Brevemente joguei com os Serviços de Implantação do Windows, mas parece ser o oposto do que eu quero: posso estar errado, mas parece projetado para fazer uma instalação baseada em rede do Windows em um sistema que inicializa a partir de um local disco, enquanto eu quero instalar o Windows de tal forma que ele será executado a partir de um disco iSCSI, e eu não me importo se a instalação de mídia deve ser inserida localmente. Portanto, minha abordagem atual não usa WDS.

Este teste foi do Windows Server 2012, mas provavelmente também se aplica a versões anteriores.

Em suma, estou configurando um destino iSCSI em branco (tentei vários fornecedores de s / w e não parece fazer muita diferença, embora atualmente eu esteja usando o StarWind) e usar o PXE para encadear no gPXE ou iPXE para fazer uma inicialização iSCSI (já tentei os dois, com resultado semelhante, embora achei o gPXE um pouco mais fácil de usar.)

Obviamente, sem um sistema operacional, a inicialização falha, mas deixa a LU conectada através da interface de disco do BIOS, de modo que, quando o DVD-ROM local é inicializado, o instalador vê o volume para instalação.

Eu realizo o boot colocando um prompt do gPXE e digitando os seguintes comandos (mesmo no iPXE, exceto pela interface #):

dhcp net1
set keep-san 1
sanboot iscsi:#.#.#.#::::iqn.xxxxxxxxxxxxxxxxxxx
exit

O Windows Server 2012 parece ser instalado e, em algum momento, é reinicializado. O iPXE entra em ação para inicializar a partir do iSCSI, e o logotipo 'Metro' aparece - então, pelo menos, algo foi instalado na LU. No entanto, a tela fica azul clara e uma mensagem pisca brevemente em texto grande, algo sobre o "PC" (na verdade é um servidor em rack, mas de qualquer maneira) encontrando um problema, mas não consigo ler tudo antes que ele desapareça e o computador reinicializando.

Por fim, recebo uma tela de texto intitulada Windows Boot Manager , que diz:

Windows failed to start. A recent hardware or software change might be the
cause. To fix the problem:

  1. Insert your Windows installation disc and restart your computer.
  2. Choose your language settings, and then click "Next."
  3. Click "Repair your computer."

If you do not have this disc, contact your system administrator or computer
manufacturer for assistance.

    File: \Windows\system32\ntoskrnl.exe

    Status: 0xc00000e9

    Info: The operating system couldn't be loaded because the kernel is
          missing or contains errors

Aqueles que prestam muita atenção perceberão que essas instruções seriam muito difíceis de seguir com eficiência, especialmente em hardware físico. (By the way, eu tentei instalar tanto para máquinas físicas e virtuais, com resultados semelhantes.)

Eu estou supondo que o que está acontecendo aqui é que o Windows 2012 chega até porque o iPXE interceptou o Interrupt 13h (serviços de disco do BIOS), mas uma vez que o sistema foi inicializado o suficiente para mudar para drivers de modo protegido, rudemente interrompido porque não há disco rígido para ler e / ou o iniciador iSCSI do Windows falha.

O iPXE que estou tentando é 1.0.0+ (3fcb) e o gPXE que eu tentei era 1.0.1.

É possível ter o Server 2012 funcionando sem o iSCSI sem um HBA de hardware e, em caso afirmativo, o que posso estar fazendo errado?

    
por Kevin 09.02.2013 / 02:55

1 resposta

6

(Minha resposta inicial foi prematura. Como prometido, eu a reescrevi depois de ter conseguido tudo funcionando.)

Em primeiro lugar, descobri que, em geral, o software de ativação de inicialização iSCSI é meio cozido e os sistemas diferentes envolvidos interagem muito mal. Por esse motivo, eu recomendo ir com uma solução baseada em hardware, como HBAs iSCSI, se possível. Com isso dito, vou relatar minhas experiências aqui, caso isso ajude alguém.

Para resumir o que encontrei (suponho que você tenha configurado o DHCP e o TFTP para PXE e um destino iSCSI e tenha chegado ao encadeamento do gPXE ou do iPXE):

  • O gPXE e o iPXE nunca gravam várias NICs no iBFT (Tabela de Firmware de Inicialização iSCSI), o que pode afetar o Windows Server. Eu discuti esse problema em detalhes em uma questão separada aqui .

  • Além da limitação de design acima, o gPXE possui um bug real que também afeta sistemas com várias portas de rede. Eu explicarei abaixo. Para evitar esse bug, usei a compilação "UNDI only" do gPXE. Isso impede que o gPXE acesse as NICs diretamente e faz com que ele use uma API fornecida pelo carregador PXE da NIC. Isso faz com que o gPXE pense que existe apenas uma porta de rede (aquela em que foi carregada), e isso evita o bug. Não tenho certeza se esse bug está presente nas versões mais recentes do iPXE.

  • Eu estava inicialmente confuso sobre a opção keep-san no gPXE / iPXE. O flag keep-san afeta o comportamento do gPXE somente se a inicialização falhar . Portanto, essa opção é necessária apenas na primeira inicialização quando a instalação é iniciada.

  • O Windows Server (pelo menos 2012 e provavelmente outros) aparentemente não tolera a movimentação do iniciador iSCSI que fornece seu disco de sistema de uma porta de rede para outra. Se o Windows for inicializado a partir de um iniciador em uma porta de rede diferente daquela para a qual ele foi instalado, o Windows travará (BSOD e / ou reinicializará) durante a inicialização, no handoff para o iniciador MS.

  • Há um recurso / problema reconhecido no Windows Server (2003 e superior) em que ele usará o gateway, se for especificado, para acessar o destino, mesmo se o destino estiver na sub-rede local. Se o gateway não estiver disponível ou não for roteado de volta para a mesma porta, a inicialização falhará no handoff para o iniciador MS. Certifique-se de que nenhuma configuração de gateway seja fornecida pelo DHCP, se não for necessária.

O bug gPXE que eu mencionei acima envolve o iBFT (iSCSI Boot Firmware Table). Este é um objeto que é colocado na memória pelo sistema de pré-inicialização que contém informações sobre as NICs, o iniciador iSCSI e o destino iSCSI a ser usado como o disco do sistema. O sistema operacional usa essas informações para continuar a inicialização quando muda para o modo protegido. O formato é especificado aqui .

Suspeitando de um problema na informação que o gPXE estava colocando no iBFT, eu programei um setor de boot que despeja o conteúdo do iBFT na tela. Usando isso, descobri que os dados escritos pelo gPXE estão errados em certas circunstâncias.

Como mencionado, o gPXE apenas grava um registro de NIC no iBFT, mas em algumas situações, as informações gravadas nesse registro de NIC são desordenadas. O endereço MAC e o endereço PCI corresponderão a uma NIC, mas os endereços IP e gateway locais corresponderão a outro. É mais provável que isso aconteça se a SAN não estiver na primeira NIC.

Para aumentar a confusão, esta informação iBFT incorreta é escrita se o gPXE inicializar automaticamente, mas ao inicializar a partir do prompt de comando do gPXE, dependendo da seqüência exata dos comandos inseridos, a informação correta pode ser escrita. Acrescente o fato de que o Windows irá manifestar sintomas idênticos àqueles causados por este bug se seu NIC foi alterado (mesmo com um iBFT correto), e você pode ver porque eu rasguei meu cabelo.

A propósito, na minha pergunta original, eu pensava que ele estava funcionando para o Server 2008 R2, mas não para o Server 2012. (Estou editando isso como enganoso). Eu suspeito que não há realmente nenhuma diferença em seu comportamento subjacente e que os diferentes resultados devidos às sutilezas dos problemas acima e pequenas variações em meus testes.

    
por 09.02.2013 / 02:55