Установка Windows 7 по сети при помощи Microsoft Windows AIK



Не так давно столкнулся с ситуацией, которая в принципе не вызывает особых проблем у системных администраторов. Появилась необходимость обновления ОС на многочисленных компьютерах организации, что в свою очередь все же вызвало ряд некоторых проблем, решения которых приходилось собирать по частям, а так же допиливать большую часть всего процесса самому о чем собственно я и хочу вам рассказать.

Данными проблемами стали ограничения в наличии одного привода DVD-ROM, одного дня свободного времени, а так же порядка двадцати компьютеров на которые необходимо было установить Windows 7 со всем набором необходимых драйверов, программ etc.
При поиске информации в Google по данному вопросу не нашлось ничего что работало бы без косяков или работало вообще. Но начнем по порядку.

Подготовка образа операционной системы

Для простоты подготовки боевой ОС под основу была взята Oracle VirtualBox последней версии, а так же Windows 7 x64 Профессиональная. Первое что необходимо сделать — установить и настроить Windows 7 на виртуальной машине. Для этого в процессе добавления VM создаем два виртуальных жестких диска. Один для установки и настройки на нем Windows 7, второй для последующего сохранения на него образа настроенной системы. Так же необходимо выполнить установку дополнения гостевой ОС Virtualbox — Virtual Machine Additions и создать общую папку для дальнейшего копирования созданного образа на физическую машину.
После установки на VM всей начинки, переходим к этапу подготовки системы с помощью утилиты sysprep, находящуюся в корне системы нашей VM:
%windir%\system32\sysprep\sysprep.exe 

Для подготовки системы к созданию настроенного образа необходимо задать утилите параметры:
  1. Переход в окно приветствия системы (OOBE) — этот режим будет активирован при следующем запуске системы. Запускает компьютер в режиме экрана приветствия.
  2. Установить галочку «Подготовка к использованию» — подготавливает установку Windows перед созданием образа. Идентификатор безопасности (SID) обнуляется, точки восстановления системы сбрасываются, журналы событий удаляются.
  3. Параметры завершения работы «Завершение работы» — по окончанию работы утилиты система завершит свою работу.

Не следует запускать ОС до сохранения образа системы, так как во время следующего запуска компьютера начинает работать специализированный этап настройки. Создается новый идентификатор безопасности (SID) и сбрасываются часы активации Windows.


Утилита удаляет в том числе и установленные драйверы. Чтобы сохранить их, необходимо выполнять sysprep из командной строки с параметром:
/unattend: указывается путь к файлу ответов 
В файле ответов необходимо указать параметр PersistAllDeviceInstalls (начиная с Windows 8 также есть параметр DoNotCleanUpNonPresentDevices):
<PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
<!-- Windows 8 и выше <DoNotCleanUpNonPresentDevices>true</DoNotCleanUpNonPresentDevices> -->
После выполнения очистки система автоматически выключится. Приступаем к следующему этапу.

Установка и настройка Windows AIK + PE

Скачиваем и устанавливаем пакет автоматической установки Windows (AIK) для Windows 7. После запуска setup.exe выбираем пункт «Установка Windows AIK». Особых проблем при установке возникнуть не должно.

Создание и настройка образа Windows PE
Windows PE — среда предустановки использующаяся для подготовки к установке OC. С помощью Windows PE мы будем захватывать системный том в wim-образ с помощью утилиты imagex и их сохранять его на другой раздел жесткого диска.
В данном случае рассматривается создание диска с 64-разрядной версией Windows PE. Если вы создаете диск с 32-разрядной версией Windows PE, вам необходимо будет заменить во всех командах архитектуру (amd64 на х86).

В меню Пуск запустите Все программы > Microsoft Windows AIK > Командная строка средств развертывания (Deployment Tools Command Prompt) — все последующие команды будут вводиться в это окно командной строки. Требуется запуск от имени администратора.
Копируем файлы образа Windows PE
copype.cmd amd64 d:\winpe_image

Для изменения скопированного образа Windows PE его необходимо подключить командой
dism /Mount-Wim /WimFile:d:\winpe_image\winpe.wim /index:1 /MountDir:d:\winpe_image\mount

Теперь подключив образ, мы можем устанавливать в него пакеты и добавлять собственные файлы.
Добавим в наш образ утилиту imagex.
xcopy "%ProgramFiles%\Windows AIK\Tools\amd64\imagex.exe" d:\winpe_image\iso\

Так же по желанию можно сразу подготовить список исключений — файлов и папок, которые не будут включаться в сохраняемый образ. Создайте в любом текстовом редакторе файл Wimscript.ini и укажите в нем файлы и папки, которые вы хотите исключить из образа. Файл Wimscript.ini размещается в одной папке с imegex.
По умолчанию imagex использует следующие исключения:
[ExclusionList]
\$ntfs.log
\hiberfil.sys
\pagefile.sys
"\System Volume Information"
\RECYCLER
\Windows\CSC
[CompressionExclusionList]
*.mp3
*.zip
*.cab
\WINDOWS\inf\*.pnf

Теперь необходимо сохранить образ командой:
dism /unmount-Wim /MountDir:d:\winpe_image\mount /Commit

Вся подготовительная работа велась с файлом winpe.wim, а для загрузочного диска Windows PE используется файл boot.wim, расположенный в папке winpe_x86\ISO\sources. Поэтому необходимо заменить файл boot.wim файлом winpe.wim, выполнив при этом переименование.
xcopy /y d:\winpe_image\winpe.wim d:\winpe_image\ISO\sources\boot.wim

Для создания образа выполняем команду:
oscdimg -n -bd:\winpe_image\etfsboot.com d:\winpe_image\ISO d:\winpe_image\winpe_image.iso

Создание образа Windows 7
Необходимо сохранить образ нашей ОС с помощью утилиты imagex. Грузимся в VM с образа winpe_image.iso который мы создали ранее. После удачной загрузки пред нами открывается окно командной строки, в ней мы как раз и будем работать.
Захват и сохранение образа производится одной командой
F:\imagex.exe /capture E: D:\install.wim "Windows 7 x64" /compress maximum

/capture E: — захват раздела E:
D:\install.wim — местоположение и имя сохраняемого WIM-файла.
«Windows 7 x64» — имя образа. Имя должно быть заключено в кавычки.
/compress maximum — тип сжатия файлов в образе(необязательно). Для параметра /compress допустимы значения maximum (максимальное сжатие), fast (быстрое сжатие) и none (без сжатия). Если параметр не указан, используется быстрое сжатие. Максимальное сжатие позволяет уменьшить размер образа, но захват занимает больше времени, чем при быстром сжатии. Скорость распаковки образа практически не зависит от типа сжатия. Остается подождать 20-30 минут и образ будет готов.

После сохранения образа на втором диске виртуальной машины, для дальнейшей работы его нужно перенести на физическую ОС. Запускаем виртуальную машину снова и завершаем установку Windows, прерванную на этапе OOBE. Если вы уже установили Virtual Machine Additions то теперь необходимо скопировать файл из виртуальной машины на физическую с помощью общей папки (shared folder), которую можно указать в настройках виртуальной машины.

Настройка загрузочного образа Windows 7
На данном этапе снова запускаем «Командную строку средств развертывания» и копируем файлы образа Windows PE:
copype.cmd amd64 d:\winpe

Монтируем образ
imagex /mountrw winpe.wim 1 mount
Windows PE смонтирован и в папке d:\winpe Вы можете найти файл winpe.wim.

Настройка автозапуска установки Windows.
Чтобы не создавать вручную виртуальный диск и не запускать установку вручную, можно отредактировать файлик startnet.cmd и startnet2.cmd. Находятся они d:\winpe\mount\windows\system32.

startnet.cmd
wpeinit
%windir%\system32\startnet2.cmd

startnet2.cmd
chcp 1251
netsh interface ip set address name="Подключение по локальной сети" source=dhcp
chcp 866
pause
net use z: \\192.168.0.1\win7 /user:install install
cd /d Z:\sources
setup.exe

Команда net use производит подключение к компьютеру с IP адресом 192.168.0.1 (наш компьютер-сервер) к расшаренному каталогу c именем win7 на правах пользователя install c таким же паролем.
Создать нужного нам пользователя можно такой командой в cmd
net user install install /add /passwordchg:no

Выполняем следующие инструкции:
  • На компьютере-сервере создаем корневой каталог для загрузки (у меня это d:\win7\), а в нем папку boot.
  • Расшариваем папку win7, то есть даем общий доступ к ней всем пользователям.
  • Копируем всю папку sources с установочного диска Windows 7 в d:\win7.
  • Заменяем файл install.wim в каталоге d:\win7\sources на файл, который скопировали ранее с виртуальной машины (готовый образ Windows 7)

Теперь необходимо скопировать дополнительные файлы для установки Windows 7.
Cмонтируем образ WinPE:
imagex /mountrw winpe.wim 1 mount

Копируем:
xcopy d:\winpe\mount\windows\boot\pxe\pxeboot.n12 d:\win7
xcopy d:\winpe\mount\windows\boot\pxe\bootmgr.exe d:\win7
xcopy d:\winpe\winpe.wim d:\win7\boot
xcopy d:\winpe\iso\boot\boot.sdi d:\win7\boot

Размонтируем образ командой:
imagex.exe /unmount d:\winpe\mount


Далее необходимо создать файл BCD (boot configuration data) в каталоге d:\win7\boot. Для упрощения этого процесса воспользуемся файлом createbcd.cmd. Создаем файл d:\winpe\createbcd.cmd и вписываем в него:
bcdedit -createstore %1\BCD
bcdedit -store %1\BCD -create {ramdiskoptions} /d "Ramdisk options"
bcdedit -store %1\BCD -set {ramdiskoptions} ramdisksdidevice boot
bcdedit -store %1\BCD -set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
for /F "tokens=2 delims={}" %%i in ('bcdedit -store %1\BCD -create /d "MyWinPE Boot Image" /application osloader') do set guid={%%i}
bcdedit -store %1\BCD -set %guid% systemroot \Windows
bcdedit -store %1\BCD -set %guid% detecthal Yes
bcdedit -store %1\BCD -set %guid% winpe Yes
bcdedit -store %1\BCD -set %guid% osdevice ramdisk=[boot]\Boot\winpe.wim,{ramdiskoptions}
bcdedit -store %1\BCD -set %guid% device ramdisk=[boot]\Boot\winpe.wim,{ramdiskoptions}
bcdedit -store %1\BCD -create {bootmgr} /d "Windows BootManager"
bcdedit -store %1\BCD -set {bootmgr} timeout 30
bcdedit -store %1\BCD -set {bootmgr} displayorder %guid%

Запускаем командой с правами администратора:
createbcd.cmd d:\win7\boot

Если у вас возникнут проблемы с драйверами, то их можно добавить так же в «Командной строке средств развертывания»:
Монтирование образа для добавления драйверов
dism /mount-wim /wimfile:winpe.wim /index:1 /mountdir:mount

Для интеграции драйверов в уже смонтированный образ используется команда
dism /image:mount /add-driver /driver:<каталог с драйверами либо файл с расширением inf>

После того как вся работа с образом закончена его необходимо размонтировать
dism /unmount-wim /mountdir:mount /commit


Настройка сервера TFTP и DHCP

Для создания этих серверов необходимо скачать программу TFTPD32.
Задачей DHCP сервера является предоставить информацию удаленному компьютеру о свободном IP адресе, маски сети, а также имя загружаемого файла и адрес TFTP сервера, где этот файл находиться. Задача TFTP сервера является обеспечение передачи необходимых для загрузки файлов удаленному компьютеру.

Запускаем программу и выбираем сначала папку d:\win7, а немножко ниже — IP сетевой карты. В моем случае компьютер имеет IP 192.168.0.1.
Заходим в настройки (кнопка Settings посредине внизу) и постепенно заполняем вкладки:
  • Вкладка GLOBAL — cтавим галочки только напротив TFTP Server, DHCP Server и Enable IPv6.
  • Вкладка TFTP — выбираем папку d:\win7.
  • TFTP Security — Standart.
  • TFTP configuration — оставляем как есть.
  • Advanced TFTP Options — должны стоять галочки напротив: Option negotiation, Show Process bar и Translate Unix file names.
  • Вкладка DHCP
  • IP pool starting address указывает, с какого IP адреса начать выдачу адресов. В моем примере выдача IP адресов начнется с 192.168.0.2.
  • Size of pool указывает количество IP адресов, которые будут динамически выделяться. Я установил значение в 30.
  • Boot File сообщает удаленному компьютеру имя файла, который необходимо использовать в качестве загрузчика. Устанавливаем значение в pxeboot.n12.
  • Mask, указывает маску сети. В нашем случае это 255.255.255.0. Остальные значения параметров оставляем по умолчанию.
  • Ping address before assignation — снять галочку (если у Вас связь компьютер-компьютер без свичей и роутеров).

Теперь нужно включить в BIOS загрузку с сетевой карты и загрузиться с нее. После этого будет получен IP-адрес через DHCP и выполниться pxeboot.n12 — который запустит Windows PE c файла winpe.wim. Сразу после загрузки Windows PE будет автоматически смонтирован каталог win7 и с него запуститься установка. Далее установка проходит точно также как и с диска.
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 25

    +2
    Жесть какая-то. Видимо я слишком привык к SCCM.
      0
      а что мешает использовать MDT совместно с WDS? не говоря об упомянутом ранее SCCM?
        0
        стоит заметить тот факт, что на решение данной задачи отводилось минимальное кол-во времени, т.е пришлось невольно пойти по пути наименьшего сопротивления. Плюс просто незнание данных путей решения ситуации. Возьму на заметку, спасибо
          +1
          Ну sccm поднимать для 20 машин смысла нет, а вот вдс, да.
      • НЛО прилетело и опубликовало эту надпись здесь
          +3
          Господи, ну почему люди так любят зайти куда-то и «нагадить»? Ну кому стало легче от Вашего мыслеизлияния?
          +1
          >При поиске информации в Google по данному вопросу не нашлось ничего что работало бы без косяков или работало вообще.

          Вы как то явно плохо ищите.

          www.savelono.com/linux/how-to-install-windows-7-over-a-network-using-linux-pxe-dnsmasq-and-samba.html

          www.winpe.ru/docum/sobiraem_sobstvennuyu_live_cd_sborku_winpe20_na_osnove_windows_7_konfiguriruem_server_dlya_zagruzki_obrazov_disket_formata_ima

          Это так примеры. Но подобные темы можно найти часто.

          Кстати, для linux если планируется использовать каталог не корневой, надо делать перенаправление путей. Это умеет только aftpd.

          Если мы уж все делаем в консоли, то может и sysprep из строки?

          %SystemRoot%\system32\sysprep\sysprep.exe /generalize /oobe /reboot /unattend:E:\CopyProfile.xml

          %SystemRoot%\system32\sysprep\sysprep.exe /audit /generalize /reboot

          Дальше еще круче, прежде чем все это делать, то при установки Windows, ее следует ввести в режим аудита! (сочетание клавиши я не помню)
          В этом режиме поставить все, что вам надо и уже консервировать все sysprep.

          Далее, надо будет переписать defaultprofile в windows, для этого используется CopyProfile.xml.

          В общем более подробно можно почитать тут

          www.oszone.net/8612

          Пример copyprofile, который часто решает проблему темного экрана после создания профиля, или его бесконечную перегрузку при развертывание.

          <?xml version='1.0' encoding='utf-8'?> <unattend xmlns="urn:schemas-microsoft-com:unattend"> <settings pass="specialize"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <CopyProfile>true</CopyProfile> </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <OOBE> <HideEULAPage>true</HideEULAPage> </OOBE> </component> </settings> <cpi:offlineImage cpi:source="wim:d:\sources\install.wim#Windows 7 ULTIMATE" xmlns:cpi="urn:schemas-microsoft-com:cpi"> </cpi:offlineImage> </unattend>

          Ну и код на хабре как всегда уполз.

          pastebin.com/0CVdy7a9
            0
            Спасибо! комментарий полезнее статьи оказался )
              0
              спс :)
            +1
            Use MDT, Luke! Это надстройка на WDS которая позволяет гораздо удобнее и глубже кастомить образа. И при этом не хранить тысячи образов под каждую комбинацию ПО+софт+настройки в образе, а «собирать» на лету. Понятно что SCCM круче, но он, в отличие от MDT стоит денег.
            По MDT масса информации от MS и не только, но она на удивление, вся ужасна для понимания. Пестрит тысячами аббревиатур и просто очень тяжело читается/понимается.
            Давно думал написать о нем статейку сюда, но как-то не доходили руки…
              0
              darthslider — иногда удобна выше схема, когда сервера на linux и нет желание, сил, возможности ставить winserver и wds.

              Ну или дома например сделать установку по сети с NAS.
                0
                сервер как раз на *nix
                  0
                  >Для создания этих серверов необходимо скачать программу TFTPD32.

                  Как то оно долеко не unix :) сервер.
                    0
                    а я чет не въехал поначалу о чем ты. %)
              0
              На хосте, видимо, тоже Windows 7.
              В таком случае проще в VB использовать VHD, а затем его монтировать в хостовой ОС и снимать образ. Нет необходимости в дополнительных виртуальных дисках, копировании гигабайтов из гостя на хост.
                0
                Buslo — он делал winpe, для загрузки по сети. Если я правильно вас понял на темку копирования. Хотя если честно я все прочитал немного по диоганали, так как под linux давно все отлаженно.

                Кстати есть вот какой вопрос! Есть у меня необходимость в новые образы добавлять update. Но хочется, что бы update были дабавленны по степени их появления. Сейчас я тупо ставлю свежий образ (на самом деле не ставлю конечно, он один просто консервируется) и смотрю, что вышло для него и качаю руками. Что вообще не прикольно. Качать готовы набор паков, непонятно от кого я не хочу. WSUS разворачивать, тем более.

                Может есть решение? Просто я о нем не знаю?
                  0
                  Вы хотите чтобы апдейты автоматически добавлялись с сайта мс в ваш образ или как?
                  Я не уверен на 100%, но кажется в структуре дистрибутива Win 7 есть место, куда можно положить файлы апдейтов и они автоматически применяться при установке ОС. Но возможно это нужно дополнительно указать в unattended.xml.
                  По крайней мере MDT умеет вшивать апдейты в дистрибутив.
                    0
                    Нет, я хочу уже в созданный образ интегрировать update. Это можно сделать и делается.
                    Надо автоматизировать процесс получения этих update.
                      0
                      WSUS это пожалуй единственный способ который я знаю забирать апдейты с сайта МС. Ну или какой-нибудь бот, который будет ходить по сайту и выкачивать их руками.
                      Теоретически может где-то в интернете есть какой-нибудь FTP, где эти апдейты лежат и регулярно добавляются, сортированные по ОС и т.д. Тот же WSUS хранит их в совершенно не пригодном для ручного использования виде. То есть там те же exe и cab но имена у них хаотичные, понять где что проблематично.
                        0
                        >Теоретически может где-то в интернете есть какой-нибудь FTP

                        Все же это где то, у кого то. Как вариант, может быть — что то нехорошие внутри.

                        Ладно буду спрашивать на форумах.
                          +1
                          www.wsusoffline.net/docs/ — утилита скачивает все апдейты для нужной оси нужной битности/локализации
                            0
                            А она качает тупо все? Есть же update которые отменяют действие предыдущих :)
                            Есть update рекомендуемые, есть специфические — которые качаются только с сайта и не попадают в winupd.
                              0
                              По моему опыту на win7 и win server 2008 r2 ставится всё без проблем. Win Update после этого ничего нового не находит. Но место, конечно, занимает весь пак.
                0
                Если надо просто один и тот же образ на много машин поставить, то можно использовать clonezilla (clonezilla.org).
                Потом делается образ с винды (После того как сделали sysprep /generalize). После этого качается образ clonezillaSE (хотя вроде бы можно всё ей сделать) и при помощи него можно поставить постовить образ одновременно на кучу машин. Там уже и DHCP и PXE, в общем всё что для этого надо уже есть. Я уже как-то ставил образ одновременно на 40 компов — быстро и без проблем.
                  0
                  Можно обойтись и без clonezilla.

                  По сути в установочном диске и так уже образ windows.
                  Просто если сделать это все в установщик, то вы получаете более универсальный диск.

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое