Windows 2016 GPT EFI deploy из под Linux rescue

В статье пойдет речь о том, как подготовить образ windows для развертывания из под Linux systemrescuecd

Производите установку VirtualBox, он позволяет осуществлять загрузку с EFI
Используйте iso-образ windows SW_DVD9_Win_Svr_STD_Core_and_DataCtr_Core_2016_64Bit_English_-3_MLF_X21-30350.ISO и Linux диск systemrescuecd-x86-5.1.1.iso

Создаем виртуальный сервер в virtualbox с диском в 20 Gb (система умещается в 13, а в архиве и того в 5, но потребуется запас для запуска на новом сервере, под дополнительные драйвера или программы если будете их устанавливать)

В настройках виртуального сервера ставите галочку на вкладке Система - Включить EFI

Загружаетесь с iso-образа, он нормально запустится с EFI загрузчика

На этапе когда инсталлятор выведет окно разметки жесткого диска необходимо будет нажать shift+f10 и в окне cmd которое откроется конвертировать диск в GPT

diskpart
sel dis 0
clean
convert gpt
exit


После чего просто нажмите Далее и система поставится на диск с GPT разметкой

Запомните пароль администратора сервера и включите доступ по RDP - включается в Server Manager - Local Server - Remote desktop - Enabled

Установите скрипт через политики безопасности который будет запускаться при старте системы (без логина пользователя в отличие от классической автозагрузки в реестре через HKLM)
Для этого запустите

gpedit.msc -
Computer configuration - Windows Settings - Scripts (Startup/Shutdown) - Startup - c:\run.cmd

Если есть необходимость в дополнительных сетевых драйверах или программах - установите их

Теперь корректно выключите виртуальный сервер и загрузите его с systemrescuecd (кстати, он тоже поддерживает efi boot)

После чего снимите образ через dd over ssh на какой-либо свой внешний сервер который будет хранилищем попутно сжимая его через gzip

dd if=/dev/sda bs=64k | pv | gzip | ssh storage@storage.com "cat > /storage/windows2016"

Сжатый образ будет занимать 5 Gb

Затем пишем скрипт установки сервера который будет выкачивать образ по ssh c storage.com и распаковывать на новом сервере и производить настройку статического ip адреса и активацию ОС, я привожу его максимально упрощенную версию
Также его можно использовать и для windows 2012 с отличиями в запуске netsh

#!/bin/bash

ssh storage@storage.com dd if=/storage/windows2016 bs=64k | gunzip | pv | dd of=/dev/sda bs=64k


blockdev --rereadpt /dev/sda
sleep 5


mount /dev/sda4 /mnt

cat <<EOF > /mnt/run.cmd
@echo off
SetLocal EnableExtensions EnableDelayedExpansion


Reg Add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /V ClearDll /D "cmd /C Del /F /Q C:\run.cmd" /f

for /f "delims=" %%a in ('netsh interface ip show interface ^| find /i "1500" ^| find /i " connect"') do (set "string=%%a")

for /f "tokens=5,6" %%a in ('echo %string%') do (set "name=%%a %%b")

netsh interface ipv4 set address name="%name%" static `ifconfig | grep 'inet ' | grep -v 127.0.0.1 | awk '{print $2}'` `ifconfig | grep 'inet ' | grep -v 127.0.0.1 | awk '{print $4}'` `netstat -nr |awk -F ' ' '{print $2}' |egrep -v 'IP|Gateway|0.0.0.0'`
netsh interface ipv4 set dnsservers name="%name%" static 8.8.8.8 primary

timeout 10 > NUL

%windir%\system32\slmgr.vbs -ipk XXXX-XXXX-XXXX-XXXX
%windir%\system32\slmgr.vbs -ato

del c:\run.cmd
EOF

unix2dos /mnt/run.cmd

umount /mnt

Далее для развертывания системы просто загружаем исходный сервер в Linux rescue и выполняем это скрипт

После успешного копирования образа перезагружаемся и включаем в BIOS загрузку с UEFI

После загрузки Windows 2016 необходимо зайти в Управление дисками и там увеличить размер диска c: до необходимого вам

Известные баги скрипта:
Если интерфейс на сервере один и не сменит имя (это маловероятно так как windows найдет все равно новую сетевую карту) (скажем будет называться "Ethernet"), то скрипт настроить его не сможет, так как будет искать "Ethernet " поскольку пробел в (set "name=%%a %%b") ставится искусственно (иначе будет пытаться настраивать "Ethernet2" вместо "Ethernet 2"

Комментариев нет:

Отправить комментарий