Optimalizované IT - portál pro IT pro komunitu

Geek Deployment: Windows PE, příprava disku a aplikace image - bonus VHDX

Vytisknout E-mail

Geek Deployment: Windows PE, příprava disku a aplikace image - bonus VHDX - 2.5 out of 5 based on 2 votes
1 1 1 1 1 1 1 1 1 1 Rating 2.75 (2 Votes)

imageKdo si hraje, nezlobí Veselý obličej v prvním díle “Geek deploymentu” představím možnosti přípravy pevného disku a aplikaci image.

Příprava disku v dnešní době není zcela jednoznačná, v porovnání s Windows 7. Windows 8, 8.1, 10 podporují možnosti tzv. UEFI bootu, kde je rozložení diskových oddílů rozlišné, ve srovnání s tradičním BIOS boot. Pro konfiguraci diskových oddílů a práci s images je možné využít buď standardní nástroje, kterými jsou DISKPART, DISM nebo je možné pro drtivou většinu akcí využít PowerShell, který je k dispozici i ve Windows Preinstallation Environment (od verze pro Windows 8). Pro většinu akcí popisovaných v tomto článku není potřeba instalace Windows AIK / ADK.

Windows Preinstallation Environment

Prvním krokem, pokud hovoříme o nasazení OS na nový počítač je příprava Windows PE. Windows PE jsou součástí Windows AIK/ADK, je tedy nutné stáhnout a instalovat. Windows PE připravíme spuštěním z “Windows Deployment Command Prompt” příkazu copype.cmd, zvolíme odpovídající bitovou architekturu.

Pokud budete nasazovat počítače se standardním BIOS boot, doporučuji použít Windows PE x86 - je možné použít i pro nasazení amd64 OS. V případě nasazení UEFI boot, musí bitová architektura Windows PE a cílového OS odpovídat (x86>x86 a amd64>amd64)

copype amd64 c:\winpe

Jakmile jsou soubory zkopírované, je možné připojit Windows PE image a upravovat

Dism /Mount-Image /ImageFile:"C:\WinPE\media\sources\boot.wim" /index:1 /MountDir:"C:\WinPE\mount" 

nyní je možné přidávat jednotlivé balíčky do Windows PE, pro práci s images a deploymentem jsou nutné minimálně tyto balíčky:

Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-NetFx.cab" 
Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-WMI.cab"
Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-Scripting.cab"
Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-PowerShell.cab"
Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-StorageWMI.cab"
Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-DismCmdlets.cab"

I pokud pracujeme s anglickou verzí, je nutné přidat jazykové definice pro angličtinu, neboť by některé PowerSell příkazy končily chybou resp. příkaz není proveden a není zobrazena chyba. Použitím výše uvedených  balíčků jsou přidány pouze “Language Neutral” komponenty a některé příkazy jsou spuštěny a následně zrušeny bez chybové hlášky.

Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\en-us\WinPE-NetFx_en-us.cab" 
Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\en-us\WinPE-WMI_en-us.cab"
Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\en-us\WinPE-Scripting_en-us.cab"
Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\en-us\WinPE-PowerShell_en-us.cab"
Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\en-us\WinPE-StorageWMI_en-us.cab"
Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\en-us\WinPE-DismCmdlets_en-us.cab"

Jakmile máte připravený image Windows PE, je nutné odpojit připojený image a uložit změny do tohoto image:

Dism /Unmount-WIM /MountDir:c:\winpe\mount /Commit

Po odpojení image je možné vytvořit např. ISO soubor pomocí příkazu:

MakeWinPEMedia /ISO C:\WinPE C:\WinPE\WinPE_a64.iso

tímto je příprava Windows PE dokončena, je možné použít pro startování ve virtualizaci, vypálit na CD, rozbalit na USB.

image

BIOS Boot

Po nastartování Windows PE je možné přistoupit k přípravě disku pro nasazení. Tradiční rozložení disku pro Windows 7 - nejméně 1 partition, v případě využití BitLocker pak 2 partition.

Jednoduché rozložení disku pomocí DISKPART:

select disk 0 
clean
create partition primary
format quick fs=ntfs label="Windows"
active
assign letter=C
exit

Tato sada příkazů vybere disk 0, který je celý smazán!! Je možné uložit do .txt souboru a použít jako script pomocí DISKPART /s.

Rozšířená konfigurace partitions, kdy je plánované využití BitLocker, tedy je nutná boot partition:

select disk 0 
clean
create partition primary size=100
format quick fs=ntfs label="System"
active
assign letter=S
create partition primary
format quick fs=ntfs label="Windows"
assign letter=W
exit

V tomto případě je vytvořena 100MB partition, následně využívaná jako boot a zbytek disku je využit pro Operační systém.

Identické konfigurace docílíme pomocí PowerShell následovně:

Get-Disk 0 | Clear-Disk -RemoveData -RemoveOEM -Confirm:$False 
Initialize-Disk 0 -PartitionStyle MBR -Confirm:$false
New-Partition -DiskNumber 0 -Size 100MB -DriveLetter S | Format-Volume -FileSystem NTFS -NewFileSystemLabel System
New-Partition -DiskNumber 0 -UseMaximum -DriveLetter W | Format-Volume -FileSystem NTFS -NewFileSystemLabel Windows

Jakmile je připravený disk, je možné přejít na aplikaci image.

UEFI Boot

UEFI boot přináší možnosti SecureBoot a rychlejšího startu počítače, podporu GPT partitions, nicméně konfigurace disku je o něco složitější.

Je možné využít minimální konfiguraci za využití Systémové, MSR a partition pro operační systém. Typické rozložení pak vypadá následovně:

image

Systémová Partition - velikost 100MB, pokud vlastníte disky, typicky SSD, s podporou Advanced Format, tak použít velikost 260MB

MSR partition - bootovací partition, obvykle 128MB (kvůli zarovnání disku)

OS partition - zbytek disku

Plná konfigurace pro UEFI boot pak přidává 2 další partition - WindowsRE a Image pro obnovu systému. V tomto případě pak rozložení vypadá následovně:

image

Pojďme tedy konfigurovat disky:

Všechny uváděné příklady jsou DESTRUKTIVNÍ aniž by se dotazovaly na potvrzení!

UEFI minimal - DISKPART

select disk 0 
clean
convert gpt
create partition efi size=100
format quick fs=fat32 label="System"
assign letter="S"
create partition msr size=128
create partition primary
format quick fs=ntfs label="Windows"
assign letter="W"

V tomto případě je disk vymazán, konvertován na GPT a vytvořeny 3 diskové oddíly. Pouze dvěma je přiřazeno písmenko.

UEFI minimal - WSIM

Diskové oddíly je také možné konfigurovat v rámci odpovědního souboru .xml. Odpovídající část XML vypadá následovně:

<DiskConfiguration> 
  <Disk wcm:action="add">
    <DiskID>0</DiskID>
    <WillWipeDisk>true</WillWipeDisk>
    <CreatePartitions>
      <!-- EFI system partition (ESP) -->
      <CreatePartition wcm:action="add">
        <Order>1</Order>
        <Type>EFI</Type>
        <Size>100</Size>
      </CreatePartition>
      <!-- Microsoft reserved partition (MSR) -->
      <CreatePartition wcm:action="add">
        <Order>2</Order>
        <Type>MSR</Type>
        <Size>128</Size>
      </CreatePartition>
      <!-- Windows partition -->
      <CreatePartition wcm:action="add">
        <Order>3</Order>
        <Type>Primary</Type>
        <Extend>true</Extend>
      </CreatePartition>
    </CreatePartitions>
</Disk>
<WillShowUI>OnError</WillShowUI>
</DiskConfiguration>

I v tomto případě je disk inicializován - pomocí části WillWipeDisk=true

UEFI minimal - PowerShell

Konfigurovat je možné také pomocí PowerShell, zde sada příkazů bude vypadat následovně:

Get-Disk 0 | Clear-Disk -RemoveData -RemoveOEM -Confirm:$False 
Initialize-Disk 0 -PartitionStyle GPT -Confirm:$false
$sysPart = New-Partition -DiskNumber 0 -GptType '{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}' -Size 100MB -DriveLetter S
"@
select disk 0
select partition $sysPart.PartitionNumber
format quick fs=fat32 label=System
exit
@" | diskpart
New-Partition -DiskNumber 0 -GptType '{e3c9e316-0b5c-4db8-817d-f92df00215ae}' -Size 128MB
New-Partition -DiskNumber 0 -UseMaximum -DriveLetter W | Format-Volume -FileSystem NTFS -NewFileSystemLabel Windows -ShortFileNameSupport $False -Confirm:$false

I v tomto případě je disk smazán a inicializován. Všimněte si části diskpart - PowerShell commandlety nepodporují formátování partitions označených jako systémových. Výsledek všech tří předchozích možností je naprosto identický.

UEFI full - DISKPART

Diskpart je možné využít i pro plnou konfiguraci UEFI boot, zde je možné si všimnout konfigurací atributů, které zajistí skrytí partitions ze správce disků a tím se stanou pro uživatele neviditelné - nastavení atributu 0x8000000000000001.

select disk 0 
clean
convert gpt
rem == 1. Windows RE tools partition ===============
create partition primary size=300
format quick fs=ntfs label="Windows RE tools"
assign letter="T"
set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
gpt attributes=0x8000000000000001
rem == 2. System partition =========================
create partition efi size=100
rem  NOTE: For Advanced Format 4K drives, change this value to size = 260
format quick fs=fat32 label="System"
assign letter="S"
rem == 3. Microsoft Reserved (MSR) partition =======
create partition msr size=128
rem == 4. Windows partition ========================
rem ==    a. Create the Windows partition ==========
create partition primary
rem ==    b. Create space for the recovery image ===
shrink minimum=15000
rem       ** NOTE: Update this size to match the size of the recovery image
rem ==    c. Prepare the Windows partition =========
format quick fs=ntfs label="Windows"
assign letter="W"
rem === 5. Recovery image partition ================
create partition primary
format quick fs=ntfs label="Recovery image"
assign letter="R"
set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
gpt attributes=0x8000000000000001
exit

UEFI full - WSIM

Při využití odpovědního souboru .xml bude odpovídající část pro plnou konfiguraci diskových oddílů takto:

<DiskConfiguration> 
  <Disk wcm:action="add">
    <DiskID>0</DiskID>
    <WillWipeDisk>true</WillWipeDisk>
    <CreatePartitions>
      <!-- WinRE tools partition -->
      <CreatePartition wcm:action="add">
        <Order>1</Order>
        <Type>Primary</Type>
        <Size>300</Size>
      </CreatePartition>
      <!-- EFI system partition (ESP) -->
      <CreatePartition wcm:action="add">
        <Order>2</Order>
        <Type>EFI</Type>
        <Size>100</Size>
      </CreatePartition>
      <!-- Microsoft reserved partition (MSR) -->
      <CreatePartition wcm:action="add">
        <Order>3</Order>
        <Type>MSR</Type>
        <Size>128</Size>
      </CreatePartition>
      <!-- Windows partition -->
      <CreatePartition wcm:action="add">
        <Order>4</Order>
        <Type>Primary</Type>
        <Size>75000</Size>
      </CreatePartition>
      <!-- Recovery image partition -->
      <CreatePartition wcm:action="add">
        <Order>5</Order>
        <Type>Primary</Type>
        <Size>15000</Size>
      </CreatePartition>
    </CreatePartitions>
  </Disk>
  <WillShowUI>OnError</WillShowUI>
</DiskConfiguration>

UEFI full - PowerShell

Sada příkazů pro vytvoření plné konfigurace oddílů pro UEFI

$disk = Get-Disk 0 
$disk | Clear-Disk -RemoveData -RemoveOEM -Confirm:$False | out-null
$WinPartition = $disk.Size-300MB-260MB-128MB-4GB
Initialize-Disk 0 -PartitionStyle GPT  -Confirm:$false
New-Partition -DiskNumber 0 -GptType '{de94bba4-06d1-4d40-a16a-bfd50179d6ac}' -Size 300MB -DriveLetter T | Format-Volume -FileSystem NTFS -NewFileSystemLabel WindowsRE -ShortFileNameSupport $False -Confirm:$false  | Out-Null
$sysPart = New-Partition -DiskNumber 0 -GptType '{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}' -Size 260MB -DriveLetter S
$partNumber = $sysPart.PartitionNumber
"@
select disk 0
select partition $partNumber
format quick fs=fat32 label=System
exit
@" | diskpart
New-Partition -DiskNumber 0 -GptType '{e3c9e316-0b5c-4db8-817d-f92df00215ae}' -Size 128MB  | Out-Null
New-Partition -DiskNumber 0 -GptType '{ebd0a0a2-b9e5-4433-87c0-68b6b72699c7}' -Size $WinPartition -DriveLetter C | Format-Volume -FileSystem NTFS -NewFileSystemLabel Windows -ShortFileNameSupport $False -Confirm:$false | Out-Null
$RecoveryPartition = New-Partition -DiskNumber 0 -GptType '{de94bba4-06d1-4d40-a16a-bfd50179d6ac}' -UseMaximumSize
$RecoveryPartition | Format-Volume -FileSystem NTFS -NewFileSystemLabel "WinRecovery" -confirm:$false
$partNumber = $RecoveryPartition.PartitionNumber
@"
select disk 0
select partition $partNumber
gpt attributes=0x8000000000000001
exit
"@ | diskpart

Zde si můžete všimnout dalšího využití diskpart v PowerShell a to konfigurace partition jako skryté - nastavení atributu 0x8000000000000001.

Aplikace image

Aplikace image - můžeme říci i rozbalení image - je to fáze, kterou při běžné instalaci zařizuje setup.exe. Pokud chcete proces urychlit, je možné image rozbalit ručně. Pro tyto činnosti použijte buď DISM (dříve i IMAGEX) nebo PowerShell.

Při aplikaci image je image rozbalován vždy na partition určenou pro operační systém - ve všech předchozích příkladech W:. Také vycházejme z předpokladu, že instalační DVD,… je dostupné na písmenku D:

Příkaz pro DISM:

Dism /Apply-Image /imagefile:D:\sources\install.wim /index:1 /applydir:w:

Příkaz pro PowerShell:

Expand-WindowsImage -ImagePath "D:\sources\install.wim" -ApplyPath W: -Index 1

Nastavení boot operačního systému

Po rozbalení image operačního systému je nutné zajistit, aby OS startoval na námi vytvořených diskových oddílech - zde se příkazy liší dle použitého rozložení disků a BIOS/UEFI boot. Pro nastavení bootu je využíván příkaz BCDBOOT:

BIOS - jedna partition:

bcdboot w:\windows

BIOS - se systémovou partition:

bcdboot w:\windows /s s: /f BIOS

UEFI minimal a full:

bcdboot w:\windows /s s: /f uefi

nyní, pokud se nacházíme v prostředí Windows PE stačí restartovat počítač, bude spuštěna instalace OS. Restart provedete pomocí nástroje WPEUTIL, díky tomu jsou korektně vyprázdněny všechny souborové cache.

wpeutil reboot

Příprava VHDX souboru

to co jsme se naučili ve výše uvedených příkladech můžeme například použít pro přípravu nového VHDX souboru, který následně využijeme v Hyper-V. Krátký PowerShell kód:

#Vythořit nový VHDX soubor o velikosti 25GB 
New-VHD -Path D:\Hyper-V\demo.vhdx -Dynamic -SizeBytes 25GB
#Připojit VHDX soubor
Mount-DiskImage -ImagePath D:\Hyper-V\demo.vhdx
$vhd = (Get-DiskImage -ImagePath D:\Hyper-V\demo.vhdx).Number
#Inicializovat VHDX soubor jako GPT
Initialize-Disk -Number $vhd -PartitionStyle GPT
#Vytvoření systémové partition, formát pomocí DISKPART
$sysPart = New-Partition -DiskNumber $vhd -GptType '{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}' -Size 260MB
$PartNumber = $sysPart.PartitionNumber
"@
select disk $vhd
select partition $PartNumber
format quick fs=fat32 label=System
assign letter=S
exit
@" | diskpart
#Vytvoření MSR partition
New-Partition -DiskNumber $vhd -GptType '{e3c9e316-0b5c-4db8-817d-f92df00215ae}' -Size 128MB
#Vytvoření partition pro OS
New-Partition -DiskNumber $vhd -UseMaximum -DriveLetter W | Format-Volume -FileSystem NTFS -NewFileSystemLabel Windows -ShortFileNameSupport $False -Confirm:$false
#Připojení ISO souboru s instalací OS
$isoImage = Mount-DiskImage -ImagePath D:\Download\W10-9926.ISO -PassThru
$ImageLetter = ($isoImage | Get-Volume).DriveLetter
#Aplikuj Windows Image
Expand-WindowsImage -ImagePath "$($ImageLetter):\sources\install.wim" -ApplyPath W: -Index 1
#Nastavení boot
invoke-expression ("w:\windows\system32\bcdboot.exe w:\windows /s s: /f ALL /l en-us /v")
#Odpojení ISO a VHDX
Dismount-DiskImage -ImagePath D:\Download\W10-9926.ISO
Dismount-DiskImage -ImagePath D:\Hyper-V\demo.vhdx

Tím je vytvořený VHDX soubor, který je možné připojit do Generation 2 VM. Po startu je započata instalace OS.

image

Reference:
GUID diskových oddílů

New-Partition commandlet - Použití GUID při vytváření oddílů

O autorovi...
Ondřej Výšek
Author: Ondřej VýšekWebsite: www.kpcs.cz
Microsoft MVP

Přihlašovací formulář