В статье пойдет речь о том, как подготовить образ 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"
Комментариев нет:
Отправить комментарий