[Из песочницы] Руководство по сетевой загрузке предустановочной среды Windows (WinPE)
Предустановочная среда может использоваться не только для установки операционной системы, но и как основа для инструментов системного администратора, например, восстановления системы, антивирусного лечения, диагностики сети и т.д. В данной статье будем рассматривать стандартный образ WinPE без добавления административных утилит, так как это тема для отдельной статьи.Последовательность сетевой загрузки WinPE, начиная с версии 2.0, следующая:
загружается сетевое ядро pxeboot.com; сетевое ядро загружает стандартный диспетчер загрузки bootmgr.exe, далее сетевая загрузка практически не отличается от загрузки с других носителей; диспетчер загрузки читает файл BCD (boot configuration data), где прописана конфигурационная информация (расположение загрузочных файлов), загружает необходимый шрифт (wgl4_boot.ttf) и драйвер виртуального диска boot.sdi, потом загружается образ WinPE; диспетчер загрузки передает управление программе, указанной в параметре 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-сервера.