«Здравствуйте, снова вранье у Вас», ворвался ко мне в личку Telegram читатель Антон. Так его возмутила викторина про количество разделов, создаваемых программой установки Windows в разметке GPT.
Назначенный мной правильный ответ «4» выбрал лишь каждый пятый читатель. Думаю, что большинство из 46%, проголосовавших за «3» в лучшем случае заглянули в оснастку управления дисками. Но она не показывает раздел MSR в отличие от diskpart.
Однако Антон принес отличный аргумент! До первой перезагрузки создается только три раздела, а потом – это уже не программа установки. Ведь установочную флэшку можно вытащить без ущерба для процесса.
[+] Сегодня в программе
О чем эта статья
Если вынести эмоции за скобки, такая позиция вполне имеет право на жизнь. Здорово, что читатель заметил существенное изменение под капотом программы установки – новый порядок создания разделов. О чем я ему и сказал, попутно доставив свою позицию более развернуто, но без технических нюансов. Их удобнее излагать в блоге, и сегодня я разберу:
- что считается программой установки
- какие именно разделы создаются на каком этапе установки актуальных версий Windows
- в какой версии Windows 10 произошли значимые изменения в этой сфере
- почему поведение системы изменилось
Что считать программой установки Windows
Отталкиваться надо от setup.exe
на установочном диске. Бесспорно, это программа, которая может выполнять разнообразные задачи:
- Чистая установка Windows путем загрузки с флэшки, на чем мы фокусируемся сегодня
- Обновление или переустановка ОС поверх путем запуска setup.exe из-под работающей системы
- Проверка совместимости
- Загрузка в среду восстановления
- Сжатие системных файлов
- и многое другое
Определение программы установки
Я всегда вкладывал в понятие программа установки Windows (Windows setup) более широкий смысл нежели приложение или процесс setup.exe
. Программа установки работает от загрузки с флэшки до входа на рабочий стол. Она документирует свой процесс в различных журналах, из которых нам сегодня интересны файлы setupact.log
в папках %windir%\panther
и %windir%\panther\unattendGC
.
В документации процесса установки Windows сейчас говорится так. Программа установки Windows запускает и перезапускает компьютер, собирает информацию, копирует файлы и создает или настраивает конфигурационные параметры. На странице в таблицу сведены три этапа программы установки: Windows PE, Online Configuration и Windows Welcome.
Здесь нет противоречий моему видению. Однако давайте рассмотрим эти этапы детальнее.
Ключевые этапы установки
Изучение автоустановки ОС хорошо прокачивает понимание процесса установки. Я давно вижу его через призму конфигурационных проходов.
Эта картинка живет в документации со времен Windows 8. Интересно, что в эпоху Vista она слегка отличалась — тогда просто забыли нарисовать маршрут generalize → specialize.
windowsPE
При запуске с флэшки или ISO загрузчик передает управление процессом программе установки, реализованной с помощью файла setup.exe
из корня флэшки.
Выполняется загрузка Windows PE, задаются языковые настройки этого этапа, указывается издание ОС, ключ продукта и т.д. В конце прохода windowsPE создается структура разделов и к разделу с системой применяется install.wim. Этап венчает перезагрузка, первая в серии.
specialize
После перезагрузки установочная флэшка действительно не нужна, потому что все необходимое уже есть на диске. Начинается проход specialize. Тезис читателя программа установки работает ровно до первой перезагрузки, видимо, подразумевал setup.exe
. Это утверждение проверяется визуальным анализом или по логам.
На виртуальной машине я заранее подключил второй VHDX с Process Explorer. В начале этапа я нажал Shift+F10 и запустил утилиту.
Но это необязательное упражнение, потому что куда проще посмотреть лог установки. Здесь и далее фрагменты лога публикуются с купюрами для экономии места.
2022-02-20 10:27:50, Info [0x0601dc] IBS Setup has completed phase 2 at 2022-02-20 10:27:50 2022-02-20 10:27:50, Info [0x090009] PANTHR CBlackboard::Close: f:\$windows.~bt\sources\panther\setupinfo. 2022-02-20 10:28:20, Info IBS ------------------------------------------------ 2022-02-20 10:28:20, Info [0x0601c1] IBS InstallWindows:Install Path = C:\Windows\system32\oobe 2022-02-20 10:28:20, Info [0x0601c2] IBS InstallWindows:Setup Phase = 4 2022-02-20 10:28:20, Info [0x0601cb] IBS InstallWindows:Continuing Setup after completing WinPE phase. Working directory = C:\Windows\Panther 2022-02-20 10:28:20, Info [0x0601ce] IBS Setup has started phase 4 at 2022-02-20 10:28:20 2022-02-20 10:28:20, Info [0x0601cf] IBS Install source is C:\Windows\system32\oobe
Как видите, сразу запускается setup.exe
, но из папки C:\Windows\system32\oobe
! Этот файл (на картинке справа) содержится в WIM-образе и отличается от одноименного файла в корне ISO (слева) не только размером и версией, но и описанием.
Антон, конечно, прав в том, что setup.exe
из корня флэшки не задействован в процессе после первой перезагрузки. Но программа установки продолжается, и делает это при участии одноименного файла.
Впрочем, сначала в игру с пакетами APPX вступает sysprep. А самая заметная работа setup.exe
на этом проходе – создание раздела со средой восстановления! После инвентаризации имеющихся разделов выполняется попытка создания раздела RE. Перед этим раздел с ОС сжимается.
2022-02-20 10:30:19, Info [setup.exe] Attempting to create a new partition for WinRE 2022-02-20 10:30:19, Info [setup.exe] winreGetNewPartitionWithCoInit CoInitialize error hr = 0x80010106 2022-02-20 10:30:19, Info [setup.exe] winreGetNewPartitionWithCoInit Will shrink the OS volume with : 634388480 2022-02-20 10:30:19, Info [setup.exe] winreGetNewPartitionWithCoInit Will create partition with size: 633339904 2022-02-20 10:30:19, Info [setup.exe] winreGetVolumeGUIDPath returning \\?\Volume{81c6049a-d88c-4340-baa1-21f77a8efdca}\ 2022-02-20 10:30:19, Info [setup.exe] winreGetNewPartition root: C:\Windows OS volume GUID: \\?\Volume{81c6049a-d88c-4340-baa1-21f77a8efdca}\ 2022-02-20 10:30:20, Info [setup.exe] winreShrinkVolume Shrinking the OS volume with: 634388480 2022-02-20 10:30:24, Info [setup.exe] winreShrinkVolume returning TRUE 2022-02-20 10:30:24, Info [setup.exe] winreProcessVolume returning TRUE 2022-02-20 10:30:24, Info [setup.exe] winreEnumerate returning TRUE 2022-02-20 10:30:24, Info [setup.exe] winreCreatePartition Will create partition at offset: 135729774592 with size: 633339904 2022-02-20 10:30:24, Info [setup.exe] winreCreatePartition create partition successfully, actual offset is: 0x1F9A200000 2022-02-20 10:30:25, Info [setup.exe] winreCreatePartition returning TRUE 2022-02-20 10:30:25, Info [setup.exe] New WinRE partition created
Обратите внимание, что все операции предваряются временем и названием процесса. Это не всегда исполняемый файл, но в случае с setup.exe
так и есть. Создав раздел, программа установки перекидывает в него winre.wim и настраивает среду восстановления как по нотам.
2022-02-20 10:30:25, Info [setup.exe] Found target partition: use the new WinRE partition, offset: 135729774592 2022-02-20 10:30:25, Info [setup.exe] --Install on target OS step 5: set WinRE settings and restore system to a good state when hitting any errors 2022-02-20 10:30:25, Info [setup.exe] Enter SetWinRESettings 2022-02-20 10:30:25, Info [setup.exe] Copying WinRE from C:\Windows\system32\Recovery to staging location on \\?\GLOBALROOT\device\harddisk0\partition4 2022-02-20 10:30:35, Info [setup.exe] Copied WinRE to staging location 2022-02-20 10:30:35, Info [setup.exe] Creating BCD entry 2022-02-20 10:30:35, Info [setup.exe] WinRE created BCD entry: : {E4D8F2EF-9279-11EC-98A3-DA5CDA31F70A} 2022-02-20 10:30:35, Info [setup.exe] Moving Winre and boot.sdi from staging location to target 2022-02-20 10:30:35, Info [setup.exe] Moved Winre and boot.sdi from staging location to target 2022-02-20 10:30:35, Info [setup.exe] Updating reagent.xml 2022-02-20 10:30:35, Info [setup.exe] Set WinRE location path to: \Recovery\WindowsRE 2022-02-20 10:30:35, Info [setup.exe] Set recovery guid 2022-02-20 10:30:35, Info [setup.exe] Set OS build version: 22000.1.amd64fre.co_release.210604-1628 2022-02-20 10:30:35, Info [setup.exe] Set Wimboot state: 0 2022-02-20 10:30:35, Info [setup.exe] Set install state to: enabled 2022-02-20 10:30:36, Info [setup.exe] WinRE is installed
Этап specialized завершают операции CBS. Приложение setup.exe
дальнейшего участия в установке не принимает.
OOBE
Программа установки продолжается. Система уже полностью установлена, и красочным процессом пользовательской настройки рулят файлы с однокоренными OOBE именами. Сначала отрабатывает конфигурационный проход oobeSystem, если обнаруживается файл ответов. Затем запускается msoobe.exe для формирования последовательности окон в мастере – регион, раскладки клавиатуры, учетная запись и т.д.
2022-02-20 10:32:08, Info [windeploy.exe] Launching [C:\Windows\system32\oobe\oobeldr.exe /system]... 2022-02-20 10:32:08, Info [oobeldr.exe] OOBELdr.exe launched with command-line [/system]... 2022-02-20 10:32:08, Info [oobeldr.exe] Parsing command line arguments... 2022-02-20 10:32:08, Info [oobeldr.exe] Parsing the following command line: [/system] 2022-02-20 10:32:08, Info [oobeldr.exe] Status for unattend pass [oobeSystem] = 0x0 2022-02-20 10:32:08, Info [oobeldr.exe] Found no unattend file for oobeSystem pass; skipping pass. 2022-02-20 10:32:08, Info [oobeldr.exe] Successfully ran oobeSystem pass. 2022-02-20 10:32:08, Info [oobeldr.exe] Waiting for essential OOBE services to start... 2022-02-20 10:32:08, Info [oobeldr.exe] OrchestrateWaitForOOBEServices: Wait was already done; not waiting again 2022-02-20 10:32:08, Info [oobeldr.exe] Essential OOBE services started successfully. 2022-02-20 10:32:08, Info [oobeldr.exe] Launching [C:\Windows\system32\oobe\msoobe.exe]... 2022-02-20 10:32:09, Info [msoobe.exe] ---------------------------------------------------------- 2022-02-20 10:32:09, Info [msoobe.exe] Starting OOBE
Создание разделов в разметке GPT программой установки
В своем гайде по ручному созданию разделов я когда-то советовал diskpart из-за проблемы с размером раздела со средой восстановления в Windows 8.1. Когда ее исправили, я стал рекомендовать программу установки.
Это было проще всего для неопытных пользователей и сводило к минимуму ущерб от кривых рук. Загрузился с диска, дошел до управления разделами, выделил неразмеченное пространство и нажал кнопку «Создать». Красота!
В этом сценарии создавалось четыре раздела, причем раздел Windows RE шел первым слева. На картинке конфигурация разделов по умолчанию из документации времен Windows 8.х.
Рекомендации Microsoft
Microsoft еще с 2015 года декларировала в блогах, документации и опубликованном там скрипте diskpart новый подход – раздел Windows RE должен быть крайним справа. Предполагалось обновление среды восстановления при установке новой версии ОС поверх старой. Расположение справа от раздела с ОС позволяло при необходимости отжать место у системы и увеличить за его счет раздел RE.
Однако в программе установки все оставалось по-прежнему еще почти пять лет. Как объяснил ПМ Windows RE, они не видели срочности. В Microsoft считают, что подавляющее большинство систем не проходят через чистую установку, т.к. настраиваются изготовителями ноутбуков или ИТ-специалистами в организациях. Утверждение выглядит спорно, но оно не лишено смысла, если ограничиться системами, приносящими деньги Microsoft.
Изменения в Windows 10 20H1
Своим рекомендациям Microsoft начала следовать начиная с Windows 10 20H1. Теперь до первой перезагрузки создается только три раздела – EFI (на картинке — System), MSR и Windows. А раздел Windows RE (на картинке — Recovery) создается на этапе specialize, лог вы видели выше.
По той же причине отныне нажатие кнопки «Создать» на этапе управления дисками не приведет к появлению раздела Windows RE. Можно, конечно, дождаться окончания этапа specialize, но потом надо будет зачищать разделы от файлов. Тогда уж проще и быстрее в diskpart все сделать.
Поэтому в своей статье я уже не рекомендую тот или иной способ. Если вам нужна среда восстановления на отдельном разделе нежели на разделе с ОС, логично сразу создавать структуру с помощью diskpart. Но ничто не мешает сделать это впоследствии.
Остается открытым вопрос, почему раздел Windows RE создается только после первой перезагрузки. Ведь можно было бы создавать его справа одновременно с другими разделами. В логах этапа specialize я не нашел ответа, там стандартная рутина – ищем выделенный раздел среды восстановления, и если не находим, пытаемся создать.
2022-02-20 10:30:19, Info [setup.exe] Get downlevel ReAgent config 2022-02-20 10:30:19, Info [setup.exe] Downlevel config file path: \Recovery\ReAgentOld.xml 2022-02-20 10:30:19, Info [setup.exe] Checking for downlevel WinRE installation. 2022-02-20 10:30:19, Info [setup.exe] DisableUpdateEnhancedConfigInfo 2022-02-20 10:30:19, Info [setup.exe] First round search 2022-02-20 10:30:19, Info [setup.exe] Get ReAgent config 2022-02-20 10:30:19, Info [setup.exe] GetReAgentConfig Config file path: C:\Windows\system32\Recovery\ReAgent.xml 2022-02-20 10:30:19, Warning [setup.exe] Failed to get recovery entries: 0xc0000225 2022-02-20 10:30:19, Info [setup.exe] winreGetWinReGuid returning 0X490 2022-02-20 10:30:19, Info [setup.exe] ReAgentConfig::ReadBcdAndUpdateEnhancedConfigInfo WinRE disabled, WinRE Guid could not be determined (0x490) 2022-02-20 10:30:19, Info [setup.exe] FindWinReSourceImageAndPartition No source winre.wim was specified. Checking for a staged winre.wim. 2022-02-20 10:30:19, Info [setup.exe] FindWinReSourceImageAndPartition using winre.wim from C:\Windows\system32\Recovery 2022-02-20 10:30:19, Info [setup.exe] --Install on target OS step 2: detect and fix if there is any issue for winre settings 2022-02-20 10:30:19, Info [setup.exe] DetectAndFixWinReIssues nothing to do because winre is not enabled. 2022-02-20 10:30:19, Info [setup.exe] --Install on target OS step 3: check if we can keep winre.wim in the same partition if it is staged. 2022-02-20 10:30:19, Info [setup.exe] --Install on target OS step 4: check if we can put winre.wim in other partitions or create one if needed. 2022-02-20 10:30:19, Info [setup.exe] CanPutWinREOnOtherPartitions WinRE is not staged. Searching for a suitable partition for WinRE. 2022-02-20 10:30:19, Info [setup.exe] Entering FindTargetPartition 2022-02-20 10:30:19, Info [setup.exe] Start looping through each partition and initialize os partition, recovery partition and system partition for MBR 2022-02-20 10:30:19, Info [setup.exe] Checking partition at offset 1048576, partition number: 1 2022-02-20 10:30:19, Info [setup.exe] skip GPT Partition which type is not PARTITION_MSFT_RECOVERY_GUID 2022-02-20 10:30:19, Info [setup.exe] Checking partition at offset 16777216, partition number: 2 2022-02-20 10:30:19, Info [setup.exe] skip partition because it is not on the same disk as staging partition 2022-02-20 10:30:19, Info [setup.exe] Checking partition at offset 122683392, partition number: 3 2022-02-20 10:30:19, Info [setup.exe] find OS partition 2022-02-20 10:30:19, Info [setup.exe] Complete looping through each partition 2022-02-20 10:30:19, Info [setup.exe] ----Search target partition option #1: try existing WinRE partition 2022-02-20 10:30:19, Info [setup.exe] ----Search target partition option #2: try first recovery partition 2022-02-20 10:30:19, Info [setup.exe] ----Search target partition option #3: try system partition for MBR 2022-02-20 10:30:19, Info [setup.exe] ----Search target partition option #4: try new recovery partition if allowed 2022-02-20 10:30:19, Info [setup.exe] Attempting to create a new partition for WinRE
Возможно, текущая реализация призвана обеспечить максимальную совместимость. Между проходами windowsPE и specialize есть еще offlineServicing. Он служит для применения изменений к распакованному WIM-образу – установки языковых пакетов, драйверов и т.д. Поэтому инвентаризацию разделов решили выполнять уже после этих действий.
Заключение
Процесс установки Windows весьма консервативный. Этап Windows PE не менялся уже много лет, если не считать легкий макияж окон. Изменения под капотом конфигурационных проходов наверняка происходят, но отслеживать их можно лишь скрупулезным сравнением журналов программы установки.
Новый порядок создания разделов, пожалуй, одно из самых заметных изменений в последние годы. Хотя и оно фактически скрыто от глаз пользователя, а обнаруживается лишь прерыванием установки или изучением лога.
Alexandr Smirnoff
Цитата: » Программа установки работает от загрузки с флэшки до входа на рабочий стол.»
Согласен на все 100%.
Владимир Шведов
Лично я один раз применял загрузку операционной системы с флэшки.Правда ранее как чувствовал я на всякий пожарный случай создал загрузочную флэшку с Windows 10 Домашняя по инструкции на сайте https://answers.microsoft.com/ru-ru/windows/forum/all/как/982cfdc5-0ecb-49d3-8e8f-7b5213e73d95 Применил флэшку на 8 Гб и на ней осталось 3,07 Гб пустого места.Загрузка шла не до появления рабочего стола.А до появления пароля для входа лично у меня.У вас вход без пароля.Вот скрин флэшки:
[URL=https://fastpic.org/view/116/2022/0408/b5c231a35490ed88a893e30a457393e1.jpg.html][IMG]https://i116.fastpic.org/thumb/2022/0408/e1/b5c231a35490ed88a893e30a457393e1.jpeg[/IMG][/URL] Вот какие папки и файлы созданы в этом процессе.
Отличная статья !
А вот за объяснение всего процесса огромное спасибо лично Вадиму Стеркину !
Валерий
А можете написать про решение проблемы со сбросом программ по умолчанию и файловых ассоциаций? Каждый раз такое при загрузке. Достало уже. На более ранних билдах такое заметно реже происходило.
http://klikr.org/8583b0a94249ee99807622b3f355.png
Vadim Sterkin
Вам в http://forum.oszone.net/ Ну и сюда тоже, конечно.
artem
пара причин, навскидку.
1. В отличие от трёх других разделов, WinRE не требуется в процессе установки и первичной настройки ОС. Поэтому этот код можно не держать в программе установки.
Дело в том, что программа установки — довольно «негибкий» кусок. В него сложно вносить изменения и сложно доставлять исправления. (Потому что придётся интегрировать обновления в WinPE, что требует много ручного труда, и 99% пользователей не станет этим заниматься.) Гораздо проще при необходимости менять код в самой ОС (просто через Windows Update). Поэтому, если есть выбор, лучше иметь больше кода в ОС, чем в программе установки.
По этой же причине код программы установки вообще стараются не трогать без лишней нужды. Даже на необходимые изменения уходит несколько месяцев, а многие баги (типа курсива в заголовках окон) не чинят годами.
2. На протяжении жизни ОС может быть несколько сценариев, когда вдруг потребуется создать или изменить раздел WinRE. Т.е., даже если оставить этот код в программе установки, в самой ОС он всё равно тоже нужен.
А тогда, зачем же держать его в двух местах? Потенциально это может привести к ещё большей путанице и несоответствиях. (Если, например, в одном месте какой-нибудь баг исправят, а в другом нет.) Поэтому если можно сделать так, чтобы этот код жил только в одном месте (в самой ОС), а из другого его получится убрать (из программы установки), так будет гораздо спокойнее для всех.
Vadim Sterkin
A MSR в этом процессе требуется?
Этот PM RE там же удивлялся — а что, там курсив? Так и хотелось спросить: друг, ты хоть раз запускал что-то из RE кроме тыкания в плитки? :)
В двух местах не надо. Но… Можно подумать, что если на прояжении жизни ОС понадобится изменить раздел WinRE, это будут делать с помощью setup.exe из system32\oobe. Так можно и обратную совместимость поломать. Они пропихнут тебе через WU или еще как-то новый кастомный фикс и дело с концом.
artem
Это мутный вопрос. В теории (по документации) — требуется. На любом диске GPT, если там есть хоть один раздел, должен быть и MSR.
На практике, можно и без него, конечно. Если ты не планируешь в будущем какие-то хитрые манипуляции типа конвертации базового диска в динамический. Но также понятно, что программа установки должна следовать документации и перестраховываться на случай любых странных сценариев в будущем.
Можно :) Но это снова потребует внесения больше изменений в код установщика. (В широком смысле).
А этого мы тоже стараемся избегать как можно сильнее. Именно потому, что если там что-то пойдёт не так, починка может вызвать дополнительные трудности. Представь, что поломается что-то в OOBE. Т.е., чтобы это исправить, тебе снова придётся монтировать wim и вручную импортировать обновления. (Разница только в том, что в этом случае придётся редактировать install.wim, а не boot.wim. Всё равно намного сложнее, чем просто запустить Windows Update в уже установленной системе.
Vadim Sterkin
Вопрос был не про вообще, а конкретно в контексте этапа Windows PE программы установки. И в качестве контраргумента на тезис, что раздел RE на этом этапе необязательный, поэтому его создание вынесли в другой этап.
А я в свою очередь своим вопросом толсто намекнул, что по такой логике надо с MSR делать так же. Но почему-то не сделали.
Ах да, тогда нужно его позицию менять, а просто ради выноса мы это делать не будем. Мы ж 5 лет документировали одно, а делали другое, но это другое © :)
Короче, твой аргумент про необязательность RE на первом этапе я считаю несостоятельным.
Vadim Sterkin
Я тут другую инфу искал, поэтому случайно наткнулся на FAQ по GPT
Disks that require an MSR
Every GPT disk must contain an MSR. The order of partitions on the disk should be ESP (if any), OEM (if any) and MSR followed by primary data partition(s). It is particularly important that the MSR be created before other primary data partitions.
Creation responsibilities for MSR
The MSR must be created when disk-partitioning information is first written to the drive. If the manufacturer partitions the disk, the manufacturer must create the MSR at the same time. If Windows partitions the disk during setup, Windows creates the MSR.
Why MSR must be created when the disk is first partitioned
After the disk is partitioned, there will be no free space left to create an MSR.
Объяснение из разряда «потому что» :) Возможно, есть какие-то технические требования с учетом операций конвертации диска в динамический. Но про них не рассказали.
artem
Чуть более доходчивое (хотя всё ещё мутноватое) объяснение есть по твоей же ссылке, только ниже.
Microsoft Reserved Partition (MSR)
The Microsoft Reserved Partition (MSR) reserves space on each disk drive for subsequent use by operating system software. GPT disks do not allow hidden sectors. Software components that formerly used hidden sectors now allocate portions of the MSR for component-specific partitions. For example, converting a basic disk to a dynamic disk causes the MSR on that disk to be reduced in size and a newly created partition holds the dynamic disk database.
(https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-and-gpt-faq?view=windows-11#microsoft-reserved-partition—msr-)