16 окт. 2013 г.

Работа с образами Windows. Часть 1. Собираем Windows PE.

Данный пост открывает серию статей, посвященных работе с Microsoft Windows Assessment and Deployment Kit (ADK, комплект средств для развертывания и оценки Windows). Рассматриваться будут максимально простые сценарии использования: захват/развертывание образов, добавление драйверов и обновлений. Сложные процедуры управления файлами ответов через Windows System Image Manager и развертывания по сети при помощи Windows Deployement Services рассматриваться не будут, т.к. необходимо это либо при больших объемах производства и крупным компаниям-пользователям. Документация по SIM и WDS является практически исчерпывающей, в крупных компаниях эти инструменты, как правило хорошо изучены и уже используются. Для небольших компаний достаточно базовых знаний по работе с дистрибутивом WinPE и DISM, quick & dirty way, так сказать.
Мы проделаем следующие процедуры:
  • Приготовим дистрибутивы WinPE с возможностью загрузки с локального носителя или по сети
  • Установим ОС (например, пробную версию Windows Server 2012 Standart)
  • После необходимых процедур захватим образ раздела ОС из-под WinPE
  • Добавим в образ драйверы и обновления
  • Развернем образ и поставим загрузчик для вариантов с BIOS или UEFI

Устанавливаем ADK

ADK (Assessment and Deployment Kit), ранее известный как WAIK в варианте для пользователей и OPK tools для сборщиков, содержит множество полезных инструментов: от средства управления корпоративной активацией до средств оценки. Нам для работы нужны будут инструменты предустановки: утилита DISM (и если командлеты PowerShell, если интересно специалистам по PS) и Windows PE (Preinstallation Environment) — своеобразный мини-Windows, легковесный (меньше 300МБ), но с поддержкой сети и возможностью запуска скриптов и некоторых GUI-приложений.
Последняя стабильная версия ADK - 8, но уже можно использовать 8.1 Preview.

Драйверы

Ищем и распаковываем драйверы для всех нужных устройств, прежде всего SAS/SATA контроллеров. В нашем случае я собрал следующие:
  • 3ware_9750: 3ware уже давно был куплен LSI, но последняя серия на базе чипа LSI 2108 все еще встречается.
  • adaptec_arc: RAID контроллеры Adaptec с arc стеком, т.е. все начиная с 2420SA и до последних 2/3/5/7/8 серии, включая OEM варианты
  • adaptec_hba: HBA от Adaptec 6-й и 7-й серий (в дальнейшем выйдут следующие)
  • hpcissx2: RAID контроллеры Hewlett-Packard Smart Array от P400 до P420
  • hpcissx3: RAID контроллеры Hewlett-Packard Smart Array новых серий, от P430 и дальше
  • hpsa2: Hewlett-Packard Smart Array B230 и софтовые RAID контроллеры Hewlett-Packard (в виде своих fw для чипсетных Intel C200/C600)
  • intel_rst: чипсетные Intel
  • intel_rste: чипсетные Intel с поддержкой RSTe
  • intel_scu: чипсетный Intel SCU
  • lsi_mpt2: SAS2 HBA LSI первого поколения (на чипах LSI 2004/2008/2116)
  • lsi_mpt3: SAS2 HBA LSI второго поколения (на чипах LSI 2308)
  • lsi_mr: RAID контроллеры LSI MegaRAID, включая их OEM-собратьев от Intel, Supermicro, Dell, Cisco, IBM и прочих
Для удобства все раскладываем по каталогам: драйверы для Windows 7/Server 2008R2 - отдельно, для 8/Server 2012 - отдельно. Чтобы не интегрировать в дистрибутив WinPE лишние драйверы, то можно вынести в отдельный каталог драйверы SAS/SATA контроллеров и гигабитных Ethernet.

Скрипт для подготовки дистрибутива WinPE

Для подготовки образов используется вот такой вот скрипт:
@echo off

REM где хранить Windows PE
Set winpe_root=E:\opk\winpe_build

REM путь установки ADK
Set adk_path=%programfiles(x86)%\Windows Kits\8.1\Assessment and Deployment Kit

REM путь к каталогу с драйверами
Set drivers_path=E:\opk\drivers\win2012_pe

REM вызов скрипта из состава ADK для установки переменных
call "%adk_path%\Deployment Tools\DandISetEnv.bat"

REM очистка каталога с Win PE
if exist %winpe_root% rd /q /s %winpe_root%

REM копируем дистрибутив Win PE
call copype.cmd amd64 %winpe_root%

REM монтируем образа
Dism /Mount-Wim /WimFile:%winpe_root%\media\sources\boot.wim /index:1 /MountDir:%winpe_root%\mount

REM добавляем нужные пакеты
Dism /image:%winpe_root%\mount /Add-Package /PackagePath:"%adk_path%\Windows Preinstallation Environment\amd64\WinPE_OCs\winpe-hta.cab"
Dism /image:%winpe_root%\mount /Add-Package /PackagePath:"%adk_path%\Windows Preinstallation Environment\amd64\WinPE_OCs\winpe-scripting.cab"
Dism /image:%winpe_root%\mount /Add-Package /PackagePath:"%adk_path%\Windows Preinstallation Environment\amd64\WinPE_OCs\winpe-wmi.cab"

REM добавляем драйверы
Dism /image:%winpe_root%\mount /Add-Driver /driver:%drivers_path% /recurse

REM устанавливаем часовой пояс
Dism /image:%winpe_root%\mount /Set-TimeZone:"Russian Standard Time"

REM отмонтируем образ с сохранением изменений
Dism /Unmount-Wim /MountDir:%winpe_root%\mount\ /Commit

REM создаем ISO образ
Makewinpemedia /iso /f %winpe_root% %winpe_root%\winpe_amd64.iso

Загрузка с HDD или USB-флешки

На выходе получаем ISO образ winpe_amd64.iso и wim-образ (лежит в %winpe_root%\media\sources\boot.wim). Загружать WinPE из Wim-образа можно с любого носителя. Прописать можно вручную через bcdedit, но гораздо проще это будет сделать при помощи EasyBCD: копируем boot.wim на флешку, через EasyBCD ставим загрузчик и добавляем в загрузочное меню пункт WinPE из соответствующей вкладки, где нужно указать путь к wim-образу.
Проверяем загрузку WinPE:

Часть 2: загрузка WinPE через PXE