(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 flagkeep-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.