Назад | Перейти на главную страницу

Не удается загрузить Windows Server 2012 с iSCSI

Я работаю над установкой различных ОС на бездисковые серверы для работы через iSCSI. На серверах нет специального оборудования для этого (нет адаптеров шины iSCSI и т. Д.)

Я ненадолго поигрался со службами развертывания Windows, но, похоже, это примерно противоположно тому, что я хочу: я могу ошибаться, но, похоже, он предназначен для сетевой установки Windows в систему, которая затем будет загружаться с локального диска, тогда как Я хочу установить Windows так, чтобы она запускалась с диска iSCSI, и мне все равно, нужно ли устанавливать установочный носитель локально. Поэтому мой нынешний подход не использует WDS.

Этот тест проводился для Windows Server 2012, но, вероятно, применим и к предыдущим версиям.

Короче говоря, я настраиваю пустую цель iSCSI (я пробовал несколько поставщиков программного обеспечения и, похоже, это не имеет большого значения, хотя в настоящее время я использую StarWind) и использую PXE для подключения к gPXE или iPXE, чтобы сделать загрузка iSCSI (я пробовал оба, с аналогичным результатом, хотя gPXE показался мне немного проще в использовании).

Конечно, без ОС загрузка завершается неудачно, но LU остается подключенным через интерфейс диска BIOS, так что при загрузке локального DVD-ROM программа установки видит том для установки.

Я выполняю загрузку, перейдя к приглашению gPXE и ​​набрав следующие команды (такие же в iPXE, за исключением интерфейса #):

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

Windows Server 2012 вроде устанавливается и в какой-то момент перезагружается. iPXE запускается для загрузки с iSCSI, и появляется логотип «Metro» - так что, по крайней мере, что-то было установлено на LU. Однако затем экран становится светло-синим, и сообщение на короткое время мигает крупным текстом, что-то о «ПК» (на самом деле это стоечный сервер, но в любом случае), столкнувшийся с проблемой, но я не могу прочитать все это до того, как она исчезнет, ​​и компьютер перезагрузка.

В конце концов я получаю текстовый экран с названием Windows Boot Manager который гласит:

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

Те, кто уделяет пристальное внимание, поймут, что этим инструкциям будет очень трудно эффективно следовать, особенно на физическом оборудовании. (Кстати, я пробовал устанавливать как на физические, так и на виртуальные машины, с аналогичными результатами.)

Я предполагаю, что здесь происходит то, что Windows 2012 заходит так далеко, потому что iPXE подключил прерывание 13h (дисковые службы BIOS), но как только система загрузится достаточно далеко, чтобы переключиться на драйверы защищенного режима, загрузка грубо прерывается, потому что нет жесткого диска для чтения и / или инициатор iSCSI Windows не работает.

Я пробую iPXE 1.0.0+ (3fcb), а gPXE, который я пробовал, был 1.0.1.

Возможно ли, чтобы Server 2012 работал с iSCSI без аппаратного HBA, и если да, что я делаю не так?

(Мой первоначальный ответ был преждевременным. Как и обещал, я переписал его после того, как все заработало.)

Прежде всего, я обнаружил, что в целом программное обеспечение, обеспечивающее загрузку iSCSI, является недоработанным, и разрозненные системы взаимодействуют очень плохо. По этой причине Я рекомендую вместо этого использовать аппаратное решение, такое как адаптеры шины iSCSI, если это возможно. С учетом сказанного, я расскажу о своем опыте здесь, если это кому-то поможет.

Подводя итог тому, что я нашел (я предполагаю, что вы настроили DHCP и TFTP для PXE и ​​цели iSCSI и дошли до цепочки с gPXE или iPXE):

  • gPXE и ​​iPXE никогда записать несколько сетевых карт в iBFT (загрузочную таблицу микропрограмм iSCSI), и это может повлиять на Windows Server. Я подробно рассмотрел эту проблему в отдельном вопросе Вот.

  • В дополнение к вышеуказанному ограничению конструкции, gPXE имеет фактическую ошибку, которая также влияет на системы с несколькими сетевыми портами. Я объясню ниже. Чтобы избежать этой ошибки, я использовал сборку gPXE "только UNDI". Это предотвращает прямой доступ gPXE к сетевым адаптерам и заставляет вместо этого использовать API, предоставляемый загрузчиком PXE сетевой карты. Это заставляет gPXE думать, что существует только один сетевой порт (тот, на котором он был загружен), и это позволяет избежать ошибки. Я не уверен, присутствует ли эта ошибка в более новых версиях iPXE.

  • Сначала меня смущало keep-san вариант в gPXE / iPXE. В keep-san флаг влияет на поведение gPXE только если загрузка не удалась. Таким образом, эта опция нужна только при самой первой загрузке при запуске установки.

  • Windows Server (по крайней мере 2012 и, вероятно, другие) явно не допускает перемещения инициатора iSCSI, который предоставляет его системный диск, с одного сетевого порта на другой. Если Windows загружается от инициатора на другом сетевом порту, чем тот, на который она была установлена, Windows выйдет из строя (BSOD и / или перезагрузится) во время загрузки при передаче обслуживания инициатору MS.

  • В Windows Server (2003 и новее) существует подтвержденная функция / проблема, при которой он будет использовать шлюз, если он указан, для доступа к цели, даже если цель находится в локальной подсети. Если шлюз недоступен или не выполняет обратную маршрутизацию на тот же порт, загрузка завершится ошибкой при передаче обслуживания инициатору MS. Убедитесь, что DHCP не передает настройки шлюза, если они не нужны.

Ошибка gPXE, о которой я упоминал выше, касается iBFT (таблица микропрограмм загрузки iSCSI). Это объект, который помещается в память системой предварительной загрузки и содержит информацию о сетевых интерфейсах, инициаторе iSCSI и цели iSCSI для использования в качестве системного диска. ОС использует эту информацию для продолжения загрузки после перехода в защищенный режим. Формат указан Вот.

Подозревая проблему с информацией, которую gPXE помещает в iBFT, я запрограммировал загрузочный сектор, который выводит содержимое iBFT на экран. Используя это, я обнаружил, что данные, записанные gPXE, при определенных обстоятельствах ошибочны.

Как уже упоминалось, gPXE записывает только одну запись NIC в iBFT, но в некоторых ситуациях информация, записанная в эту запись NIC, перемешивается. MAC-адрес и адрес PCI будут соответствовать одному сетевому адаптеру, но локальный IP-адрес и адрес шлюза будут соответствовать другому. Это наиболее вероятно, если SAN не находится на первом сетевом адаптере.

Кроме того, эта неверная информация iBFT записывается, если gPXE загружается автоматически, но при загрузке из командной строки gPXE, в зависимости от точной последовательности введенных команд, может быть записана правильная информация. Добавьте сюда тот факт, что Windows будет проявлять симптомы, идентичные тем, которые вызваны этой ошибкой, если ее сетевой адаптер был изменен (даже с учетом правильного iBFT), и вы поймете, почему я вырвал себе волосы.

Между прочим, в моем первоначальном вопросе я думал, что он работает для Server 2008 R2, но не для Server 2012 (я редактирую это, поскольку это вводит в заблуждение.) Я подозреваю, что на самом деле нет никакой разницы в их базовом поведении и что разные результаты объясняются тонкостями вышеупомянутых задач и небольшими вариациями в моих тестах.