Сетевая загрузка PXE на основе TFTPD32

 

Описание настройки собственного PXE сервера на основе TFTPD32 для загрузки WinPE или BartPE.

PXE и процесс загрузки по сети

        Стандарт PXE (Preboot Execution Environment) позволяет превратить сетевую карту в одно из устройств, с которого может загрузиться компьютер. Разработку данного стандарта начала компания Intel, еще 1999 году, а потом к разработке присоединились такие гиганты компьютерной индустрии, как 3Com, HP, Dell, Compaq. Стандарт прижился. И сейчас, пожалуй, не возможно, найти современной сетевой платы без поддержки PXE.
Конечно для того, чтобы компьютер смог загрузиться по сети одного PXE не достаточно. Нужно еще наличие в сети серверов TFTP и DHCP.

        Процесс загрузки по сети можно упрощенно описать примерно так.

При включении компьютера, начинает работать PXE загрузчик, который находится в памяти (boot ROM) сетевого адаптера. Сетевая карта отправляет запрос к серверу DHCP для получения IP адреса. Получив запрос, DHCP сообщает сетевой плате IP адрес, маску сети, адрес TFTP сервера и имя загрузочного файла. После обработке полученных данных PXE обращается к серверу TFTP и загружает файл. Получив файл, PXE прекращает свою работу и передает управление загруженной программе.

Подготовка файлов

        Создадим каталог для сетевой установки C:\PXE. Внутри создадим каталог, например WinPE.
        Сетевая загрузка WinPE делится на два этапа. На первом этапе происходит загрузка файлов по протоколу TFTP. А на втором этапе файлы загружаются по протоколу CIFS (старое название SMB). Протокол CIFS более известен, как общий доступ к файлам и принтерам сети.
Поэтому для второго этапа загрузки нужно:

  • Сделать каталог C:\PXE доступным по сети (расшарить) для группы "Everyone (Все)" с правами только чтения.
  • Также необходимо убедиться, что учетная запись "Guest (Гость)" активирована.

Для этого нажимаем, правую клавишу мыши на "My Computer (Мой компьютер)" и выбираем "Manage (Управление)". Раскрываем "System Tools (Служебные программы)", "Local Users and Groups (Локальные пользователи и группы)". Выбираем "Users (Пользователи)". В правой части экрана нажимаем правую клавишу мыши на "Guest (Гость)" и выбираем "Properties (Свойства)". В появившемся окне убираем флажок с "Account is disabled (Отключить учетную запись)" и нажимаем кнопку OK

  • Если директория C:\PXE\WinPE находится на разделе с файловой системой NTFS, то необходимо в свойствах этого каталога в "Security (Безопасность)" также добавить группу "Everyone (Все)". Этой группе необходимо разрешить чтение.
  • Также следует убедиться, что не запрещен доступ пользователя "Guest (Гость)" по сети в групповой политике.

Для этого нажимаем "Start (Пуск)", выбираем "Control Panel (Панель управление)", "Administrative Tools (Администрирование)". В появившемся окне выбираем "Local Security Policy (Локальная политика безопасности)". После загрузки оснастки "Local Security Settings (Локальные параметры безопасности)", разворачиваем "Local Policies (Локальные политики)" и выбираем "User Rights Assignments (Назначение прав пользователя)". В правой части нажимаем дважды левую клавишу мыши на "Deny access to this computer from the network (Отказ в доступе к компьютеру по сети)". В появившемся списке отмечаем "Guest (Гость)" и нажимаем кнопку "Remove (Удалить)". Для подтверждения изменений нажимаем кнопку удалить.

Подготовка сборки WinPE для загрузки по сети

         Копируем содержимое сборки(каталоги I386 и Programs) в каталог C:\PXE\WinPE
         Копируем из каталога C:\PXE\WinPE\I386 файл ntdetect.com в каталог C:\PXE
         Разархивируем файлы (из дистрибутива Windows XP/Windows 2003) setupldr.ex_ и startrom.n1_ в каталог C:\PXE. Сделать это можно с помощью архиватора 7-zip или команд:
expand D:\WINXP\I386\setupldr.ex_ С:\PXE\WinPE\ntldr
expand D:\WINXP\I386\startrom.n1_ С:\PXE\WinPE\startrom.n12
Следует переименовать startrom.n12 в startrom.0
При работе с локализированной сборкой рекомендуется копировать файл bootfont.bin из каталога C:\PXE\WinPE в C:\PXE.
Распаковываем каталоги tftpd32, infparser и файл binlsrv.exe в C:\PXE

Настройка TFTP сервера (TFTPD32)

          Сначала для удобства следует отключить не нужные сервисы, оставив только "TFTP Server" и "DHCP Server". Затем следует указать каталог, в котором TFTP сервер будет искать файлы. За это отвечает параметр "Base Directory". В нашем случае это C:\PXE. Также следует включить "Option negotiation", "Allow '\' As virtual root" и "Translate Unix file names". Остальные опции выключены.

Настройке DHCP сервера (TFTPD32)

          Для загрузки по сети DHCP должен присвоить IP адрес и указать имя загружаемого файла.
Предположим на компьютере, который выступает в роли PXE сервера, присвоен IP адрес 192.168.0.1 с маской сети 255.255.255.0. Параметр "IP Pool starting address" указывает начальный IP адрес, с которого DHCP будет начинаться выдавать адреса. Установим значение в 192.168.0.10. Параметр "Size of pool" указывает, сколько компьютеров могут получить IP адреса от TFTPD32. Установим значение в 10. Параметр "Boot File" указывает, какой файл необходимо загрузить. В нашем случае это startrom.0. Если на компьютере несколько сетевых подключений, тогда рекомендуется включить опцию "Bind DHCP to this address" и указать наш IP 192.168.0.1.

Настройка программы RIS-LINUX от Sherpya

         Во время загрузки WinPE должна получить информацию, какой драйвер для сетевой платы она должна использовать. Эту информация предоставляет служба BINL. В качестве службы BINL будет использоватся программа ris-linux. Эта программа написана на языке Python, но мы будем использовать портированную под Windows версию.
Для работы BINL требуется создать базу данных сетевых драйверов следующей командой:
C:\PXE\infparser\infparser.exe C:\PXE\WinPE\I386\inf

Подготовка файла winnt.sif

         Для загрузки WinPE также потребуется файл C:\PXE\winnt.sif такого содержимого:

[SetupData]
OsLoadOptions = "/noguiboot /fastdetect /minint"
SetupSourceDevice = "\Device\LanmanRedirector\192.168.0.1\PXE\WinPE"
[UserData]
ComputerName = *

Завершение

         Чтобы наконец заработал наш PXE сервер, достаточно запустить binlsrv.exe и перезапустить tftpd32.

В ходе написание статьи были использованы материалы с сайта ]]>http://unattendedxp.com/]]>, а также собственные наработки. Вроде ничего не забыл. Сильно не пинайте.

Комментарии

Ну статья "заточенная" на wim не моя а "]]>Ieshua]]>". Я исходил только из своей конфигурации: linux-syslinux-binlsrv. Но про патч  pxeldr в статье упомянуть тоже забыл. Обязательно поравлю.

P/S "Прикрепите его пожалуйста к статье, упомяните в ней о этой тонкости и разойдемся с миром".   Жаль sad, что не планируете участвовать дальше в обсуждениях. В планах планируется создание сервиса сборки WIM и ISO непосредственно на сайте. Технически все подготовлено не хватает времени.

Жизнь бьёт ключом! И все больше по голове!>

Статья изначально не расчитана на wim загрузку, так как я не использую wim загрузку по сети. Статья описывает общие принципы работы сетевой загрузки. Естественно, для работы конкретной ПЕ-хи требуются правки, например, как было описано замена i386 на y386 (для сборки Yurkeshi), pxeldr для wim и т.п.

Ну вобщем то и при загрузке  "россыпью", на которую ориентирована эта статья, загрузка дальше подгрузки  mup.sys не идет. Если задать опцию noguiboot, видим вечный черный экран и мигающий курсор. Если нет, то просто вечную картинку загрузки Windows. Я и не стал дальше копатся, а налег именно на wim.

Ну во-первых WIM-загрузка по способу организации это частный случай загрузки "россыпью".
Во-вторых даже в чистой CD-загрузке у меня используется(как и в большинстве современных PE-сборках на базе NT 5.1) загрузка с поддержкой мультиядерности, что автоматически налагает требование на использование нестандартного pxeldr(тот что я выкладывал подойдет и для CD-сборки).

Кстати при WIM-загрузке мы имеем всего лишь один недостаток - повышенные требования по памяти и целый ряд достоинств:
- нечуствительна к ошибкам NTFS на системном разделе
- не требует наличия поддержки сети и сетевых драйверов в любом виде
- все что есть в сборке автоматом прогружается в память(скорость работы)

---
упс..

nek, а тут нужно было разбираться и показывать лог tftpd32. Например, уважаемый DH_Bender лог прислал, но отвечать перестал еще в августе, видимо ему просто стало не интересно, хотя можно было и отписаться. Вы пробовали только одну ПЕ-ху россыпью или несколько? После mup.sys должен грузится mrxsmb.sys, если зависание наблюдается после mrxsmb.sys значит загрузка не видит шару прописанную в winnt.sif (тут есть странный ньюанс, SetupSourceDevice должен содержать "\Device\LanmanRedirector\192.168.0.1\PXE\WinPE" и шару и папку, иначе загрузка дальше не пойдет), также нужно разбираться с правами на шару и папки, и т.п. В общем если выполнить точно все что описано в статье проблем быть не должно. Единственные проблемы может вызвать парсер inf файлов. Я в питоне не силен, поэтому мне тяжело его переписать.

yurkesha, позволю не согласится, у меня по умолчанию грузится мультиядерная ПЕ-ха и никаких хитрых модификаций при загрузке россыпи по сети не требуется. Хотя я собираю из Nt5.2, но я не думаю что это имеет большое значение. pxeldr нужен только для wim и без него у меня не работало. wim по сети я не использую по причине модульности моей ПЕ-хи.
Для подтверждение моих слов, можно скачать файл ]]>Patch_SETUPLDR_5.7z]]> в котором присутствуют все используемые загрузчики на текущий момент для разных типов загрузки.

P.S. В моих последних ПЕ-шках встроена возможность загрузки по сети именно по этой статье и по этому принципу. Кому интересно, могут найти последнюю версию (2.05) и поковырять. А на работе настроил загрузку по сети на древнем Mandrake, здесь одна проблема, чувствительность к регистру.

Ieshua - ты хочешь сказать что можно использовать стартовый pxeldr? 
Тогда мне непонятно - как именно происходит выбор hal?
Стартовый загрузчик умеет грузить только hal.dll.
Какой у тебя размер в байтах размер загрузчика?

---
упс..

Выкладывать файлы на народ - не круто. 
Использовал патченый pxeldr.
Попытка загрузки россыпью. Загрузилось. Упало в синьку. Загрузил еще раз. Стоит на "Установка поддержки сети". после пятиминутной задумчивости, провозгласило "Не удается найти INF-файл X:\i386\inf\nlite.inf", после чего "Работа оболочки была завершена с кодом 0x1". 

P.S.: Крайне нехватает спойлера и нормальной подсветки кода в редакторе постов и отображении их на сайте.

Для начала дистриб обработанный nlite выбрасываешь и вместо него используешь нормальный оригинальный дистриб (желательно WinXP SP2).
Россыпь однозначно не моя - у меня файла nlite.inf в принципе быть не может.
Сей продукт вполне подходит для обработки обычного дистриба, но заведомо не учитывает специфику работы BartPE builder...

А насчет выкладывания файлов:
- при создании публикации выбрать стиль FullHTML или Filtered HTML (и то и другое это визуальные стили - то есть не пишем коды и не видим их!)
- далее нажимаем на пиктограмму Вставить/Редактировать ссылку
- далее кнопка Выбор на сервере
-
ну и наконец в открывшемся окне менеджера файлов можно залить или выбрать залитый файл...

---
упс..

Yurkesha, не совсем понял, что значит "стартовый pxeldr", размер моего загрузчика 279040 байт(setupldr.exe из 2003 sp1). На счет hal.dll не уверен, но в server 2003 какой-то из файлов "комплекта поддержка мультиядерности" изначально многоядерный.(или hal.dll или ntoskrnl.exe)
nek, а я никуда и не выкладывал, гугл рулит. Выполните совет yurkeshi, а потом сюда по ]]>ссылке]]>. Здесь можно почитать, что синий экран 6B может быть вызван следующим:

Причина

Вероятно, инсталляция Windows XP находится на разделе с файловой системой NTFS. В свойствах Security (Безопасность) каталога отсутствуют разрешение на чтение для группы Everyone (Все).

Решение

В свойствах каталога в Security (Безопасность) разрешить чтение группе Everyone (Все).

А это значит, что Вы не выполнили все пункты статьи. За редким исключением может быть баг сетевого драйвера. Допустим Вы делали точно по статье тогда у Вас должны быть в корне диска папка pxe, а в ней winpe. Права нужно поправить для папки winpe. Что у вас выполняется в "Установка поддержки сети"? Сеть ведь уже поднята.

Ieshua ну вот примерно это я и имел в виду - setupldr  из 2003, а не от XP. И при этом реально не важно как сделана сборка.
А если взять в качестве pxeldr setupldr из XP - то мультиядерные сборки однозначно не будут работать, независимо от того на базе чего они собраны...

---
упс..

Yurkesha, очень может быть, я проверю по свободе, если подтвердится подправлю статью. Заодно допишу часть интересующую по wim загрузке через pxe.
Проверил. Резюме такое, выкачал последний y(pe) напарился с регистрами файлов dl_ и sy_. Использовал setupldr.exe от xp sp2. Все загрузилось с пол пинка без вопросов. Поймал себя на мысли что многоядерность не проверю, т.к. на работе в моем расположении нет такого железа((( Может дома гляну. Во всяком случае загрузка работает. Размер лоадера 241664 байт. Тест проводил на VirtualBox из репозитария Debian Squeeze с включенным IO APIC. Справедливости ради, можно отметить, что сетевые драйвера подтягивались binl сервером из моей ПЕ-шки, но я думаю особой разницы нет, т.к. я пользуюсь Вашим и сильно его не правил.

Так на одноядерном проблем и не дожно быть - ядро uniprocessor и hal соответствуют друг другу.
А вот если мультиядерность в наличии то ядро будет уже другое а hal все тот же...

---
упс..

> Для начала дистриб обработанный nlite выбрасываешь и вместо него используешь нормальный оригинальный дистриб (желательно WinXP SP2).
Скан с лицензионного диска, с которго я беру образ для работы приложить, дабы вы убедились? Либо лицензия не совсем лицензия, либо магия. Поищу другой диск.

Скан естественно ничего не показывает :)
Относительно могут убедить контрольные суммы, но поскольку неизвестно в данный момент о каком конкретно выпуске идет речь то непонятно с чем их сверять.
Поэтому остается единственный вариант - листинг файлов дистрибутива и содержимое txtsetup.sif.

---
упс..

nek, просто объясните откуда у вас в txtsetup.sif появляется nlite.inf?

Yurkesha, продолжаю тест загрузки россыпью по сети (информация бралась из aida64):

y(pe) cd 05.02.2012
setupldr.exe xp успешная загрузка - uniprocessor
setupldr.exe 2k3 sp1 успешная загрузка - uniprocessor
PXELDR-WIM-291 успешная загрузка - uniprocessor
ieshua's live dvd 2.05
setupldr.exe 2k3 sp1 успешная загрузка - multiprocessor

Во всяком случае загрузчик не повлиял на работоспособность загрузки по сети сборки.
Продолжение на реальном железе с двумя ядрами.
Первая десктоповая конфигурация не взлетела ни с одним из загрузчиков и выдавала bsod bb.
Вторая конфигурация ноутбук ASUS X54C с двумя ядрами:

y(pe) cd 05.02.2012
setupldr.exe xp успешная загрузка - multiprocessor
setupldr.exe 2k3 sp1 успешная загрузка - multiprocessor
PXELDR-WIM-291 успешная загрузка - multiprocessor

Следует отметить очень нестабильные результаты, во всех случаях успешная загрузка удавалась в одной из трех попыток. Ошибки разнообразные от синих экранов c00021a до зависаний при том на любом из загрузчиков.

Я не могу пояснить, откуда оно там взялось.
В любом случае попробую сделать образы из другого диска как только найду.
Имеющийся на руках диск еще никогда не подводил, но видимо и он не идеален.

Попробуйте эту или эту версии.

Yurkesha, у меня стойкое чувство, что проблема в сборках, например последний alkid на всех загрузчиках выдал: оболочка завершена с кодом 0x1. Y(PE) CD грузится у меня практически всегда на двухядерном asus x54c (иногда сильно торомозит и я не дожидаюсь) с загрузчиком от xp sp2. Так что я не подтвержаю наличие ошибок в статье. По поводу wim я допишу статью и добавлю pxeldr-wim.

Ну вообще что касается 0x21a на моей сборке - я заведомо использую пяток файлов из других версий винды. Но почему-то возникает ошибка только на PXE и при этом не всегда...
Абсолютно уверен что если вернуться к использованию юнипроцессорного ядра и hal то проблем не будет.
А насчет alkid - не создался вовремя RAM-диск или не сработал FBWF(он имеет особенности запуска на CD/HDD/NET да и вообще не предназначен для XP - в особенности русскоязычной).

---
упс..

Yurkesha, на alkide ошибка вываливается в самом конце загрузки, когда должен отобразится рабочий стол, на счет ошибки 0x21a ее может вызывать minlogon, я у себя его не использую т.к. у меня даже при обычной загрузке отображается эта ошибка.

ReatogoPE грузится без вопросов по сети с первым загрузчиком, поддержка мультиядерности есть.

Yurkesha, serg kaac, а можно ли мне получить права на редактирование этой статьи?)))

Так твоя же статья - вверху статьи кнопка "Изменить"...
Или так не получается?

---
упс..

В этом то и прикол.

Ну я временно порешал вопрос - пробуй - все должно получиться.
Но вообще требуется вмешательство Сергея...

---
упс..

Спасибо, попробую.
Не помогло, без изменений.

Ну пробуй еще - если и это не помогло то ждем Сергея... 

---
упс..

Неа, не помогло.
Кстати запустил только, что у себя y(pe) россыпью по сетке, все работает.(загрузчик setupldr.exe от XP SP2)

Я проверил права и на всякий случай переобпределил еще раз, должно по идее работать. Если нет то надобно через создание новой редакции делать.

Жизнь бьёт ключом! И все больше по голове!>

Не помогло, но я перезалил вложение и написал статью продолжение.

Страницы

Похожие материалы по этой теме на сайте

Содержимое
Norton Ghost - для "Сервера загрузки и установки"

Norton Ghost - это простая, но мощная утилита для создания образов как целых дисков, так и отдельных разделов диска.

Сетевая загрузка PXE на основе TFTPD32 (WIM)

Описание настройки собственного PXE сервера на основе TFTPD32 для загрузки WinPE или BartPE.(WIM Загрузка)

Ieshua's Live DVD/USB 2.13

- В качестве оболочки(shell) используется стандартный Explorer(XPE) и BsExplorer для ERD Commander
- Загрузчик производит автоопределение HAL и ядра

Универсальный сервер сетевой загрузки и установки. Файлы.

       В связи с тем, что было много вопросов и обращений по поводу ]]>...

Создание загрузочного USB-драйва на базе Windows Vista (WinPE 2.0)

      Windows Preinstallation Environment (PE) 2.0 - это, так сказать, урезанная версия Windows.

Система для обслуживания компьютеров и серверов в локальной сети предприятия

Причины создания, краткое описание, общий принцип работы

Kaspersky Virus Removal Tool 9

Плагин Kaspersky Virus Removal Tool с возможностью обновления баз при сборке через интернет.

Symantec Ghost 11.0 WIM

WIM-плагин для Symantec Ghost 11.0 - содержит файлы программы.