Предустановочная среда может использоваться не только для установки операционной системы, но и как основа для инструментов системного администратора, например, восстановления системы, антивирусного лечения, диагностики сети и т.д. В данной статье будем рассматривать стандартный образ 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-сервера.