10 июля 2021

Эксперименты с установщиком Windows 7 и 10. Запись установщика на FAT32.

Всё началось с заявления в одном чате, что дистрибутив Windows 10 нельзя записать на носитель с FAT32, потому что размер образа "install.wim" превышает допустимый размер файла в 4 гигабайта. Я специально скачал официальный ISO-образ Windows 10 21H1 и в этом убедился, но любопытство было уже не остановить.

Все эксперименты я ставил на VHD-образах дисков, чтобы лишний раз не затирать флешки и не искать место, когда сохранить гигабайты данных с них. Работоспособность проверял с помощью Oracle VirtualBox.

В процессе изысканий я познакомился с двумя полезными бесплатными утилитами:
  • BOOTICE - швейцарский нож для работы с дисками, разделами и загрузочными секторами.
  • GImageX - графическая утилита для работы с WIM-образами, которые используются в составе дистрибутивов Windows.

Сначала я просто попробовал повторить то, что делает утилита от Microsoft после загрузки образа из интернет и интеграции всех вышедших обновлений. Различие между ISO-образом и тем, что записывается утилитой на диск, состоит в том, что внутри образа лежит файл "install.wim", а утилита генерирует файл "install.esd", который сжат ещё сильнее и занимает примерно на треть меньше места.

Конвертировать один формат в другой можно с помощью утилиты DISM++ (Github), но эта утилита у меня не заработала нормально в среде Windows 7, в которой я и проводил свой эксперименты. Конвертация так же занимает довольно продолжительное время и по полной грузит процессор.

Для распаковки образа подойдёт программа 7-Zip. Желательно установить самую новую версию. В Windows 10 образ можно подключить как виртуальный диск средствами самой системы.

С помощью программы BOOTICE я создал VHD-образ размером 6 гигабайт, т.е. немного больше размера ISO-образа, чтобы точно всё поместилось. 
 
Практически все операции производятся на вкладке "Disk image":
 
 
На этой вкладке надо нажать кнопку "Create VHD" и заполнить поля примерно так и нажать кнопку "Create":
 
 
Теперь необходимо создать один раздел, который будет занимать весь образ. Для этого на той же вкладке надо нажать кнопку "Partition manage"и в появившемся окне нажать кнопку "Re-Partitioning". Интерфейс не очень удобный в плане расчёта размера, но можно очистить все поля для ввода размера и получить в последнем нужное число:

 
В результате получится образ с одним разделом, отформатированным в NTFS.
 
Теперь надо подключить полученный образ и скопировать на него файлы из ISO-образа. Для этого на той же вкладке надо нажать кнопку "Attach/detach VHD" и появившемся окне нажать кнопку "Attach" для подключения, скопировать файлы из ISO-образа в корень появившегося диска и нажать кнопку "Detach" для отключения.

 
Осталось только прописать загрузочный сектор для диска и раздела. Для этого надо отключить образ и всё на той же вкладке нажать кнопку "Process MBR". Появится выбор загрузчиков и информация об уже имеющемся загрузчике на диске:

 
В данном случае на диске уже есть нужный загрузчик. Если это не так, или просто хочется всё сделать наверняка, то надо выбрать вариант "Windows NT 5.x / 6.x MBR", Нажать "Install / Config" и из предложенного списка выбрать "Windows NT 6.x MBR".
 
Для единственного раздела тоже нужен свой загрузочный сектор. Для этого надо нажать кнопку "Process PBR". Появится окно с выбором разделов и загрузочных секторов:
 

Тут опять же всё уже сделано, но для верности можно прописать вариант "BOOTMGR boot record (FAT/FAT32/NTFS/exFAT)". После выбора этого варианта появится окно, в котором можно будет указать загрузчику имена boot-файлов, если вдруг понадобилось их переименовать. В случае распаковки ISO-образа ничего менять не надо.
 

На этом создание VHD-образа с дистрибутивом Windows 10 завершено. Можно подключать его к виртуально машине и проверять его работоспособность.

Все эти манипуляции можно произвести и без использования BOOTICE, но с помощью программы всё делается из одного окна.

Для создания, разбиения на раздела и форматирования образа можно использовать оснастку "Управление дисками". В меню "Действие" есть все необходимые пункты.


Можно так же воспользоваться программой DISKPART, которая работает из командной строки. Для неё даже можно написать примерно такой сценарий:

CREATE VDISK FILE="I:\win10-test.vhd" TYPE=EXPANDABLE MAXIMUM=6144
SELECT VDISK FILE="I:\win10-test.vhd"
ATTACH VDISK
CREATE PARTITION PRIMARY
SELECT PARTITION 1
FORMAT FS=NTFS
В результате будет создан динамический VHD-образ размером 6 гигабайт с одним разделом, отформатированным в NTFS.
 
Аналогичным образом можно создать образ и для Windows 7, только размер можно сделать 4 гигабайта, потому что её дистрибутив занимает меньше места.
 
Так же у меня получилось записать образ на раздел с FAT32 вместо NTFS, но для этого пришлось пойти на некоторую хитрость.

Если я правильно понял, то программа установки Windows 10 довольно универсальная и ищет все возможные варианты образов в каталоге "sources". Кроме WIM и ESD есть ещё SWM. Это по сути тот же WIM, только разбитый на несколько томов. Этим я и воспользовался, чтобы записать дистрибутив Windows 10 на носитель с FAT32.

Для преобразования я использовал программу GImageX. Сначала надо извлечь файл "sources\install.wim" в какой-нибудь временный каталог. В главном окне программы надо открыть вкладку "Split", на ней выбрать извлечённый файл или указать файл из подключённого ISO-образа, указать место для сохранения преобразованного файла и размер томов, на которые файл будет разбиваться:


Теперь надо нажать кнопку "Split". В указанном месте будет создано несколько файлов с именами "install.swm", "install2.swm", "install3.swm" и так далее. Количество файлов зависит от выбранного размера тома.

Теперь можно повторить создание VHD-образа, но этапе разбития на разделы надо выбрать файловую систему FAT32 вместо NTFS. При распаковке файлов из образа надо пропустить файл "sources\install.wim", потому что система его просто не сможет записать из-за размера, а вместо него скопировать полученный ранее набор файлов.

После этого очень желательно повторить процедуру прописывания загрузчиков.

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

Повторить этот же опыт с Windows 7 у меня не получилось. Хотя все файлы нормально записывались на раздел с FAT32 без преобразований, но установка с этой файловой системы запускаться не хотела. В виртуальной машине я получал чёрный экран с курсором и нулевую активность со стороны носителей. При использовании NTFS такой проблемы не было.

Так же есть способ прописывания загрузочных секторов без использования программы BOOTICE.

Внутри каталога "boot" установочного образа Windows есть программа "bootsect.exe", с помощью которой можно прописать загрузочный сектор сразу для раздела и MBR. Делается это такой командой:

h:\boot\bootsect.exe /nt60 n: /mbr
Конечные тома будут обновлены с помощью загрузочного кода,
совместимого с BOOTMGR.

N: (\\?\Volume{3b964938-0000-0000-0000-100000000000})

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

\??\PhysicalDrive9

    Загрузочный код диска успешно обновлен.

Загрузочный код успешно обновлен на всех конечных томах.
Командную строку необходимо запустить с правами администратора.
 
h:\boot\bootsect.exe - путь к исполняемому файлу программы. В данном случае я использовал подключённый ISO-образ.
/nt60 - указание прописать загрузчик, совместимый с BOOTMGR. Аналог пункта "BOOTMGR boot record (FAT/FAT32/NTFS/exFAT)" в программе BOOTICE.
n: - буква раздела подключённого виртуального диска.
/mbr - указание прописать загрузочный код в MBR выбранного диска. Аналог пункта "Windows NT 5.x / 6.x MBR" в программе BOOTICE.
 
Программа пропишет загрузочный  код в MBR того диска, которому принадлежит указанный буквой раздел.

-->