Привет, Хабр!
Представляем подробный гайд по пересборке образа Windows Server 2019, заточенный для установки новых серверов и обновления старых (Windows Server 2012-16) в среде VMware. В принципе, гайд должен подходить к любой версии Windows на основе *.wim- или *.esd-файлов. Писался текст как внутренняя инструкция для коллег. По итогу он охватывает все необходимые возможности DISM для работы с образами, поэтому материал стал частью нашей базы знаний и блога здесь.
Рекомендации от автора: прочтите наш текст хотя бы один раз до конца, прежде чем делать образ самостоятельно, — некоторые вещи можно будет выполнить разными способами, и лучше о них узнать заранее.
Подготовка
Шаг 0: скачайте и установите актуальный Windows ADK
Необязательный пункт, если:
· у вас версия DISM аналогичная или старше той, что будет в препарируемом образе диска;
· у вас есть инструмент для создания установочных образов.
Если нет, тогда ссылка для скачивания. Ставим галочки только у средств развёртывания (да и то только DISM и OSCDIMG):
Шаг 1: готовим директории
Перед реализацией этого пункта немного наставлений от автора:
· Помните, вы можете использовать собственные имена и вложенность каталогов, но тогда вам придётся редактировать имена команд. В общем, лишние телодвижения, поэтому следуйте гайду. :)
· Прикиньте, сколько примерно понадобится свободного места для каждой папки. Возможно, в вашем случае директории придётся размещать на разных дисках. У меня поместилось всё на одном.
· Не забывайте об отсутствии пробелов в именах директорий, иначе вы устанете вставлять кавычки в команды при указании путей.
Создаём все необходимые директории.
1. Для удобства делаем корневую директорию для нашего проекта: C:\image
2. Сюда мы распаковываем образ диска: C:\image\iso
Объём равен исходному iso, в нашем случае — 5,15 Гбайт.
3. Монтируем wim-файлы: C:\image\mount
Размер на старте — 364 Мбайт, но к концу работ он составит приблизительно 23 Гбайт. Связано это с тем, что в самом начале большинство папок и файлов заменены на симлинки, но при изменениях они заменяются на реальные.
4. Здесь будут драйверы, которые мы внедрим в образ: C:\image\drivers
Как правило, они занимают мало места, так что можно даже не подсчитывать эти килобайты.
5. Файлы обновлений оставляем здесь: C:\image\msu
В нашем случае получилось около 810 Мбайт.
6. И самая главная папка, которая не раз вам пригодится (медаль «Слабоумие и Отвага» тому, кто рассчитывает обойтись без неё): C:\image\backup
Не забудьте, что где-то будет ещё лежать готовый iso — под него понадобится 4–5 Гбайт.
Шаг 2: готовим драйверы и обновления
Переходим к скачиванию драйверов и обновлений. Если у вас есть ограничения на использование обновлений только из базы ФСТЭК, то они собраны здесь.
К драйверам таких требований нет. Нам понадобился только один — pvscsi.sys. Он легко извлекается из образа VMware Tools. Свежую версию скачиваем отсюда. Это контринтуитивно, но для Windows Server 2019 подходит драйвер из папки win8, а не win10.
Шаг 3: получаем и распаковываем образы
Здесь всё просто: у вас должен быть образ нужного диска. Его вы распаковываете архиватором или чем угодно ещё, пригодным для распаковки образа (можно монтировать в виртуальный привод и копировать содержимое), в папку iso. Теперь переходим к основной работе.
Основная работа
Шаг 1: внедряем драйверы
Первым делом подготавливаем образ для установки в виртуальную машину VMware. Для этого внедряем драйвер pvscsi в загрузочную часть. Иначе при попытке установки виртуальный диск не будет виден (разумеется, если в самой виртуальной машине в качестве SCSI-контроллера выбран VMware Paravirtual).
В файле boot.wim содержится два модуля. Первый — образ восстановления Windows. В рамках этой статьи он нас особо не интересует. Второй предназначен для установки ОС с нуля и её обновления с предыдущей версии. Драйверы достаточно внедрить во второй модуль.
Примечание и отступление:
Важно! Все команды мы пишем в нижнем регистре, чтобы у вас не было сомнений, какая там буква — i или L. Если точки вверху нет — это L. Но Windows в целом регистр не важен при вводе команд и параметров. Почти все параметры команд не позиционные, то есть могут следовать в любом порядке. Это значит, что в других руководствах вы встретите такие же команды, но написанные в другом порядке следования параметров — это нормально.
1. Посмотрим на список вариантов, чтобы выбрать нужный:
dism /get-imageinfo /imagefile:c:\image\iso\sources\boot.wim
В случае другого загрузчика у вас будут указаны другие размеры. Первый образ — это среда восстановления, нам нужен второй.
2. Запускаем от имени администратора ярлык из Пуска: Среда средств развёртывания и работы с образами.
3. Вводим команду монтирования нужного wim-файла и индекса:
dism /mount-image /imagefile:c:\image\iso\sources\boot.wim /index:2 /mountdir:c:\image\mount
4. Если драйвер один (как в нашем случае), берём команду:
dism /image:c:\image\mount /add-driver /driver:c:\image\drivers\pvscsi\pvscsi.inf
5. Убеждаемся, что драйвер корректно установился:
dism /image:c:\image\mount /get-drivers /format:table
6. Если драйверов много, то есть ключ /recurse. Но с ним надо быть осторожнее: если у драйвера несколько файлов *.inf, то каждый из них будет установлен в системе в отдельную папку. Это вызовет ненужное дублирование одинаковых файлов.
dism /image:c:\image\mount /add-driver /driver:c:\image\drivers /recurse
Есть ещё ключ /forceunsigned для установки неподписанных драйверов, но мы его сейчас не используем.
7. Фиксируем изменения и отмонтируем:
dism /unmount-image /mountdir:c:\image\mount /commit
Вообще, с образом boot.wim можно сделать много интересных вещей, но это тема для отдельной статьи.
Шаг 2: подготавливаем установочный образ
Вы, наверное, замечали, что во время установки предлагается несколько вариантов выбора редакции. Но все они нам не нужны, и мы можем немного уменьшить размер итогового образа, удалив лишние варианты. Для этого экспортируем из образа install.wim только нужную редакцию.
1. Выводим список редакций:
dism /get-imageinfo /imagefile:c:\image\iso\sources\install.wim
2. Нам нужен только второй вариант. Экспортируем его в отдельный файл:
dism /export-image /sourceimagefile:c:\image\iso\sources\install.wim /sourceindex:2 /destinationimagefile:c:\image\install.wim /compress:max /checkintegrity
Ключ /checkintegrity можно не указывать. Он нужен на случай, если что-то пойдёт не так, тогда выполнение команды остановится. Сжатие /compress:max тоже не указываем на данном этапе (если позволяет свободное место).
3. Далее заменяем полученным файлом оригинальный install.wim в папке iso. Если свободное место у вас есть, этот шаг можно пропустить.
4. Монтируем полученный образ для дальнейшей работы с ним: dism /mount-image /imagefile:c:\image\iso\sources\install.wim /index:1 /mountdir:c:\image\mount
Обратите внимание на то, что в этом образе только одна редакция, поэтому её index всегда равен 1.
Шаг 3: внедряем обновления
Несмотря на то, что для Windows Server 2019 выпускаются кумулятивные обновления и SSU теперь тоже туда входит, нам всё равно необходимо первым делом внедрить KB5005112. Иначе при внедрении других обновлений возникнет ошибка. На момент написания нашего гайда актуальная версия кумулятивного обновления, проверенного и одобренного ФСТЭК, — KB5037425 (март 2024 года).
В то же время ставим net4.8 и февральское обновление для него (актуальное одобренное на момент написания). Делаем это следующей командой:
dism /image:c:\image\mount /add-package /packagepath:c:\image\msu
Команду выполняем дважды. Сначала помещаем в папку MSU файл KB5005112, а потом уже остальные. Всё потому, что одновременно с этим SSU другие обновления ставиться не будут.
После интеграции четырёх обновлений размер папки mount достигает 14,3 Гбайт.
Если захочется их удалить, достаточно вместо add использовать remove. А параметр get-packages выведет весь список.
Шаг 4: внедряем настройки через реестр
Ещё одна заметка на полях: все настройки реестра можно бэкапить через меню Файл — Выгрузить куст… Но если вдруг придётся их экспортировать обратно, то лучше предусмотреть это заранее и продумать соответствующий путь. Файлы импорта можно редактировать в блокноте.
Региональные настройки и раскладка. В качестве примера мы взяли образ на английском языке, поэтому сначала меняем регион (Россия). Потом делаем переключение раскладки на Ctrl+Shift.
1. Монтируем реестр настроек по умолчанию (не путайте, пожалуйста, с профилем пользователя по умолчанию):
reg load hklm\mount c:\image\mount\windows\system32\config\default
Но ничего не мешает вам это сделать через редактор реестра: — Файл — Загрузить куст… (Load Hive….)
2. Теперь открываем редактор реестра и переходим по пути: Компьютер\HKEY_LOCAL_MACHINE\mount\Keyboard Layout\Preload (можно и дальше через командную строку орудовать, но зачем?). Добавляем строковый параметр с именем «2» и значением «00000419» для русского языка.
3. В разделе Компьютер\HKEY_LOCAL_MACHINE\mount\Keyboard Layout создаём новый подраздел — Toggle — и добавляем в него три новых строковых (REG_SZ) параметра (это переключение раскладки на Ctrl+Shift):
· Hotkey 2;
· Language Hotkey 2;
· Layout Hotkey 3.
У вас должна получиться вот такая картинка:
4. Сохраняем изменения и выгружаем куст обратно в файл. Это можно сделать как через редактор реестра (выбрать нужный куст — Файл — Выгрузить куст… (Unload hive…), так и через консоль (reg unload hklm\mount). При выборе второго варианта убедитесь в том, что у вас не стоит фокус на этом разделе или его подразделах, — иначе команда вернёт ошибку доступа и куст не выгрузится.
5. Профиль пользователя по умолчанию находится в файле C:\Users\Default\ntuser.dat, замонтируем его:
reg load hklm\mount c:\image\mount\users\default\ntuser.dat
И проделаем те же манипуляции с добавлением русского языка и смены раскладки.
6. Если вам надо сменить регион, то ловите лайфхак:
a. Делаем необходимые настройки локально.
b. Экспортируем Компьютер\HKEY_CURRENT_USER\Control Panel\International в *.reg-файл.
c. Открываем его в блокноте, меняем все вхождения HKEY_CURRENT_USER на HKEY_LOCAL_MACHINE\mount.
d. Сохраняем и закрываем.
e. Импортируем в реестр. Нужные ветки и ключи должны теперь попасть в примонтированный профиль по умолчанию.
f. Проверяем, что значение ключа sCountry в разделе Компьютер\HKEY_CURRENT_USER\Control Panel\International равняется Russia.
g. Изменяем значение ключа Nation в разделе Компьютер\HKEY_CURRENT_USER\Control Panel\International\Geo на нужное (например, 203 — это Россия, 244 — США, все коды смотрим тут).
7. Пока мы работаем с профилем по умолчанию, делаем ещё одну настройку.
Немного негодования: мне до сих пор непонятно, почему в «Майкрософте» не сделают отображение расширений файлов по умолчанию. И вообще, почему есть возможность их скрывать. Сокращение имени файла на 4–5 символов?
Обезопасим будущих пользователей:
a. Переходим в раздел Компьютер\HKEY_LOCAL_MACHINE\mount\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced.
b. Добавляем новый DWORD-ключ HideFileExt и задаём ему значение 0.
2. Отмонтируем профиль по умолчанию: reg unload hklm\mount
Настройка дампа. На наше
1. Монтируем нужный реестр (System):
reg load hklm\mount c:\image\mount\windows\system32\config\system
2. Переходим по пути:
Компьютер\HKEY_LOCAL_MACHINE\mount\ControlSet001\Control\CrashControl
3. Нас интересует значение ключа CrashDumpEnabled:
0 = Не делать дамп.
1 = Полный дамп памяти (для него потребуется место на диске, равное размеру ОЗУ + 1 Мбайт, располагается по пути %SystemRoot%\MEMORY.DMP; если файл подкачки меньшего размера, дамп может не сформироваться).
2 = Дамп памяти ядра (не содержит нераспределённые страницы памяти или выделенные для пользовательского режима, может не поместиться в файл подкачки, если его размер задаётся вручную).
3 = Небольшой дамп памяти (64–256 КБ, создаются отдельные файлы в %SystemRoot%\Minidump).
7 = Автоматический дамп памяти (то же самое, что и дамп памяти ядра, только с автоматическим управлением размером файла подкачки).
4. Отмонтируем реестр, если вам больше ничего не нужно менять в разделе HKLM\System:
reg unload hklm\mount
Отключение устаревших шифров. В «Инфосистемы Джет» принято выполнять сканирование серверов на уязвимости, и с завидным постоянством идёт срабатывание на старые алгоритмы шифрования 3DES и RC4. У нас есть powershell-скрипт, который их выключает, но это для уже развёрнутых серверов. Устраним проблему на корню:
1. Монтируем реестр System:
reg load hklm\mount c:\image\mount\windows\system32\config\system
2. Переходим по пути: Компьютер\HKEY_LOCAL_MACHINE\mount\ControlSet001\Control\Cryptography\Configuration\Local\SSL\00010002
Нам нужен ключ
Functions — в списке значений ищем
TLS_RSA_WITH_3DES_EDE_CBC_SHA и удаляем его:
4. Далее переходим в раздел Компьютер\HKEY_LOCAL_MACHINE\mount\ControlSet001\Control\SecurityProviders\SCHANNEL\Ciphers и создаём там следующие подразделы:
RC4 40/128
RC4 56/128
RC4 128/128
Triple DES 168
Triple DES 168/168
5. В каждом подразделе создаём ключ DWORD с именем Enabled и значением 0. Выглядеть это будет так:
6. Отмонтируем реестр: reg unload hklm\mount
Удаляем лишние службы. Некоторые службы не совершают полезной работы. Особенно это касается терминальных серверов, где, как правило, лишние мегабайты ОЗУ нужны всегда. Поэтому всё ненужное — под нож. Если какую-то службу удалить сразу не получается, то у вас не хватает прав. Их надо получить на неудаляемый раздел:
1. Жмём правой клавишей по разделу, выбираем Разрешения…
2. Жмём кнопку «Дополнительно»:
3. Меняем владельца с TrustedInstaller на себя.
4. В этом же окне жмём кнопку Add… (Добавить…) и добавляем себя в список с полными правами.
5. Нажимаем несколько раз ОК, чтобы сохранить изменения и закрыть лишние окна.
Итак, приступаем к удалению лишних служб. Сначала:
· Монтируем системный реестр:
reg load hklm\mount c:\image\mount\windows\system32\config\system
· Переходим в раздел:
Компьютер\HKEY_LOCAL_MACHINE\mount\ControlSet001\Services
Теперь под нож идут:
1. CDPSvc и CDPUserSvc. Реализуют возможности, которые не используются в серверной среде (Хронология, Виртуальные рабочие столы, приложение Ваш телефон и Ночной свет).
2. ConsentUxUserSvc (служба подключения к дисплеям по Wi-Fi и устройствами Bluetooth, нужны полные права на подраздел Parameters).
3. DevicePickerUserSvc (служба передачи мультимедиа по «воздуху», нужны полные права на раздел Parameters).
4. DevicesFlowUserSvc (по функционалу похожа на ConsentUxUserSvc, также нужны полные права на Parameters).
5. PimIndexMaintenanceSvc (служба поиска контактов из приложения Контакты).
6. PrintWorkflowUserSvc, но если используется UWP-приложения с функционалом печати, то оставляем. Кстати, тут тоже нужны полные права на Parameters.
7. UnistoreSvc и UserDataSvc. Но имейте в виду, что если у вас используются UWP-приложения, то службы стоит оставить. Нюанс: вторая служба зависит от первой.
8. WpnService и WpnUserService. Оставляем в том случае, если используете режим Киоска. Для удаления выдайте себе полные права на раздел Parameters.
· Отмонтируем реестр: reg unload hklm\mount
Смена часового пояса. В разделе system есть ещё одна настройка, которую следует проверить, — часовые пояса. Проще всего вносить сюда изменения через импорт с той системы, где уже всё настроено. Необходимый вам путь: Компьютер\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation.
Обратите внимание. В примонтированном реестре нет раздела CurrentControlSet, а есть только ControlSet001. Объяснение простое: здесь хранится предыдущая копия настроек, а в разделе *002 (на уже установленной ОС) копия с *001 до их изменения.
Вырезаем задачи телеметрии из Планировщика задач. У нас нет предвзятости к сбору телеметрии. Просто требования ИБ такие. Ну и в условиях блокировки доступов к серверам Microsoft журналы засоряются лишними сообщениями.
1. Подключаем реестр SOFTWARE:
reg load hklm\mount c:\image\mount\windows\system32\config\software
2. Переходим к разделу Компьютер\HKEY_LOCAL_MACHINE\mount\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache
3. Здесь и содержатся все задачи планировщика:
Tree — отображение задач в виде дерева.
Tasks (T) — список всех задач планировщика, но имя раздела — это guid-задачи.
Plain (P) — список простых задач.
Maintenance (M) — список задач, выполняющихся во время простоя сервера.
Logon (L) — задачи, запускаемые во время входа пользователя.
Boot (B) — задачи, запускаемые после включения сервера.
Одна и та же задача может присутствовать в разных списках, поэтому при удалении надо проверять их все. Это нужно для того, чтобы вас потом не преследовали сообщения об ошибках фантомных задач.
4. Нам не нужны следующие задачи. Название берём из Tree\Microsoft\Windows, дополнительно будем указывать id и в каких ещё списках она есть. Важное уточнение: id будет отличаться, если вы будете использовать образ другой версии Windows. Но вы и сами сможете его посмотреть в значении ключа Id нужной задачи в разделе Tree. Итак, удаляем:
a. AppID\SmartScreenSpecific (эта задача нужна для SmartScreen, если он у вас используется).
{E8FA0CF7-17EE-4F72-BC9C-51E3EDCE8C59} — L, M, T
b. Весь раздел Application Experience.
{002215B8-2308-4AC5-9832-EAF34D750B41} — P, T
{C5C76FDC-53AF-4B73-873E-F7C526A9E61E} — P, T
{D80D2131-046A-4FB7-8199-9AE6F75D7AF9} — M, P, T
{CFD41DBC-64CC-4854-928F-CD1C94C2FAF6} — M, P, T
c. Весь раздел Autocheck.
{13D743E2-A81A-4329-A305-E89FB6910940} — B, T
d. Весь раздел Customer Experience Improvement Program.
{F995780B-EE7A-416C-BFDD-FD47F13A58B4} — P, T
{33A68109-27E3-43C8-80CC-ED58F9E5AB20} — P, T
{C7CCB4E2-E335-4508-B12C-DF79BDF98720} — M, P, T
e. DiskDiagnostic\Microsoft-Windows-DiskDiagnosticDataCollector.
{38747835-C7B7-4532-BE3A-AE35E377D552} — M, P, T
f. Раздел Maintenance (на серверной Windows вам не нужны оценки производительности в попугаях, для этого есть другие средства).
{77BBAA0C-A160-41E4-9FCB-CEF74C91E6B1} — M, P, T
g. Раздел NetTrace.
{B1741409-416B-4092-AB13-BDD740F12FE5} — P, T
h. PI\Sqm-Tasks.
{775462B6-4854-4BEE-B6FF-D696F2810270} — M, P, T
i. Раздел Windows Error Reporting.
{7225215B-C1EC-4E1C-B8C4-DD97CA3BD919} — B, T
5. Наконец мы с этим закончили и можем отмонтировать куст: reg unload hklm\mount
Шаг 5: включаем/отключаем функции по запросу (FOD — Feature On Demand)
Сначала пройдёмся по списку возможностей. Рекомендуем выгрузить его в текстовый файл — так вам будет удобнее формировать команды на включение/отключение:
dism.exe /image:c:\image\mount /get-capabilities /format:table > c:\image\capabilities.txt
Not Present — модуль не установлен, Installed — установлен.
Для выключения модуля введите команду:
dism.exe /image:c:\image\mount /remove-capability /capabilityname:browser.internetexplorer~~~~0.0.11.0
Для примера использовали Internet Explorer, но вместо него берём ненужное из выгруженного ранее списка в статусе Installed.
У нас под нож пошли:
1. Языковые пакеты:
· language.handwriting~~~en-us~0.0.1.0;
· language.ocr~~~en-us~0.0.1.0;
· language.speech~~~en-us~0.0.1.0;
· language.texttospeech~~~en-us~0.0.1.0.
2. MathRecognizer~~~~0.0.1.0 (управление математическим вводом).
3. Media.WindowsMediaPlayer~~~~0.0.12.0.
4. OpenSSH.Client~~~~0.0.1.0 (в образе старая версия с уязвимостями, а для LTSC обновления не выпускалось, проще отдельно поставить при необходимости).
5. XPS.Viewer~~~~0.0.1.0 (кто-то им пользуется вообще? Если потребуется — можно будет включить потом отдельно).
Да, мы перечислили все функции, включённые по умолчанию, кроме Language.Basic~~~en-US~0.0.1.0, но она нам нужна.
Для включения похожая команда:
dism.exe /image:c:\image\mount /add-capability /capabilityname:language.basic~~~ru-ru~0.0.1.0
Конкретно эта команда, кстати, вернёт ошибку, так как в en-образе нет других языков, кроме английского. Их добавляем отдельно другим способом:
· скачиваем образ LanguagePack;
· монтируем в виртуальный привод;
· поскольку нам нужен только один файл Microsoft-Windows-Server-Language-Pack_x64_ru-ru.cab, то копируем его в папку msu;
· применяем команду (мы с ней раньше сталкивались — этот пакет, кстати, при необходимости можно внедрять при обновлении):
dism.exe /image:c:\image\mount /add-package /packagepath:c:\image\msu\microsoft-windows-server-language-pack_x64_ru-ru.cab
Если после этой команды вы снова выгрузите список возможностей, то увидите, что теперь там текст на русском языке. Но этого недостаточно. В установленной системе делаем следующее:
1. Жмём Win+X или правой клавишей мыши по Пуску, выбираем Settings -> Time & Language -> Language -> Add a language.
2. Находим русский язык в списке:
3. Жмём Next — Install.
Эту операцию можно проделывать и без внедрения русского языка в образ. Даже при отсутствии интернета появится русская раскладка — просто система будет пытаться скачивать отсутствующие компоненты. Если вас не напрягает:
Шаг 6: включаем/удаляем дополнительные компоненты
Перейдём к дополнительным компонентам, которые можно активировать в образе. Или удаляем их из образа, чтобы сэкономить место.
1. Выгружаем список всех доступных компонентов:
dism /image:c:\image\mount /get-features /format:table > c:\image\features.txt
2. Для просмотра документа выбираем редактор, который позволяет выставить кодировку OEM866 (если вы внедрили в образ русский язык). У компонента может быть один из трёх статусов: Включён, Отключён, Отключён с удалением полезных данных.
Для третьего статуса: для его повторной установки потребуется указывать источник установки (в образе установочных файлов уже нет).
3. Обычно мы устанавливаем TelnetClient. Этот способ проверки доступности tcp-портов известен пользователям намного лучше, чем powershell-командлет TestNetworkConnection (tnc): dism /image:c:\image\mount /enable-feature /featurename:telnetclient
4. Так отключаем ненужные компоненты:
dism /image:c:\image\mount /disable-feature /featurename:mediaplayback
5. Есть ещё три необязательных для работы сервера компонента, поэтому удаляем или оставляем их на ваше усмотрение:
· WindowsServerBackupSnapin;
· Printing-XPSServices-Features;
· SystemDataArchiver.
6. C дополнительным ключом /remove переводим компонент в стадию Отключён с удалением полезных данных, тем самым экономя место: dism /image:c:\image\mount /disable-feature /featurename:windows-defender /remove
Таким нехитрым способом мы облегчаем образ, оставив только установленные компоненты. Но мы так делать, разумеется, не будем, поскольку образ затачивается не под конкретный сервер. Если вы пойдёте по этому пути, то определить, какие компоненты придётся устанавливать с родного образа, можно вот так:
1. В оснастке Server Manager (Диспетчер серверов) выберите Manage — Remove Roles and Features (Управление — удалить роли и компоненты)
2. В списке ролей/компонентов у пунктов, удалённых из образа, нет надписи «Not installed» («Не установлено») при отсутствующей галочке.
Ещё один способ уменьшить образ (и итоговый размер установки Windows) — подчистить WinSxS: dism /image:c:\image\mount /cleanup-image /startcomponentcleanup /resetbase
Эту операцию можно проделать и на уже установленной системе. Только не забудьте указать правильный путь до dism-образа. Для включенной ОС это ключ /online. Из негативных последствий: нельзя откатить обновления и предыдущие версии установленных компонентов и программ. Но в образе и на свежей системе нам это и не нужно.
До проведения этой операции папка mount у нас разбухла примерно до 23 Гбайт. После — уменьшилась до 17,5 Гбайт.
Ещё есть параметр /get-provisionedappxpackages – он нужен для получения списка плиточных приложений. Если же вам надо их удалить, то используем параметр /remove-provisionedappxpackage.
В Windows Server 2019 их нет, поэтому мы не можем показать процесс на живом примере.
Финишная прямая, или Завершаем работу с образом
Здесь шагов не будет. Тем не менее пару команд вам всё-таки предстоит сделать.
Проверим
целостность: dism /image:c:\image\mount /cleanup-image /scanhealth
Отмонтируем образ: dism /unmount-image /mountdir:c:\image\mount /commit
Итоговый размер install.wim — 5,9 Гбайт (в нашем случае). Есть один способ сделать его ещё меньше — конвертация в формат esd:
dism /export-image /sourceimagefile:c:\image\iso\sources\install.wim /sourceindex:1 /destinationimagefile:c:\image\iso\sources\install.esd /compress:recovery
В итоге файл получился размером 3,23 Гбайт.
Формат esd даёт вам не только преимущества в виде меньшего размера, но и недостатки:
- Его нельзя смонтировать в папку, поэтому предварительно приходится конвертировать в wim: dism /export-image /sourceimagefile:c:\image\iso\sources\install.esd /sourceindex:1 /destinationimagefile:c:\image\iso\sources\install.wim
- Ставится только на диск с разметкой GPT.
Отступление. Необходимо указать индекс — сразу все редакции сжать не получится, их надо добавлять в тот же esd-файл отдельной командой. Есть несколько степеней сжатия, но recovery сжимает лучше всего. На выходе получили файл install.esd размером чуть больше 3 Гбайт (у нас одна редакция). Степень сжатия потрясающая.
Старый install.wim лучше пока не удалять. Если вам потребуется переделывать что-то, то этап конвертации из esd в wim уже не нужен. Но вынести за пределы папки iso надо (например, в папку C:\image\backup), потому что настала пора упаковать всё это в установочный образ диска. Хотя, если у вас установка будет с флешки, достаточно скопировать на неё все файлы как есть и не надо делать из неё загрузочную (только отформатировать в FAT32). Конвертируем в iso, для этого сначала в консоли выполняем переход в папку с утилитой osdimg (иначе в команде пришлось бы указывать полные пути до файлов): cd c:\program files (x86)\windows kits\10\assessment and deployment kit\deployment tools\amd64\oscdimg
Теперь выполняем саму команду: oscdimg -bootdata:2#p0,e,befisys.bin#pEF,e,betfsboot.com -u1 -udfver102 c:\image\iso c:\image\w19mar24en.iso
Итого: файл получился размером около 4 Гбайт — это больше гигабайта разницы с официальным образом, где нет актуальных обновлений, .Net Framework 4.8 и русского языка.
Телодвижения после установки ОС
Итак, мы поставили с подготовленного образа систему и обнаружили, что что-то забыли настроить. Не беда! На выручку приходит Sysprep.
1. На установленной ОС настраиваем, устанавливаем, удаляем всё, что требуется. В общем, делаем всё, что мы делали долго и через консоль/реестр, только быстро и с интерфейсом Windows (немного душноты: мы не зря советовали вам до конца дочитать).
2. К виртуальной машине (если всё делается на ней) монтируем второй диск. По нашим оценкам, 10 Гбайт будет достаточно. На этом этапе создаём раздел на диске. Примечание: в противном случае потом придётся делать через diskpart.
3. Открываем в проводнике C:\windows\system32\sysprep.
4. Запускаем Sysprep.exe. В появившемся окне выставляем следующие опции:
5. В результате будут удалены все привязки к текущему железу, id и прочие платформозависимые штуки — система будет подготовлена к переносу в другое место.
6. Монтируем загрузочный диск (можно наш переделанный установочный) и перезагружаемся с зажатой клавишей Shift. Иначе система снова установит необходимые драйверы, прочие платформозависимые вещи и перезагрузится в режиме аудита.
7. На первом установочном экране (выбор языка, региона, языка раскладки клавиатуры) жмём Shift+F10 для вызова командной строки.
8. Запускаем diskpart и смотрим, какая буква присвоена нашему второму диску:
9. Выходим из diskpart и выполняем команду: dism /capture-image /capturedir:c:\ /imagefile:d:\install.wim /name:w19mar24en /description:”Windows Server 2019 Standard with March 2024 Updates and NetFx48 with February 2024 Updates, English version.” /compress:max
Вы можете задать свой путь до файла, имя файла, имя и описание. Но помните, что для экранирования символов (пробел, слеш, прочие символы) весь текст надо заключать в кавычки.
Захват в образ esd не поддерживается.
У нас файл получился размером 5,3 Гбайт.
Последнее примечание про полезные параметры:
· /apply-image — применение образа к диску (то, что делает установщик Windows). Можно, например, отформатировать диск С через открытую командную строку (format c: /fs:ntfs) и из нашего нового install.wim восстановить всё как было (заодно и проверим корректность сформированного файла): dism /apply-image /imagefile:d:\install.wim /applydir:c:\ /index:1
· Но боже упаси вас форматировать весь диск — так вы потеряете загрузочный раздел, который восстановить, конечно, можно, но дольше, и это уже выходит за рамки данной статьи. /append-image — добавление образов в файл (дополнительных редакций или каких угодно ещё других образов). Не рекомендуется при сильно отличающихся, так как итоговый файл будет распухать (например, русская и английские версии в одном файле).
После этого вы вольны делать что угодно с получившимся файлом. Лично мы его конвертировали в esd и создали новый файл iso — теперь можно устанавливать полностью готовую ОС за 10–15 минут. Ну или обновлять с предыдущих версий (2012–2016). На этом всё – теперь вы можете самостоятельно и более подробно изучать тему создания собственных сборок. Мы, например, намеренно не стали рассказывать про файл ответов. Для этого напишем другой текст.