Когда клиентский компьютер при загрузке по сети выдаёт ошибку 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-сервера

Выполнено: 0 / 5

Настройка 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 — именно в ней передаются параметры ядра и адрес основного образа. Ошибка в одном символе пути здесь даёт зависание уже после успешного старта загрузчика, что часто путают с сетевой проблемой.

📊 Для какой задачи вы настраиваете загрузку по PXE?
Установка Windows на несколько ПК
Запуск Linux live/rescue-системы
Диагностика и восстановление машин
Учебный класс или тонкие клиенты

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, висит на DHCPDHCP недоступен или VLAN не тотКабель, порт коммутатора, работу DHCP-сервера
PXE-E53: no boot filenameНе переданы параметры 66/67 или их аналогНастройки DHCP: next-server и имя загрузочного файла
TFTP timeout / PXE-E32TFTP закрыт файрволом или не запущенСлужбу 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 (синтаксис зависит от клиента и ОС). Если файл не скачивается — клиентская машина ни при чём, проблема на сервере или в файрволе.