Bei Standardinstallationen von Windows Server 2022 befindet sich hinter der Systempartition mit dem Windowsverzeichnis noch eine Recovery-Partition. Diese Recovery-Partition verhindert bei einer Vergrößerung der Disk, was bei virtuellen Systemen nicht ungewöhnlich ist, die Vergrößerung des Dateisystems.
Dafür ein kostenpflichtiges Tool zu kaufen, schien mir unnötig. Hier ein PowerShell-Script, dass die Recovery-Partition löscht, die Systempartition vergrößert und die Recovery-Partition dahinter wieder neu anlegt.
###########################################
## Resize System Partition and Re-Create ##
## Recovery Partition ##
###########################################
Param (
$RecoveryPartitionSize = 600,
$RecoveryDriveLetter = "R"
)
## Disable Recovery Environment
reagentc /disable
If (!(Test-Path -Path "c:\windows\system32\Recovery\WinRe.wim")) {
If (!(Test-Path -Path "c:\install\Recovery\WindowsRE\WinRe.wim")) {
Write-Host -ForegroundColor red "WinRe.wim not found in C:\Windows\System32\Recovery or C:\INSTALL\Recovery\WindowsRE!"
break
} else { $RecoveryPath = "c:\install\Recovery\WindowsRE\WinRe.wim" }
} else { $RecoveryPath = "c:\windows\system32\Recovery\WinRe.wim" }
## Find Recovery Partition and delete it
Write-Host -ForegroundColor yellow "Deleting Recovery Partition ..."
$RecoveryPartition = Get-Partition | Where-Object { $_.Type -eq "Recovery" }
Remove-Partition -DiskNumber $RecoveryPartition.DiskNumber -PartitionNumber $RecoveryPartition.PartitionNumber -Confirm:$false
## Find System Partition and get possible Sizes
Write-Host -ForegroundColor yellow "Checking possible Sizes of System Partition ..."
$SystemPartion = Get-Partition -DriveLetter c
$SystemPartitionSizes = Get-PartitionSupportedSize -DiskNumber $SystemPartion.DiskNumber -PartitionNumber $SystemPartion.PartitionNumber
## Calculate maximum possible Size minus Size for the new Recovery Partition
$NewSize = $SystemPartitionSizes.SizeMax - $RecoveryPartitionSize * 1024 * 1024
## Resize System Partition
Write-Host -ForegroundColor green "Resizing System Partition ..."
Resize-Partition -DiskNumber $SystemPartion.DiskNumber -PartitionNumber $SystemPartion.PartitionNumber -Size $NewSize
## Rebuild Recovery Partition
Write-Host -ForegroundColor green "Rebuilding Recovery Partition ..."
$drives = Get-PSDrive -PSProvider filesystem
if ($drives.Name -Contains $RecoveryDriveLetter) {
$FindLetter = [int][char]"D"
While ($drives.Name -Contains [char]$FindLetter) {
$FindLetter ++
}
$RecoveryDriveLetter = [char]$FindLetter
}
New-Partition -DiskNumber $SystemPartion.DiskNumber -UseMaximumSize -GptType "{de94bba4-06d1-4d40-a16a-bfd50179d6ac}" -DriveLetter $RecoveryDriveLetter
$RecoveryPartition = Get-Partition | Where-Object { $_.Type -eq "Recovery" }
Format-Volume -FileSystem NTFS -Partition $RecoveryPartition
New-Item -Type Directory -Path "$($RecoveryDriveLetter):\Recovery\WindowsRE\"
Copy-Item -Path $RecoveryPath -Destination "$($RecoveryDriveLetter):\Recovery\WindowsRE\"
reagentc /setreimage /path "$($RecoveryDriveLetter):\Recovery\WindowsRE\"
reagentc /enable
Write-Host -ForegroundColor green "Cleaning up."
Das Script erwartet ein „WinRE.wim“ in „C:\Windows\System32\Recovery“ oder „C:\INSTALL\Recovery\WindowsRE“.
Sollte das Script statt der Recovery- die Systempartition löschen, trägt der Ausführende selbst die Verantwortung dafür – klar, oder?