Смысл
Самостоятельное изготовление образа с Windows 64 bit, загрузка по сети. Загрузка с ISO-образа, нет необходимости использовать bcdedit. В качестве примера запускаемой программы взят Far Manager.
Преамбула
Вот уже 10 лет я не делал апгрейд домашнего компьютера. Спокойно жил с Pentium IV 2.8 GHz, парой гигов памяти, каким-то винчестером, и этого с лихвой хватало для повседневных задач, включая программирование, кодирование музыки и видео и прочее. Так бы все и продолжалось, если бы в рамках корпоративного апгрейда админы не поменяли на работе комп, заодно сменив операционку на Windows 7 64 bit. За счет большого объема памяти на новых компах прирост скорости (в Visual Studio) был в разы. Мне это сильно понравилось, и я захотел домой тоже поставить 64-битную систему, благо память в последнее время дешевая.
В результате мучительного выбора (безнадежно отстал от жизни) была приобритена материнка, процессор и 4 куска памяти. Остальное железо осталось старое, спасибо производителям за хоть какую-то обратную совместимость.
Настройка PXE сервера
Собрав все это в старый корпус и включив в сеть, я внезапно понял, что у меня нет ни DVD привода, ни «большой» флэшки, чтобы сделать загрузочный носитель с Windows 7 64 bit. А установка 64-битной системы с распакованного образа из-под 32-битной винды запускаться отказалась.
Я решил попробовать сетевую загрузку, и для этого решил использовать, спасавший меня до этого не раз, домашний роутер ASUS wl500gpV2. Вероятно, пользователи этого девайса знают, что, благодаря прошивке от Oleg'а, он способен на многое. На роутер был установлен TFTP server, и в файл конфигурации встроенного в роутер DHCP-сервера — /usr/local/etc/dnsmasq.conf — была внесена строка получения загрузчика для PXE-клиента, встроенного в BOOT ROM любой современной сетовухи (и даже on-board, как в моем случае):
dhcp-boot=pxelinux.0,router,192.168.255.1
192.168.255.1 — адрес роутера в домашней сети (он теперь стал еще и TFTP-сервером);
router — имя роутера в домашней сети.
После редактирование файла необходимо применить настройки и, на всякий случай, ребутнуть роутер:
flashfs save && flashfs commit && flashfs enable && reboot
Файл pxelinux.0 входит в комплект программы PXELINUX. Версия, использованная на момент написания этой инструкции — syslinux-4.04.zip. Из архива нужно извлечь файлы: core\pxelinux.0 и memdisk\memdisk и положить их в корень TFTP сервера.
PXELinux должен знать, что и откуда загружать, для этого создадим в корне TFTP сервера каталог pxelinux.cfg и в нем текстовый файл default, следующего содержания:
display boot.txt
prompt 1
timeout 0
default far64
label far64
linux /memdisk
append iso
initrd winpe_amd64.iso
Также, в корне TFTP сервера нужно создать файл boot.txt, содержимое которого тупо выведется пользователю на экран при загрузке, это что-то типа мини-хелпа с доступными командами загрузчика:
Type "far64[ENTER]" to load Windows PE image with FAR Manager. Press CTRL+ALT+DEL to reboot.
PXE и TFTP серверы настроены. Осталось дело за малым — создать свой собственный winpe_amd64.iso, в который мы положим FAR и, после загрузки по сети, его запустим.
Создание образа загрузочного диска
Microsoft рекомендует для создания образов использовать AIK, так я и поступил. Был скачан основной пакет, а также обновление (для тех, у кого установлен Windows 7 Service Pack 1).
После скачивания AIK надо установить.
Для того, чтобы создать загрузочный образ WinPE, Microsoft рекоммендует ввести несколько треднозапоминающихся команд. Для упрощения я сразу сделал скрипт:
@echo off
set PETOOLS=C:\Program Files\Windows AIK\Tools\PETools
set ARCH=amd64
set RESULTDIR=%~dp0
set WORKINGDIR=%TEMP%\win7-pe-%ARCH%
if not exist "%WORKINGDIR%" goto :STAGE1
rmdir "%WORKINGDIR%" /S /Q
:STAGE1
cd /d "%PETOOLS%"
call copype.cmd %ARCH% "%WORKINGDIR%"
copy "%WORKINGDIR%\winpe.wim" "%WORKINGDIR%\ISO\sources\boot.wim"
dism /Mount-Wim /WimFile:"%WORKINGDIR%\ISO\sources\boot.wim" /Index:1 /MountDir:"%WORKINGDIR%\mount"
if not exist "%RESULTDIR%Drivers\%ARCH%" goto :STAGE2
dism /image:"%WORKINGDIR%\mount" /add-driver /driver:"%RESULTDIR%Drivers\%ARCH%" /forceunsigned
:STAGE2
if not exist "%RESULTDIR%Programs\%ARCH%" goto :STAGE3
xcopy /E "%RESULTDIR%Programs\%ARCH%\*.*" "%WORKINGDIR%\mount\Program Files"
:STAGE3
if not exist "%RESULTDIR%Startup\startup.cmd" goto :STAGE4
xcopy /E "%RESULTDIR%Startup\*.*" "%WORKINGDIR%\mount\Windows\System32"
echo call \Windows\System32\startup.cmd >> "%WORKINGDIR%\mount\Windows\System32\startnet.cmd"
:STAGE4
dism /unmount-Wim /MountDir:"%WORKINGDIR%\mount" /Commit
if not exist "%RESULTDIR%winpe_%ARCH%.iso" goto :STAGE5
del "%RESULTDIR%winpe_%ARCH%.iso"
:STAGE5
oscdimg -n -b"%WORKINGDIR%\etfsboot.com" "%WORKINGDIR%\ISO" "%RESULTDIR%winpe_%ARCH%.iso"
Этот скрипт я сохранил в файл C:\Temp\create_pe.cmd, а рядом с ним создал структуру папок:
Temp
\--Drivers
\---amd64
\--Programs
\---amd64
\--Startup
Скрипт при запуске:
- Включает в дистрибутив драйвера (*.inf файлы) из каталога Drivers в образ;
- Копирует в дистрибутив (в \Program Files" раздела загрузки) все папки и файлы из каталога Programs;
- Копирует все файлы из каталога Startup в Windows\System32 раздела загрузки и настраивает запуск скрипта Startup\startup.cmd после загрузки образа.
В каталог Drivers я распаковал все скачанные ранее драйвера (только файлы *.inf). Самое главное — не забыть положить туда драйвер сетевой карты, тогда из запускаемого FAR будет доступна сеть!
В каталог Programs\Far я распаковал содержимое скачанного архива с FAR Manager 64 bit.
Также, для автоматического запуска FAR'а, был создан файл Startup\startup.cmd следующего содержания:
call "\Program Files\Far\RestoreSettings.cmd"
"\Program Files\Far\Far.exe"
Ну а теперь создаем загрузочный образ:
create_pe.cmd
Создание образа происходит автоматически, никаких лишних вопросов задаваться не должно.
Полученный в результате выполнения файл winpe_amd64.iso нужно положить в корень TFTP-сервера, рядом с pxelinux.0.
Теперь осталось только ребутнуться, указав в качестве загрузочного девайса LAN (и не забыв включить BOOT ROM), и при запросе загрузчика ввести «far64». В результате я получил загруженный Windows 7 PE 64 bit, с запущенным FAR'ом и с работающей сетью (можно делать net use... и запускать установку Windows по сети).
Всё.
P.S. Надеюсь, этот мануал кому-то поможет сэкономить время. Прошу делиться мыслями и глюками в комментах.
Удачи!