Когда клиентский компьютер при загрузке по сети выдаёт ошибку PXE-E53: No boot filename received, проблема почти всегда сводится к одному из трёх: DHCP-сервер не передал параметры 66/67, указанный загрузчик отсутствует в корне TFTP или сам образ для загрузки по PXE подготовлен в формате, который не поддерживает выбранный загрузчик. Именно несоответствие связки «загрузчик — образ — протокол передачи» становится причиной большинства зависаний на этапе DHCP... или чёрного экрана после получения IP-адреса.
Сетевая загрузка по PXE (Preboot Execution Environment) позволяет развернуть операционную систему, запустить диагностику или восстановить систему на компьютере без локального носителя — флешки или диска. Технология востребована в компьютерных классах, сервисных центрах и корпоративных сетях, где нужно обслуживать десятки машин одновременно. В этой статье разберём, какие типы образов подходят для PXE, как подготовить сервер и что проверить, когда загрузка не стартует.
Как работает загрузка по PXE: краткая схема процесса
Понимание цепочки загрузки помогает локализовать сбой за секунды вместо часов перебора настроек. Процесс выглядит так: сетевая карта клиента отправляет широковещательный DHCP-запрос, получает IP-адрес вместе с адресом TFTP-сервера и именем загрузочного файла, скачивает NBP (Network Bootstrap Program) — например, pxelinux.0 или wdsnbp.com — и передаёт ему управление. Загрузчик, в свою очередь, подтягивает конфигурацию и основной образ.
Ключевой момент: сам образ ОС по PXE напрямую не передаётся — сначала всегда загружается небольшой начальный загрузчик, который уже знает, как получить «тяжёлый» образ по TFTP, HTTP или NFS. Поэтому диагностику удобно строить по этапам: получил ли клиент IP, скачал ли NBP, загрузил ли конфиг, начал ли тянуть основной образ.
PXE — это цепочка: DHCP → TFTP → загрузчик (NBP) → образ. Сбой на любом звене останавливает весь процесс, поэтому диагностику ведите поэтапно.
Какие образы подходят для загрузки по сети
Не каждый ISO-файл можно просто положить на TFTP-сервер. Выбор формата зависит от задачи и от используемого загрузчика.
- 🖥️ WinPE (файл boot.wim) — стандарт для развёртывания Windows через WDS или SCCM; загружается в оперативную память и поддерживает сетевые драйверы.
- 🐧 Ядро Linux + initrd — классическая пара для PXELINUX: ядро
vmlinuzи начальный ram-дискinitrd.imgс параметрами загрузки. - 💾 Образы floppy/hdd через memdisk — старые DOS-утилиты и прошивальщики BIOS загружаются как образ дискеты или диска целиком.
- 🌐 iPXE-скрипты с HTTP-загрузкой ISO — современный вариант: iPXE умеет тянуть ISO напрямую по HTTP, что заметно быстрее TFTP.
- 🧰 Live-системы и rescue-образы — например, среды восстановления, антивирусные LiveCD, утилиты клонирования дисков.
Практическое правило: если утилита распространяется как ISO на десятки мегабайт и стартует из isolinux — её часто можно запустить через memdisk. Если нужна полноценная установка Windows — готовьте WinPE и дистрибутив на сетевом ресурсе. Для Linux-инсталляторов используйте штатные ядро и initrd из каталога netboot конкретного дистрибутива, сверяясь с его официальной документацией.
Подготовка сервера: DHCP, TFTP и структура каталогов
Минимальный набор служб для PXE-загрузки — DHCP-сервер и TFTP-сервер. На Linux это часто связка ISC DHCP или dnsmasq плюс tftpd-hpa; на Windows — роль WDS либо сторонние решения вроде Serva или Tiny PXE Server. Конкретные пути и имена параметров зависят от выбранного ПО, поэтому сверяйтесь с его документацией.
Если в сети уже работает основной DHCP (например, на роутере) и менять его настройки нельзя, используйте режим proxyDHCP: PXE-сервер отвечает только на загрузочные запросы, не раздавая адреса. Это безопасный способ добавить сетевую загрузку в существующую инфраструктуру без конфликтов.
# пример фрагмента конфигурации dnsmasq для PXE
dhcp-range=192.168.1.50,192.168.1.150,12h
enable-tftp
tftp-root=/srv/tftp
dhcp-boot=pxelinux.0
⚠️ Внимание: две службы DHCP в одном широковещательном домене без согласования приводят к конфликтам — клиенты могут получать адреса не с того сервера. Перед запуском собственного DHCP убедитесь, что он не пересекается с существующим, либо используйте proxyDHCP.
Структуру каталога TFTP держите простой: в корне — загрузчик и его конфигурация, в подкаталогах — ядра, initrd и образы. Отдельно проверьте права доступа: TFTP-сервер должен иметь право чтения всех файлов, а регистр имён в конфигах должен точно совпадать с реальными именами файлов — на Linux-серверах это критично.
☑️ Проверка готовности PXE-сервера
Настройка PXELINUX и пример меню загрузки
PXELINUX из пакета Syslinux — самый распространённый загрузчик для BIOS-режима. После скачивания pxelinux.0 он ищет конфигурацию в каталоге pxelinux.cfg: сначала файл по MAC-адресу клиента, затем по шестнадцатеричному IP, и в конце — файл default. Это позволяет задавать разные образы разным машинам.
Пример простого меню:
DEFAULT menu.c32
PROMPT 0
TIMEOUT 100
LABEL winpe
MENU LABEL Windows PE (setup)
KERNEL memdisk
INITRD winpe.iso
APPEND iso raw
LABEL rescue
MENU LABEL Rescue Linux
KERNEL rescue/vmlinuz
INITRD rescue/initrd.img
APPEND boot=live fetch=http://192.168.1.10/live/filesystem.squashfs
Обратите внимание на директиву APPEND — именно в ней передаются параметры ядра и адрес основного образа. Ошибка в одном символе пути здесь даёт зависание уже после успешного старта загрузчика, что часто путают с сетевой проблемой.
UEFI против Legacy BIOS: в чём подвох
Возможная причина ситуации «на старом ПК грузится, на новом — нет» — режим загрузки. Классический pxelinux.0 работает только в Legacy BIOS-режиме. Для UEFI нужен другой загрузчик: syslinux.efi, grubx64.efi или bootmgfw.efi для Windows. Более того, имя файла, который DHCP отдаёт клиенту, должно зависеть от архитектуры клиента (тип 0 — BIOS, тип 7 — UEFI x64).
Некоторые серверы (например, WDS и dnsmasq с соответствующей конфигурацией) умеют автоматически выбирать загрузчик по типу архитектуры из DHCP-запроса. Если ваш сервер этого не поддерживает, варианты такие: переключать клиентов в нужный режим вручную в настройках прошивки либо развести BIOS- и UEFI-машины по разным сегментам сети.
⚠️ Внимание: включённый Secure Boot на UEFI-клиенте блокирует загрузчики без цифровой подписи. Если загрузка обрывается сразу после получения файла — временно отключите Secure Boot в настройках прошивки для проверки, либо используйте подписанный загрузчик (например, shim для Linux).
Почему TFTP медленный и что с этим делать
TFTP передаёт данные небольшими блоками с подтверждением каждого, поэтому загрузка образа в сотни мегабайт занимает заметное время даже в гигабитной сети. Практическое решение — двухэтапная схема: по TFTP клиент получает только маленький загрузчик (iPXE), а сам образ скачивается по HTTP. Некоторые TFTP-серверы поддерживают увеличение размера блока (blksize), что тоже ускоряет передачу, если это предусмотрено и сервером, и клиентом.
Типичные ошибки PXE-загрузки и их диагностика
Соберём частые сбои в таблицу. Коды ошибок могут отличаться в зависимости от реализации PXE-стека конкретной сетевой карты, но общая логика диагностики сохраняется.
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Клиент не получает IP, висит на DHCP | DHCP недоступен или VLAN не тот | Кабель, порт коммутатора, работу DHCP-сервера |
| PXE-E53: no boot filename | Не переданы параметры 66/67 или их аналог | Настройки DHCP: next-server и имя загрузочного файла |
| TFTP timeout / PXE-E32 | TFTP закрыт файрволом или не запущен | Службу TFTP, UDP 69, права на каталог |
| Загрузчик стартует, но «файл не найден» | Опечатка в пути или несовпадение регистра | Имена файлов и пути в конфиге pxelinux.cfg |
| Чёрный экран после загрузки ядра | Нет драйверов сети/диска в initrd или WinPE | Состав образа, добавление драйверов в WIM |
Универсальный инструмент диагностики — анализ сетевого трафика: запустите Wireshark или tcpdump на сервере и посмотрите, до какого этапа доходит клиент. Видны DHCP-запросы, но нет ответов — проблема в DHCP. Есть запрос RRQ к TFTP, но нет данных — дело в файрволе или правах. Это самый быстрый способ отделить сетевую проблему от проблемы образа.
Держите на PXE-сервере маленький тестовый пункт меню — например, загрузку memtest или лёгкого Live-образа. Если он стартует, а «боевой» образ нет, сеть и сервер в порядке, и искать нужно в самом образе или его параметрах.
Создание собственного образа WinPE для PXE
Для задач развёртывания Windows собственный образ WinPE создаётся с помощью пакета Windows ADK и его дополнения WinPE, которые распространяет Microsoft. Общий порядок такой: устанавливаете ADK, запускаете среду средств развёртывания, создаёте рабочую копию WinPE командой copype, при необходимости добавляете драйверы и компоненты через dism, а затем полученный boot.wim публикуете на WDS или отдаёте через memdisk/другой загрузчик.
copype amd64 C:\WinPE_amd64
dism /Mount-Image /ImageFile:"C:\WinPE_amd64\media\sources\boot.wim" /Index:1 /MountDir:"C:\WinPE_amd64\mount"
dism /Add-Driver /Image:"C:\WinPE_amd64\mount" /Driver:"C:\drivers\net" /Recurse
dism /Unmount-Image /MountDir:"C:\WinPE_amd64\mount" /Commit
Добавление сетевых драйверов — шаг, который чаще всего пропускают. Если WinPE загрузился, но не видит сеть или сетевую шару с дистрибутивом, возможная причина именно в отсутствии драйвера под конкретный сетевой контроллер. Точный набор драйверов зависит от оборудования — берите их с сайта производителя сетевого адаптера или материнской платы.
⚠️ Внимание: командаdism /Unmount-Imageс ключом/Commitперезаписывает WIM-файл. Перед монтированием рабочего образа сделайте резервную копиюboot.wim— ошибка при внесении изменений может испортить образ, и его придётся создавать заново.
Рабочая связка для Windows-развёртывания: WinPE (boot.wim) + сетевые драйверы + дистрибутив на сетевом ресурсе. Образ без драйверов загружается, но бесполезен — сеть внутри него не работает.
Часто задаваемые вопросы
Можно ли загрузить обычный ISO-файл Windows напрямую по PXE?
Напрямую — нет: установщик Windows из ISO не рассчитан на загрузку в оперативную память по сети. Правильный путь — загрузить WinPE, а из него запустить установку с сетевого ресурса, либо использовать WDS, который automatизирует эту схему. Загрузка ISO через memdisk сработает только для образов, умеющих работать из RAM, и даже тогда с ограничениями.
Чем iPXE лучше стандартного PXE?
iPXE — расширенный загрузчик с открытым кодом: он поддерживает загрузку по HTTP/HTTPS, скрипты, меню и цепочку загрузки (chainloading). На практике это даёт более быструю передачу больших образов и гибкую логику выбора. Обычно iPXE загружается как NBP по TFTP, а дальше работает уже по своим скриптам.
Нужен ли отдельный сервер для PXE или подойдёт обычный роутер?
Некоторые прошивки роутеров (например, на базе dnsmasq) умеют отдавать параметры PXE и даже работать как TFTP — для домашней лаборатории этого может хватить. Для регулярной работы удобнее выделенная машина или виртуалка с полноценным TFTP и, при необходимости, HTTP-сервером для образов.
Почему загрузка работает на одном ПК и не работает на другом?
Чаще всего — различия в режиме загрузки (Legacy vs UEFI), состоянии Secure Boot и версии PXE-стека сетевой карты. Проверьте настройки прошивки проблемной машины: включена ли сетевая загрузка, какой режим выбран, не блокирует ли Secure Boot ваш загрузчик.
Как проверить TFTP-сервер без клиентского ПК?
Установите любой TFTP-клиент на другой машине в той же сети и попробуйте скачать загрузчик вручную, например: tftp 192.168.1.10 -c get pxelinux.0 (синтаксис зависит от клиента и ОС). Если файл не скачивается — клиентская машина ни при чём, проблема на сервере или в файрволе.