Mini Windows XP, «очень полезный горшочек», однако с запуском по сети возникают определенные сложности. Если просто загрузить образ Hiren’s Boot CD с помощью memdisk и запустить Mini Windows XP она свалится.
XP, что PE-версии, что инсталлятор, подружить с PXE проблематично. Мало того, что надо поднимать сервер BINL, который выдаст винде нужные драйвера для сетевых карт, так еще и задолбаешься настраивать загрузчик. Чего только не было — и штатный ntdetect.com не подходил, и патченные в упор не видели файлов ответа (winnt.sif), в общем геморроя было масса.
Но интересно, что Mini Windows XP вообще-то драйвера для сети при загрузке не нужны, все файлы на момент запуска уже переданы на целевую машину, и проблема в чем-то другом. Насколько я понял, в том, как memdisk маппит в память ISO-образ, а винда потом с этим делом конфликтует, скорее всего у нее не получается создать виртуальный диск в памяти. А если попробовать грузить не образ ISO, а образ HDD с виндой? Да! Таким макаром все вышло. Об этом и расскажу.
— Собственно, ISO-образ Hiren’s Boot CD 15.2
— Minimal DOS Image
— Какой-нибудь дистрибутив Linux, в который можно установить виртуальную машину QEMU. Мой пакет для Slackware здесь
— Утилита kpartx, из комплекта multipath-tools. Можно собрать/скачать самостоятельно. На всякий случай, пакет для Slackware
— Windows 7, если захочется провести более глубокую модификацию Mini Windows XP
— Текстовый редактор, поддерживающий переносы строк DOS/Windows (CR+LF), для редактирования конфигов и BAT-файлов DOS, Mini Windows XP и конфига загрузчика Grub4Dos (я делал это в винде).
1. Складываем все инструменты в отдельный каталог в Linux, и создаем в нем «болванку», для образа HDD:
dd if=/dev/zero of=winpe-test.img bs=90M count=1
Если создавать только минимально работающий Mini Windows XP, то хватит и 60 мегабайт (bs=60M
), впрочем, можете попробовать поэкспериментировать и еще уменьшить его.
2. Грузимся в QEMU, указывая в качестве загрузочного устройства образ Hiren’s Boot CD, и приаттачиваем «болванку» образа HDD, как первый жесткий диск:
qemu-system-i386 -cdrom hbcd.iso -hda winpe-test.img -boot d
3. Выбираем в меню загрузки Start Hiren’s Boot CD, потом File Managers и Volkov Commander
Загрузившись в VC вводим команду fdisk3
. Эта команда запустит родной Fdisk от Microsoft’а.
У нас один жесткий диск, пока не форматированный и не размеченный, так что в появившемся меню нажимаем 1 и ENTER (Create DOS Partition or DOS logical drive), в следующем меню тоже выбираем 1 пункт (Create Primary DOS Partition), далее отвечаем Y (да). Если все сделано верно, Fdisk предложит перезагрузиться, дабы новый раздел стал доступен в DOS. Выходим из Fdisk и закрываем QEMU.
4. Грузимся в QEMU, но на этот раз указываем в качестве CD Minimal DOS Image:
qemu-system-i386 -cdrom dos.iso -hda winpe-test.img -boot d
Наш новый диск имеет букву D:, но недоступен, поскольку не отформатирован.
5. Форматируем его и делаем системным:
format D: /U /S
Подтверждаем операцию, по окончании вводим метку, например, WINPE
.
6. Переходим на диск D (в меню Left—>Drive или Right—>Drive, QEMU перехватывает Alt+F1/Alt+F2), копируем с диска C: файлы autoexec.bat
, config.sys
, himem.sys
и каталоги DOS
и VC
.
7. В оригинальном образе была опечатка в autoexec.bat
, ее можно подправить, заменив строчку DOS;VC
на C:\DOS;C:\VC
Содержимое AUTOEXEC.BAT
и CONFIG.SYS
8. Можно проверить образ, загрузившись с него в том же QEMU:
qemu-system-i386 -hda winpe-test.img -boot c
Должны появиться окошки Volkov Commander.
Для того, чтобы добавить на диск файлы WinPE, необходимо получить к нему доступ из Linux:
0. Создаем точку монтирования
mkdir /mnt/dos
1. Вешаем образ на Loop-устройство:
losetup /dev/loop0 winpe-test.img
Обычно устройство loop0
свободно, но можно посмотреть свободное командой
losetup -f
2. Маппим разделы:
kpartx -av /dev/loop0
Утилита выдаст сообщение, содержащее название обнаруженного раздела (выделено жирным):
add map loop0p1 (251:6): 0 183393 linear /dev/loop0 63
3. Монтируем раздел:
mount -t vfat /dev/mapper/loop0p1 /mnt/dos
После того, как нужные файлы скопированы, образ необходимо отключить.
1. Размонтируем раздел:
umount /mnt/dos
2. Удаляем информацию о разделе:
kpartx -dv /dev/loop0
3. Освобождаем loop-устройство:
losetup -d /dev/loop0
Чтобы было проще, можно написать два маленьких скрипта:
Подключение образа:
#!/bin/bash IMAGE="winpe-test.img" echo "Open WinPE" losetup /dev/loop0 $IMAGE MSG=`kpartx -av /dev/loop0` DEV=`echo $MSG | awk '{print $3}'` echo $DEV sleep 5 mount -t vfat /dev/mapper/$DEV /mnt/dos echo "Complete" sleep 2
Примечание: паузы нужны, иначе монтирование может случиться раньше, чем блочное устройство (раздел), появится в /dev/mapper
и ничего не примонтируется.
Отключение образа:
#!/bin/bash
echo "Close WinPE..."
umount /mnt/dos
kpartx -dv /dev/loop0
losetup -d /dev/loop0
echo "Complete!"
Для создания минимально работающего Mini Windows XP, потребуется взять из образа Hiren’s Boot CD все файлы из \HBCD\XP
, и положить их в каталог /HBCD/XP в образе жесткого диска.
Также необходимо настроить загрузчик Grub4Dos:
1. В образе Hiren’s Boot CD находим файл GRUB.EXE
и копируем его в корень нашего диска.
2. Создаем конфиг MENU.LST
также в корне диска. Я просто подправил оригинальный конфиг из Hiren’s Boot CD, удалив оттуда все лишнее. Содержимое конфига на PasteBin
Скачать GRUB.EXE, MENU.LST, AUTOEXEC.BAT, CONFIG.SYS
с Mega.Nz
Внимание! Править MENU.LST, AUTOEXEC.BAT, CONFIG.SYS
надо редактором, который умеет в DOS/Windows переносы строк (например, Notepad++)
Проверяем.
1. Грузимся из полученного образа (здесь я делал это уже по сети, о настройке конфига для PXE будет ниже):
2. Запускаем GRUB.EXE
:
3. Выбираем соответствующий пункт меню, ждем…
ФАНФАРЫ!
На самом деле, Mini Windows XP получился сильно урезанным, без программ из Hiren’s Boot CD, без толковой поддержки сети и прочих полезностей, что ж, будем улучшать
Ну он не так, чтоб уж прямо критически важный, но Mini Windows XP подгружает некоторые программы, например, программу настройки сети, автомонтирования дисков, архиватор из \HBCD\Programs
, \HBCD\Programs\Files
\HBCD\Dos
, я посмотрел в код файлов автозагрузки, и все самое важное выделил.
1. В /HBCD/Programs/Files
нашего образа, добавим следующие файлы из \HBCD\Programs\Files
ISO-образа:
7Zip.7z
AutoMountDrives.7z
DLL.7z
IrfanView.7z
Notepad.7z
TeraCopy.7z
XpFiles.7z
2. В /HBCD/Dos
(из \HBCD\Dos
):
BiosBoot.7z
MBRUtil.7z
PCI32.7z
SavePart.7z
3. В /HBCD
файл HBCDMenu.exe
4. В /HBCD/Programs
пока можно скопировать все файлы, которые не *.cmd
(из \HBCD\Programs
ISO-образа), CMD-файлы, кроме одного (AutoMountDrives.cmd
), придется подправлять, так что AutoMountDrives.cmd
можно скопировать.
Все потроха сего дистрибутива лежат в архиве формата WIM, в Windows 7 имеется стандартная утилита для работы с ним.
Копируем из образа HBCD файл XP.wim
куда-нибудь в удобный каталог, и смотрим его содержимое (команды выполнять от администратора):
dism /Get-WimInfo /WimFile:XP.wim
Cистема DISM
Версия: 6.1.7600.16385
Сведения об образе : XP.wim
Индекс: 1
Имя : XP
Описание : <не определено>
Размер (байт): 113 236 979
Операция успешно завершена.
Образ можно подмонтировать в какой-нибудь каталог:
mkdir %TMP%\wim
dism /Mount-Wim /WimFile:XP.wim /name:XP /MountDir:%TMP%\wim
Теперь в каталоге %TMP%\wim
— содержимое образа, меня оттуда интересуют два файла:
Startup.cmd
, который Mini Windows XP запускает при старте, и prep
, который в процессе загрузки переименовывается в Startup2.cmd
и выполняется. Оттуда и из XpCustomize.cmd
и были вытащены все нужные имена файлов.
Закрыть образ без сохранения изменений:
dism /Unmount-Wim /MountDir:%TMP%\wim /discard
С сохранением:
dism /Unmount-Wim /MountDir:%TMP%\wim /commit
openwim.bat
closewim.bat
savewim.bat
Итак, что же все-таки делать с остальным софтом? Ну у нас же PXE, а значит есть сервер с Samba. В следующем выпуске я таки начну сначала, и расскажу, как настроить PXE на Linux-машине, и Samba в т.ч. Пока ограничусь секцией конфига smb.conf для этой конкретной шары:
[hbcdshare] path=/home/pxe/tftp/distrib/windows/winpe public=yes browsable=yes read only=yes guest ok=yes
В каталог /home/pxe/tftp/distrib/windows/winpe
копируем каталог Files
из ISO-образа HBCD, вместе со всем содержимым. Естественно, для шары вы можете указать любой удобный вам путь.
1. Правим файл /HBCD/XP/XpCustomize.cmd
в нашем образе диска, меняем строку
REM start PENetwork
на start PENetwork
Эта команда запустит утилиту настройки сети (нужные драйвера уже есть в комплекте в архиве XpDrvLAN.7z
и Mini Windows XP их подгружает, если вы не забыли положить в /HBCD/Programs
файлы 7z.exe
и 7z.dll
)
2. Шара не поднимется, пока не будет настроена сеть, поэтому надо «притормозить» выполнение командного файла (обычно хватает полминуты). Для этого добавим в каталог /HBCD/XP
утилиту sleep.exe
(приложу ее в архиве ниже)
3. Пропишем следующие команды для паузы и поднятия шары. Шара будет подключена, как сетевой диск, например, с буквой W:
REM Add network share with programms
CD \HBCD\XP
sleep 30
Echo Add Files Share...
NET USE W: \\10.10.0.120\hbcdshare
sleep 10
Файл XpCustomize.cmd
целиком
Исходник утилиты sleep
Если все сделано правильно, то после загрузки Mini Windows XP мы увидим сетевой диск в «Моем компьютере»:
А если зайдем внутрь, то файлы:
Исправляем CMD-файлы для запуска софта
1. Извлекаем из ISO-образа все CMD-файлы из \HBCD\Programs
в отдельный каталог.
Во всех них, где есть (кроме файла AutoMountDrives.cmd
) нужно заменить строчку Files\имя_файла
на W:\Files\имя_файла
(W:
— сетевой диск, куда подключена шара)
2. Специально для этого дела я написал за 15 минут на коленке утилиту на C# — HBCDCmdFix
Пользоваться просто — выбираете каталог с *.cmd
файлами и нажимаете Fix. Программа делает резервные копии в *.bak
файлы перед изменением.
3. Кладем измененные файлы в /HBCD/Programs
, отмонтируем образ нашего HDD, загружаемся с него и пробуем запустить какую-нибудь программу (из меню в системном трее). Если все сделано правильно, то программа запустится
Наводим красивости
Все готово, осталось только навести красоту в загрузочных меню.
Делаем в CONFIG.SYS
загрузочное меню DOS (оставим возможность выйти в DOS или перезагрузить компьютер):
Измененный CONFIG.SYS
и AUTOEXEC.BAT
Почитать про создание загрузочного меню в MS DOS Копия
Измененный MENU.LST
Grub4Dos (добавлена возможность перезагрузиться или выключить компьютер).
А симпатичную надпись в DOS’овом меню, я сделал, подправив в HEX-редакторе IO.SYS
. Но как — догадайся мол сама 🙂
Осталось только сжать готовые образы gzip
‘ом и прописать в меню PXE-сервера:
gzip winpecut.img
gzip winpe.img
LABEL winxppe menu label Windows XP PE kernel modules/memdisk initrd distrib/windows/winpe/winpe.img.gz append harddisk LABEL winxppecut menu label Windows XP PE Very Small kernel modules/memdisk initrd distrib/windows/winpecut/winpecut.img.gz append harddisk
Скачать
—Minimal DOS Image
Пакеты:
—QEMU
—muktipath-tools
—Скрипты, утилиты, примеры конфигов из статьи
—Тестовый (минимальный) образ Mini Windows XP
—Полный образ Mini Windows XP
Pingback: Установка Windows XP из Mini Windows XP по сети (PXE). Без геморроя с загрузчиками и драйверами. | Персональный блог Толика Панкова
Pingback: Hiren’s Boot CD 15.2 и загрузка его по сети (PXE) | Персональный блог Толика Панкова
Pingback: Заодно нашел кучу утилит для подбора паролей в Windows. | Персональный блог Толика Панкова
Pingback: Делаем аварийный загрузочный образ WinPE на базе Windows 7. (с возможностью установки Win7/8/10) | Персональный блог Толика Панкова