Руководство по сетевой загрузке предустановочной среды Windows (WinPE)

Предустановочная среда может использоваться не только для установки операционной системы, но и как основа для инструментов системного администратора, например, восстановления системы, антивирусного лечения, диагностики сети и т.д. В данной статье будем рассматривать стандартный образ WinPE без добавления административных утилит, так как это тема для отдельной статьи.

Последовательность сетевой загрузки WinPE, начиная с версии 2.0, следующая:
  1. загружается сетевое ядро pxeboot.com;
  2. сетевое ядро загружает стандартный диспетчер загрузки bootmgr.exe, далее сетевая загрузка практически не отличается от загрузки с других носителей;
  3. диспетчер загрузки читает файл BCD (boot configuration data), где прописана конфигурационная информация (расположение загрузочных файлов), загружает необходимый шрифт (wgl4_boot.ttf) и драйвер виртуального диска boot.sdi, потом загружается образ WinPE;
  4. диспетчер загрузки передает управление программе, указанной в параметре path BCD-файла.


Для получения вышеуказанных файлов нет необходимости разворачивать (скачивать и устанавливать) пакеты Windows AIK, как сказано, например, здесь. Также необязателен похожий пакет OEM Preinstallation Kit. Нам нужен только сам установочный диск или даже его образ, в последнем случае на вашем компьютере должно быть 7Zip или любая другая программа, которая позволит копировать файлы из образов ISO и WIM. Поэтому не тратьте время на закачку и установку Windows AIK. Подойдут любые совместимые с архитектурой дистрибутивы Windows 7, 8 и даже 10. Для максимальной совместимости лучше использовать архитектуру x86.

Файлы boot.sdi и bcd можно взять в каталоге boot, здесь же можно взять целиком подкаталог fonts (там располагается шрифт wgl4_boot.ttf), а из каталога sources нужен только файл boot.wim. Потребуются еще два файла, которые располагаются в образе boot.wim. Проще всего воспользоваться графическим файловым менеджером 7Zip, но если вы собираетесь добавлять в образ WinPE драйверы или пакеты, то лучше использовать утилиту dism. Далее мы будем рассматривать вариант с dism, а для тех, кому достаточно будет стандартного образа, сообщаем: необходимые файлы (pxeboot.n12 и bootmgr.exe) находятся в каталоге windows\boot\pxe. Файл pxeboot.n12 отличается от, указанного выше, pxeboot.com тем, что не требует нажатия клавиши F12.

В случае с dism потребуется компьютер с Windows 7-10, так как на Windows XP dism не работает, как в прочем и с утилитой bcdedit. Работать с этими утилитами можно только из под администратора, то есть находим в кнопке пуск пункт «Командная строка», щелкаем правой кнопкой мыши по этому пункту и выбираем из контекстного меню «Запуск от имени администратора» (способов много, все эти способы и для всех операционных систем перечислять смысла нет, если не получилось попробуйте включить соображалку). Получить справку по работе с этой утилитой можно, набрав в запущенной командной строке:

dism /?

Например, мы хотим убедиться, что это нужный нам WIM-файл, то есть нам нужны сведения об образах в WIM-файле, для этого получим справку о команде /Get-Wiminfo, набрав в консоли:

dism /get-wiminfo /?

Подключим образ следующей командой:

dism /mount-wim /wimfile:<путь_к_WIM-файлу> /index:<индекс_образа> /mountdir:<каталог_подключения>

Обращаю ваше внимание, что путь к WIM-файлу и каталогу подключения должны существовать на этом компьютере, а индекс образа можно узнать командой /Get-Wiminfo. В каталоге подключения находим папку windows\boot\pxe, в которой берем два файла: pxeboot.n12 и bootmgr.exe.

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

dism /image:<каталог_подключения> /Add-Driver /driver:<каталог_c_драйвером> /recurse /ForceUnsigned

Если вам потребуется добавление дополнительных пакетов, например, таких как: WMI, HTA, MDAC, NetFX, PPPoE, PowerShell, scripting и др., то их нужно сначала найти. Например, установить Windows OPK или AIK или ADK. Потом выполнить команду:

Dism /image:<каталог_подключения> /Add-Package /PackagePath: <путь_и_имя_пакета_cab>

Далее надо отключить образ командой:

dism /unmount-wim /mountdir:<каталог_подключения> /commit

Дальше мы рассмотрим pxelinux – сетевой загрузчик по PXE из пакета syslinux, который надо скачать. Распакуем скачанный файл, но прежде чем будем копировать файлы, разберемся с корневым каталогом. Допустим, мы используем Tftpd32 под операционной системой Windows, и корневым каталогом мы делаем C:\tftpd32. Далее все пути мы будем отсчитывать от этого каталога, а указывать мы его не будем, более того в путях будет использоваться прямой слэш, а не обратный как в Windows. То есть, если указано pxelinux.cfg/default, то реальный путь будет C:\tftpd32\pxelinux.cfg\default, причем default это файл без расширения. Скопируем следующие файлы из каталога, куда распаковали syslinux в корневой каталог (то есть C:\tftpd32):
  • bios\core\pxelinux.0 (собственно сам сетевой загрузчик);
  • из каталога bios\com32\menu два файла: menu.c32 и vesamenu.c32 (menu.c32 будем использовать только для тех машин, где не сработает vesamenu.c32);
  • bios\com32\chain\chain.c32 (модуль управления загрузчиками, обычно используется для локальной загрузки);
  • bios\com32\elflink\ldlinux\ldlinux.c32 (вторичный загрузчик, обязателен при использовании pxelinux.0);
  • bios\com32\lib\libcom32.c32 (необходим при использовании chain.c32);
  • bios\com32\libutil\libutil.c32 (необходим при использовании chain.c32);
  • bios\memdisk\memdisk (драйвер загрузки образов флоппи, жесткого диска, ISO и т.д.).

Сетевой загрузчик не очень сильно отличается от родительского проекта syslinux, поэтому многое, что применимо и при загрузке с флешки или компакт-диска и наоборот. Создадим папку pxelinux.cfg, в которой будет пока единственный файл (потом с ростом вариантов загрузки будет увеличиваться количество конфигурационных файлов) – default, со следующим содержимым:

UI vesamenu.c32
MENU TITLE PXE Special Boot Menu

LABEL bootlocal
   MENU LABEL ^Boot local disk
   MENU DEFAULT
   LOCALBOOT 0
 TIMEOUT 80
 TOTALTIMEOUT 9000
 
LABEL winpe
   MENU LABEL ^WinPE
   KERNEL pxeboot.0

Первая строчка задает графический характер меню, вторая – название всего меню. Потом идут два пункта меню, которые идентифицируются как bootlocal и winpe, а на экран будут выведены: Boot local disk и WinPE. Как вы догадались, первый пункт меню является пунктом по умолчанию и обеспечивает локальную загрузку, но нам интересен второй пункт. Получается какая-то путаница, сначала говорилось о pxeboot.com, скопировали pxeboot.n12, а прописываем pxeboot.0. Дело в том, что pxelinux предъявляет свои требования к наименованию сетевых загрузчиков – расширение таких файлов .0, кстати не путайте pxeboot.0, который мы взяли из образа WinPE с pxelinux.0, взятый из syslinux. Второй требуется для отображения меню, а первый загружается только после выбора соответствующего меню. Значит, мы должны переименовать pxeboot.n12 в pxeboot.0 и поместить в корневую папку.

Также в корневую папку мы должны поместить bootmgr.exe. Создаем в корневой папке подкаталог boot, куда нужно поместить два файла: bcd и boot.sdi и каталог fonts, еще надо создать каталог sources, куда скопируем файл boot.wim. Если вас устраивает подобное расположение всех загрузочных файлов, то файл bcd менять не надо. Хитрость тут заключается в том, что сетевая загрузка аналогична загрузке с компакт-диска или флешки.

Можем запускать DHCP и TFTPD (в нашем примере это Tftpd32), только проверьте правильность настроек: каталог — C:\tftpd32, файл — pxelinux.0, выбор сетевого интерфейса и т.д. При наличии ошибок или отсутствия нужного результата, смотрите вывод в журнал (Log Viewer). Отдельно стоит сказать про компьютеры с отсутствием совместимости с BIOS, то есть только с UEFI. Для таких компьютеров нужны другие файлы:
  • вместо pxelinux.0 syslinux.efi, который располагается в efi32\efi\syslinux.efi для 32-разрядных систем или efi64\efi\syslinux.efi для 64-разрядных;
  • вместо ldlinux.c32 соответственно — efi32\com32\elflink\ldlinux\ldlinux.e32 или efi64\com32\elflink\ldlinux\ldlinux.e64.

Рассмотрим последний вопрос нашей статьи: «А что если нужно изменить стандартное расположение загрузочных файлов WinPE?». Тогда нам нужно сделать изменения в файле bcd. Вообще-то файл bcd представляет собой обычный куст реестра и может быть загружен стандартным regedit, но так не удобно будет работать с двоичными данными, поэтому воспользуемся утилитой bcdedit. Как и в работе с предыдущей утилитой нам нужен режим администратора, поэтому, если вы закрыли окно командной строки, его надо открыть таким же способом. Справку по работе с утилитой bcdedit можно получить набрав:

bcdedit /?

Для начала определимся, что в переменной %BCD% будет полное имя нового файла BCD, создадим этот файл:

bcdedit /createstore %BCD%

Далее создадим новую запись дополнительных параметров, требуемых диспетчером загрузки для устройств электронных дисков:

bcdedit /store %BCD% /create {ramdiskoptions} /d "Ramdisk options"

Задаем два параметра, причем второй ссылается на переменную %SDI%, которая содержит путь\boot.sdi относительно загрузочного устройства (первоначально было \boot\boot.sdi):

bcdedit /store %BCD% /set {ramdiskoptions} ramdisksdidevice boot
bcdedit /store %BCD% /set {ramdiskoptions} ramdisksdipath %SDI%

Создаем новую запись для WinPE:

bcdedit /store %BCD% -create /d "WinPE Boot Image" /application osloader

Результатом последней команды будет вывод на экран GUID в фигурных скобках, далее мы его будем обозначать как переменную %GUID%. Вообще-то это можно было бы автоматизировать с помощью команды FOR, но тогда сложнее разбирать их. Устанавливаем параметр системного корневого каталога:

bcdedit /store %BCD% /set %GUID% systemroot \Windows

Устанавливаем параметры определения HAL и WinPE:

bcdedit /store %BCD% /set %GUID% detecthal Yes
bcdedit /store %BCD% /set %GUID% winpe Yes

Устанавливаем параметры устройства, содержащего операционную систему и устройство содержащее файл %WIM%, например \windows\winpe.wim:

bcdedit /store %BCD% /set %GUID% osdevice ramdisk=[boot]%WIM%,{ramdiskoptions}
bcdedit /store %BCD% /set %GUID% device ramdisk=[boot]%WIM%,{ramdiskoptions}

Создаем еще одну запись диспетчера загрузки:

bcdedit /store %BCD% /create {bootmgr} /d "Windows BootManager"

Устанавливаем параметр ожидания:

bcdedit /store %BCD% /set {bootmgr} timeout 30

Устанавливаем очередность:

bcdedit /store %BCD% /set {bootmgr} displayorder %GUID%

Все, BCD-файл готов, можно его подкладывать в каталог boot нашего TFTPD-сервера.
Поделиться публикацией

Похожие публикации

Комментарии 0

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое