2017-01-26

Установочная Windows флешка

В этом материале мы разберем как создать установочную Windows флешку. Так же рассмотрим вариант реализации установки нескольких версий ОС Windows с одной флешки. При этом установка будет возможна как в BIOS (MBR разметка диска) режиме, так и в UEFI BIOS (GPT разметка диска).


Необходимые инструменты.


Нам потребуются следующие программы. DISKPART - встроенная в Windows консольная программа для работы с дисками. BCDEDIT - тоже встроенная консольная программа для создания и редактирования BCD меню загрузчика BOOTMGR, который мы будем использовать в качестве меню установочной флешки. Far Manager - будет выступать в привычной для себя роли менеджера файлов, командной строки, а так же в роли инструмента распаковки *.iso и *.wim образов . DISM - инструмент для работы с *.wim образами и системой в целом, подробнее тут.

Для создания установочной Windows флешки я буду использовать образы Windows 10 x64, Windows 8.1 x64 и Windows 7 x64.

Подготовка флешки.


Неважно, будет ли на флешке один установочный дистрибутив, или несколько, предварительная подготовка ее будет всегда одной и той же. Главные условия - это возможность установки в UEFI BIOS и в обычном BIOS. А это уже означает что либо мы используем файловую систему FAT32 на основном разделе, либо подготавливаем флешку так как рассказано в материале "Загрузка в UEFI режиме с NTFS раздела". В данной статье я опишу первый вариант.

Как было сказано выше, все файловые манипуляции, а так же ввод консольных команд будет осуществляться с помощью Far Manager. Советую прочитать эту небольшую инструкцию по его использованию "Far Manager - инструкция".

Ну что, начнем😊?


Форматирование флешки.


Подключаем флешку. Запускаем FAR от имени администратора. Переключаемся в режим командной строки (CTRL+O).


Воспользуемся консольной программой DISKPART для создания первичного активного раздела и форматирования флешки. И так, вводим команду diskpart и жмем ENTER. Откроется консоль DISKPART'а.


Выведем список дисков, чтобы позже выбрать тот с которым мы будем работать. Пишем list disk и жмем ENTER.


В полученном списке смотрим под каким номером дисков расположена наша флешка. В моем случае это диска 2. Укажем программе что дальнейшие операции нужно производить со вторым диском. Пишем select disk 2 и нажимаем ENTER.


Очистим диск от всех разделов. Для этого вводим clean и нажимаем ENTER.


Создадим первичный раздел. Пишем create partition primary и жмем ENTER.


Сделаем созданный раздел активным. Вводим active и жмем ENTER.


Отформатируем созданный раздел в файловую систему FAT32. Пишем format fs=fat32 quick и нажимаем ENTER.


По завершении выходим из DISKPART. Пишем exit и жмем ENTER.



Установочная флешка с одним дистрибутивом Windows.


Если необходимо было создать установочную Windows флешку с одним установочным дистрибутивом, то остается только скопировать файлы с установочного образа диска в корень флешки.

К примеру, сделаем установочную флешку с одним дистрибутивом Windows 7 x64, и проверим ее загрузку в EFI и BIOS режимах.

Возвращаемся в FAR, открываем в одной файловой панели (ALT+F1) флешку, а во второй (ALT+F2) образ диска с копией Windows 7.


Теперь скопируем все содержимое образа диска в корень флешки (CTRL+*, F5).



По завершении копирования переходим в папку efi на флешке.


В данной директории отсутствует папка boot, а это означает что загрузиться в UEFI режиме не получится. Исправим это. Создадим данный каталог (F7) и перейдем в него.


В файловой панели с открытым образом, перейдем в каталог sources и провалимся внутрь файла boot.wim (CTRL+PgDown). В данном файле будут несколько версий образов обозначенными в виде директорий с цифрами. Заходим в ту которая больше по размеру (размер папки проверяется клавишей F3).


И переходим по пути Windows\Boot\EFI.


Копируем (F5) оттуда файл bootmgfw.efi в папку efi\boot на флешке.


Переименовываем (SHIFT+F6) скопированный файл в bootx64.efi.


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

BIOS.



Доказательства того что загрузка производилась с той самой флешки 😊. 


UEFI BIOS.



Получаем сообщение о том что UEFI BIOS не понимает MBR диски.

Ошибка установки, так как диск размечен в MBR стиле.
Установку при данной ошибке все же можно осуществить. Нужно снова воспользоваться утилитой DISKPART и выполнить конвертирование MBR диска в GPT.

Конвертирование MBR в GPT.


Первым делом нужно открыть командную строку. В режиме установки она открывается сочетанием клавиш SHIFT+F10. Далее вводим в открывшемся окне diskpart. Перейдя в консоль diskpart'а выводим список дисков командой list disk, выбираем нужный командой select disk N (где N номер диска), выполняем очистку диска командой clean, и конвертируем диск в GPT формат командой convert gpt.

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

Важно! На GPT диск можно устанавливать только 64-битные ОС.

На этом создание установочной флешки с одним дистрибутивом Windows закончено.

Установочная флешка с несколькими дистрибутивами Windows.


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

Как устроен установочный диск с ОС Windows? 

В корне установочного диска располагается загрузчик Windows Boot Manager (BOOTMGR).


Он в свою очередь при загрузке считывает файл конфигурации bcd который располагается в папке boot для BIOS версии, и efi\microsoft\boot для EFI версии.


Оба bcd файла содержат параметры запуска среды установки.


Среда установки представлена в виде файла образа boot.wim, который располагается в директории sources. Данный образ представляет собой минимальную версию ОС Windows (Windows PE) с программой установки конкретного дистрибутива.


А сам дистрибутив, установка которого осуществляется после загрузки среды предустановки, располагается в файле install.wim или install.esd в директории sources.


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

При мульти-установочном варианте, дистрибутивы будут располагаться каждый в своей директории. Это означает, что среда предустановки каждого из дистрибутивов должна знать в каком каталоге располагаются необходимые ей установочные файлы. И то, что нужен общий загрузчик, сконфигурированный на возможность выбора варианта загрузки необходимой установочной среды конкретного дистрибутива.

План действий.


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

1. Создать структуру директорий для каждого из дистрибутивов.

2. Скопировать установочные файлы дистрибутивов в подготовленные для них директории.

3. Установить и настроить единый загрузчик.

4. Сконфигурировать среду предустановки образа boot.wim каждого из дистрибутивов для возможности производить установку из заданных директорий.

Приступим...


Создание структуры директорий.


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

Удобнее всего чтобы все дистрибутивы располагались в поддиректориях одной общей директории в корне флешки.

Переходим в FAR и создаем (F7) в корне флешки папку WININST.


Создадим поддиректории (F7)  10x64, 8.1x64, 7x64 в директории WININST для установочных дистрибутивов.


Переходим к копированию файлов.


Копирование файлов.


Начнем с образа диска Windows 7 x64.  Открываем в левой панели FAR папку WININST\7x64, а в правой проваливаемся (CTRL+PgDown) в файл образ с Windows 7 x64.


Есть два варианта, копировать с образа все файлы, или же только файлы boot.wim и install.wim/install.esd из директории sources. При втором варианте экономится около 200 МБ свободного места на флешке.

Скопируем файлы с образа по второму варианту.




Теперь скопируем дистрибутив Windows 8.1 x64. На этот раз, для примера скопируем все файлы с установочного iso образа в директорию WININST\8.1x64.




И последний дистрибутив Windows 10 x64. Скопируем только файлы boot.wim и install.esd из установочного iso образа в папку WININST\10x64.




Итоговая структура файлов выглядит так.



Установка загрузчика BOOTMGR на флешку.


В каждом из установочных windows iso образах, присутствует загрузчик BOOTMGR, с настроенной загрузкой среды предустановки из файла boot.wim. Воспользуемся загрузчиком от более свежей редакции установочного Windows образа. В моем случае это загрузчик iso образа Windows 10.

Откроем в левой панели FAR корень флешки, а в правой установочный iso образ Windows 10 x64.


Скопируем из iso образа в корень флешки файлы bootmgr и bootmgr.efi, а так же папки boot и efi.




Загрузчик установлен. Если сейчас загрузиться с флешки, то загрузчик выдаст сообщение об ошибке. (Загрузка с флешки в VirtualBox)


Так и должно быть, так как загрузчик не настроен. Настроим его.


Конфигурирование файла BCD загрузчика BOOTMGR.


Для этого перейдем в папку boot на флешке и включим режим командной строки (CTRL+O). В данной папке, как говорилось ранее, находится файл конфигурации bcd BIOS версии загрузчика BOOTMGR.


Выведем текущую конфигурацию файла bcd выполнив команду bcdedit /store bcd.


В выводе команды присутствуют две записи. Первая с идентификатором {bootmgr}, она отвечает за настройку загрузчика в целом, и вторая {default} представляющую собой загрузочную запись выполняющую запуск среды предустановки.

По умолчанию, файл конфигурации bcd взятый с установочного диска Windows настроен на загрузку среды предустановки без вывода меню. Включим отображение загрузочного меню. Для этого нам нужно добавить к записи {bootmgr} параметр displaybootmenu и выставить ему значение yes. Выполним команду bcdedit /store bcd /set {bootmgr} displaybootmenu yes.



Cнова выведем конфигурацию загрузчика командой  bcdedit /store bcd. В FAR можно вывести меню с историей команд сочетанием клавиш ALT+F8. Выбираем нужную команду в истории и нажимаем ENTER для повторного выполнения, или сочетание клавиш CTRL+ENTER для вставки в командную строку.



Из вывода видно, что параметр добавлен. Загрузимся с флешки и посмотрим как теперь будет выглядеть загрузчик.


Теперь отключим таймер обратного отсчета. Делается это с помощью удаления параметра timeout из записи {bootmgr}. Выполним для этого команду bcdedit /store bcd /deletevalue {bootmgr} timeout.


Загрузимся с флешки и проверим результат.


Как видно, обратного отсчета больше нет.

Теперь настроим загрузочную запись по умолчанию для запуска среды предустановки дистрибутива Windows 10 x64. Для этого нам потребуется изменить три параметра записи {default}. Первый description отвечающий за отображаемое имя в загрузочном меню (сейчас он имеет значение Windows Setup), второй device и третий osdevice отвечающие за загрузку файла образа среды предустановки boot.wim.

Выполним последовательно команды.

bcdedit /store bcd /set {default} description "Установка Windows 10 x64"

bcdedit /store bcd /set {default} device "ramdisk=[boot]\WININST\10x64\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}"

bcdedit /store bcd /set {default} osdevice "ramdisk=[boot]\WININST\10x64\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}"

В последних двух командах мы берем оригинальные значения заданных параметров device, osdevice (с вывода команды bcdedit /store bcd) и меняем лишь путь до файла boot.wim.


Проверим результат в виртуальной машине.




В результате у нас есть один рабочий пункт меню.

Перейдем к созданию загрузочной записи для дистрибутива Windows 8.1 x64. Чтобы облегчить себе задачу, и не возиться с созданием загрузочной записи с нуля, выполним копирование имеющейся, с последующим изменением необходимых параметров.

Сделаем копию записи {default} выполнив команду bcdedit /store bcd /copy {default} /d "Установка Windows 8.1 x64".


При успешном завершении мы получим идентификатор новой записи. В моем случае идентификатор такой {3972e2ea-e2f7-11e6-a79c-94de80b88542}. Он нам понадобится для выполнения следующих команд.

Снова выполним команду bcdedit /store bcd и посмотрим как выглядит скопированная запись.


Из результата понятно что нам нужно изменить параметры device и osdevice новой записи. Выполним для этого следующие команды:

bcdedit /store bcd /set {3972e2ea-e2f7-11e6-a79c-94de80b88542} device "ramdisk=[boot]\WININST\8.1x64\sources\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}"


bcdedit /store bcd /set {3972e2ea-e2f7-11e6-a79c-94de80b88542} osdevice "ramdisk=[boot]\WININST\8.1x64\sources\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}"


Изменения заключаются в исправлении пути до файла boot.wim дистрибутива Windows 8.1.
Проверим результат выполнив команду bcdedit /store bcd.


Все правильно. Загрузимся в вируальной машине и проверим работоспособность созданной записи.




И последняя загрузочная запись, для дистрибутива Windows 7 x64. Все аналогично предыдущей записи. Приведу лишь команды.

bcdedit /store bcd /copy {default} /d "Установка Windows 7 x64"

bcdedit /store bcd /set {ece1124d-e31b-11e6-a79c-94de80b88542} device "ramdisk=[boot]\WININST\7x64\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}"

bcdedit /store bcd /set {ece1124d-e31b-11e6-a79c-94de80b88542} osdevice "ramdisk=[boot]\WININST\7x64\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}"


Выведем список всех записей командой bcdedit /store bcd и посмотрим на итоговый результат.


Все верно. Проверяем в виртуальной машине.




Подготовка загрузочного меню на этом закончена. Так как мы подготавливали данное меню для BIOS версии загрузчика, аналогичное меню нужно сделать и для EFI версии. Поспешу вас успокоить. Нет необходимости проделывать все вышеописанное с другим bcd файлом, достаточно просто скопировать текущий, из директории boot в директорию efi\microsoft\boot, и исправить параметр path каждой загрузочной записи установив ему значение \windows\system32\boot\winload.efi.

Скопируем файл bcd из директории boot в директорию efi\microsoft\boot.




Теперь перейдем в директорию efi\microsoft\boot и переключимся в режим командной строки (CTRL+O). Выполним последовательно команды изменения параметра path каждой загрузочной записи.

bcdedit /store bcd /set {default} path "\windows\system32\boot\winload.efi"

bcdedit /store bcd /set {3972e2ea-e2f7-11e6-a79c-94de80b88542} path "\windows\system32\boot\winload.efi"

bcdedit /store bcd /set {ece1124d-e31b-11e6-a79c-94de80b88542} path "\windows\system32\boot\winload.efi"


Выведем список всех загрузочных записей командой bcdedit /store bcd чтобы убедиться что все сделано правильно.


Проверим результат в виртуальной машине загрузившись в EFI режиме.



Загрузчик на этом полностью настроен.

Редактирование файлов boot.wim.


Это заключительный этап подготовки мульти-установочной Windows флешки. Что нужно будет сделать? Первое, смонтировать файл образ среды предустановки boot.wim. Второе, скопировать специальный командный файл mysetup.cmd и файл параметров среды предустановки winpeshl.ini в папку Windows\System32 смонтированного образа. Причем командный файл нужно предварительно отредактировать под конкретный установочный дистрибутив. Третье, размонтировать смонтированный раннее файл образ с сохранением внесенных изменений.

Для монтирования образов будет использоваться консольная программа DISM. Она по умолчанию присутствует в ОС Windows начиная с Windows 7. Если по какой то причине у вас данная программа отсутствует, то вы можете достать ее из установочного образа в папке sources, либо из того же файла boot.wim по пути Windows\System32.

Начнем с дистрибутива Windows 10 x64. В одной панели FAR перейдем в директорию содержащую файл boot.wim, для данного дистрибутива это директория WININST\10x64. Во второй панели создадим папку к которой мы будем монтировать образ boot.wim. В моем случае это будет папка E:\mnt. Активной должна быть панель с файлом boot.wim.


Перейдем в режим командной строки (CTRL+O) и выполним команду cls для очистки экрана от вывода предыдущих команд.

Для монтирования *.wim файлов нам необходимо указывать внутренний числовой индекс версии содержимого образа. Иными словами в одном *.wim файле может содержаться несколько образов, у каждого из которых свой индекс.

Отобразим информацию о файле boot.wim, чтобы узнать какой индекс указывать при его монтировании. Выполним для этого команду dism /get-wiminfo /wimfile:boot.wim.


Как видно, среда предустановки располагается вод индексом с номером 2.

Индекс: 2
Имя : Microsoft Windows Setup (x64)
Описание : Microsoft Windows Setup (x64)
Размер (байт): 1 504 124 999

Смонтируем образ. Выполним команду dism /mount-wim /wimfile:boot.wim /index:2 /mountdir:E:\mnt.


Вернемся к файловым панелям (CTRL+O). Как можно наблюдать в папке E:\mnt появилось содержимое. Файловая структура смонтированного образа.


Перейдем в папку E:\mnt\Windows\System32 и создадим (SHIFT+F4) в ней файл winpeshl.ini cо следующим содержимым.

[LaunchApps]
startnet.cmd
mysetup.cmd



Данный конфигурационный файл указывает среде предустановки какие программы необходимо запустить всесто тех, что запускаются по умолчанию.Из этого списка, файл startnet.cmd отвечает за инициализацию сети, и уже присутствует в директории E:\mnt\Windows\System32, нам остается создать файл mysetup.cmd. отвечающий за возможность установки Windows из указанной директории.

И так, создадим (SHIFT+F4) файл mysetup.cmd со следующим содержимым.

:::::::::::::::::::::::::::::::::
set InstallDir=WININST\10x64
:::::::::::::::::::::::::::::::::

@title BootDev - Windows install
@echo off
@color 37
@cls

for %%I in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%I:\%InstallDir% set BootDev=%%I:

if exist %BootDev%\%InstallDir%\install.wim (
 set WinImage=%BootDev%\%InstallDir%\install.wim
 goto :installwim
)
if exist %BootDev%\%InstallDir%\install.esd (
 set WinImage=%BootDev%\%InstallDir%\install.esd
 goto :installwim
)
if exist %BootDev%\%InstallDir%\sources\setup.exe (
 goto :virtualdrive
)

:installwim

echo Found %WinImage%, continue installation...

If exist %BootDev%\%InstallDir%\setup.exe (
 %BootDev%\%InstallDir%\setup.exe /installfrom:%WinImage%
 goto :reboot
)

if not exist X:\setup.exe (
 goto :error
) else (
 X:\setup.exe /installfrom:%WinImage%
 goto :reboot
)


:virtualdrive
echo Creating virtual drive z: for %BootDev%\%InstallDir%
subst z: %BootDev%\%InstallDir%
echo Start installation...
cd z:\sources
z:\setup.exe || z:\sources\setup.exe
goto :reboot

:error
echo Cannot find "setup.exe" !
echo Press any key to reboot...

:reboot
wpeutil reboot
pause



На этом модификация образа boot.wim закончена. Перейдем в корень диска (в моем случае E:\), вернемся в командную строку и выполним команду dism /unmount-wim /mountdir:E:\mnt /commit для размонтирования образа с сохранением проделанных изменений.


Изменение файла boot.wim дистрибутива Windows 10 x64 на этом завершено.

Займемся дистрибутивом Windows 8.1 x64. Схема действий такая же.
Переходим в каталог содержащий файл boot.wim, а именно в WININST\8.1x64\sources. Переключаемся в командную строку и выполняем команду отображения информации о *.wim файле dism /get-wiminfo /wimfile:boot.wim для определения нужного индекса.


Нужный нам индекс второй. Монтируем образ boot.wim командой dism /mount-wim /wimfile:boot.wim /index:2 /mountdir:E:\mnt.



Создаем в директории E:\mnt\Windows\System32 файл winpeshl.ini с таким же содержанием как и в предыдущий раз.


И файл mysetup.cmd с аналогичным содержимым, с единственной поправкой. Во второй строке вместо set InstallDir=WININST\10x64 пишем set InstallDir=WININST\8.1x64. Эта строка отвечает за расположение установочного дистрибутива.


Выходим в корень диска (в моем случае E:\), и выполняем размонтирование образа командой dism /unmount-wim /mountdir:E:\mnt /commit.


Изменение файла boot.wim дистрибутива Windows 8.1 x64 на этом завершено.

И последний дистрибутив Windows 7 x64. Проделываем все тоже самое, Переходим в каталог с файлом boot.wim (WININST\7x64). Выводим информацию об образе чтобы узнать нужный индекс dism /get-wiminfo /wimfile:boot.wim. Выполняем монтирование образа dism /mount-wim /wimfile:boot.wim /index:2 /mountdir:E:\mnt.


Создаем в папке E:\mnt\Windows\System32 файл winpeshl.ini и mysetup.cmd с содержимым представленным выше, с единственной разницей у второго во второй строке. Она должна быть изменена под расположение установочного дистрибутива, то есть выглядеть так set InstallDir=WININST\7x64.



Выходим в корень диска (в моем случае E:\), и выполняем размонтирование образа командой dism /unmount-wim /mountdir:E:\mnt /commit.


На этом мы отредактировали все файлы boot.wim каждого из дистрибутивов. Проверим запускается ли скрипт mysetup.cmd при загрузке среды предустановки каждого образа.

Установщик Windows 10 x64

Установщик Windows 8.1 x64

Установщик Windows 7 x64
Как видно из скриншотов, все работает. Мульти-установочная Windows флешка готова к использованию.

На этом все😊.

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

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