Как стать автором
Поиск
Написать публикацию
Обновить

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

Время на прочтение7 мин
Количество просмотров45K
Предустановочная среда может использоваться не только для установки операционной системы, но и как основа для инструментов системного администратора, например, восстановления системы, антивирусного лечения, диагностики сети и т.д. В данной статье будем рассматривать стандартный образ 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-сервера.
Теги:
Хабы:
Всего голосов 20: ↑19 и ↓1+18
Комментарии0

Публикации

Ближайшие события