Предустановочная среда может использоваться не только для установки операционной системы, но и как основа для инструментов системного администратора, например, восстановления системы, антивирусного лечения, диагностики сети и т.д. В данной статье будем рассматривать стандартный образ WinPE без добавления административных утилит, так как это тема для отдельной статьи.
Последовательность сетевой загрузки WinPE, начиная с версии 2.0, следующая:
Для получения вышеуказанных файлов нет необходимости разворачивать (скачивать и устанавливать) пакеты Windows AIK, как сказано, например, здесь. Также необязателен похожий пакет OEM Preinstallation Kit. Нам нужен только сам установочный диск или даже его образ, в последнем случае на вашем компьютере должно быть 7Zip или любая другая программа, которая позволит копировать файлы из образов ISO и WIM. Поэтому не тратьте время на закачку и установку Windows AIK. Подойдут любые совместимые с архитектурой дистрибутивы Windows 7, 8 и даже 10. Для максимальной совместимости лучше использовать архитектуру x86.
Файлы
В случае с dism потребуется компьютер с Windows 7-10, так как на Windows XP dism не работает, как в прочем и с утилитой bcdedit. Работать с этими утилитами можно только из под администратора, то есть находим в кнопке пуск пункт «Командная строка», щелкаем правой кнопкой мыши по этому пункту и выбираем из контекстного меню «Запуск от имени администратора» (способов много, все эти способы и для всех операционных систем перечислять смысла нет, если не получилось попробуйте включить соображалку). Получить справку по работе с этой утилитой можно, набрав в запущенной командной строке:
Например, мы хотим убедиться, что это нужный нам WIM-файл, то есть нам нужны сведения об образах в WIM-файле, для этого получим справку о команде
Подключим образ следующей командой:
Обращаю ваше внимание, что путь к WIM-файлу и каталогу подключения должны существовать на этом компьютере, а индекс образа можно узнать командой
Для желающих добавить драйвера потребуется команда:
Если вам потребуется добавление дополнительных пакетов, например, таких как: WMI, HTA, MDAC, NetFX, PPPoE, PowerShell, scripting и др., то их нужно сначала найти. Например, установить Windows OPK или AIK или ADK. Потом выполнить команду:
Далее надо отключить образ командой:
Дальше мы рассмотрим pxelinux – сетевой загрузчик по PXE из пакета syslinux, который надо скачать. Распакуем скачанный файл, но прежде чем будем копировать файлы, разберемся с корневым каталогом. Допустим, мы используем Tftpd32 под операционной системой Windows, и корневым каталогом мы делаем
Сетевой загрузчик не очень сильно отличается от родительского проекта syslinux, поэтому многое, что применимо и при загрузке с флешки или компакт-диска и наоборот. Создадим папку pxelinux.cfg, в которой будет пока единственный файл (потом с ростом вариантов загрузки будет увеличиваться количество конфигурационных файлов) – default, со следующим содержимым:
Первая строчка задает графический характер меню, вторая – название всего меню. Потом идут два пункта меню, которые идентифицируются как bootlocal и winpe, а на экран будут выведены: Boot local disk и WinPE. Как вы догадались, первый пункт меню является пунктом по умолчанию и обеспечивает локальную загрузку, но нам интересен второй пункт. Получается какая-то путаница, сначала говорилось о
Также в корневую папку мы должны поместить
Можем запускать DHCP и TFTPD (в нашем примере это Tftpd32), только проверьте правильность настроек: каталог —
Рассмотрим последний вопрос нашей статьи: «А что если нужно изменить стандартное расположение загрузочных файлов WinPE?». Тогда нам нужно сделать изменения в файле bcd. Вообще-то файл bcd представляет собой обычный куст реестра и может быть загружен стандартным regedit, но так не удобно будет работать с двоичными данными, поэтому воспользуемся утилитой bcdedit. Как и в работе с предыдущей утилитой нам нужен режим администратора, поэтому, если вы закрыли окно командной строки, его надо открыть таким же способом. Справку по работе с утилитой bcdedit можно получить набрав:
Для начала определимся, что в переменной %BCD% будет полное имя нового файла BCD, создадим этот файл:
Далее создадим новую запись дополнительных параметров, требуемых диспетчером загрузки для устройств электронных дисков:
Задаем два параметра, причем второй ссылается на переменную %SDI%, которая содержит путь\boot.sdi относительно загрузочного устройства (первоначально было \boot\boot.sdi):
Создаем новую запись для WinPE:
Результатом последней команды будет вывод на экран GUID в фигурных скобках, далее мы его будем обозначать как переменную %GUID%. Вообще-то это можно было бы автоматизировать с помощью команды FOR, но тогда сложнее разбирать их. Устанавливаем параметр системного корневого каталога:
Устанавливаем параметры определения HAL и WinPE:
Устанавливаем параметры устройства, содержащего операционную систему и устройство содержащее файл %WIM%, например \windows\winpe.wim:
Создаем еще одну запись диспетчера загрузки:
Устанавливаем параметр ожидания:
Устанавливаем очередность:
Все, BCD-файл готов, можно его подкладывать в каталог boot нашего TFTPD-сервера.
Последовательность сетевой загрузки 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-сервера.