Test-SectorSizeForMssql #
ÜBERSICHT #
Prüft die Volume-Sektorgrößen auf SQL-Server-Kompatibilität und kann optional NVMe-4K-Emulation per Registry aktivieren/deaktivieren (mit optionalem Neustart).
SYNTAX #
Test-SectorSizeForMssql [[-DriveLetter] <string[]>] -Enable4kEmulation -Disable4kEmulation
[-Restart] [-ForceRestart] [-More] [<CommonParameters>]
BESCHREIBUNG #
SQL Server hat Probleme, wenn ein Volume physische Sektorgrößen (Atomicity/Performance) größer als 4096 Bytes meldet. Diese Funktion:
- liest Datenträger-Basisdaten über Get-Disk (u.a. LogicalSectorSize/PhysicalSectorSize)
- ermittelt Volume-Sektorgrößen robust über die Win32-API GetFileInformationByHandleEx (FileStorageInfo), ohne fsutil und ohne Text-Parsing
- bewertet pro Volume, ob es für SQL sektorgrößenseitig kompatibel ist (SqlRelevantPhysicalSectorBytes <= 4096)
- kann optional den Registry-Wert “ForcedPhysicalSectorSizeInBytes” unter stornvme setzen/entfernen, um 4K-Emulation zu erzwingen
- kann optional danach neu starten (nur wenn tatsächlich eine Änderung erfolgt ist)
Hinweis:
- Es werden standardmäßig nur Volumes mit Laufwerksbuchstaben geprüft (Get-Volume mit DriveLetter). Mountpoints ohne DriveLetter sind in der aktuellen Variante nicht enthalten.
- SectorInfoError/SectorInfoErrorType/SectorInfoWin32Code sind Diagnosefelder, falls die API-Abfrage für ein Volume fehlschlägt (kein Disk-Health-Indikator).
PARAMETER #
-Enable4kEmulation #
Type: switch
Mandatory: True
Aktiviert die NVMe-4K-Emulation, indem der MultiString-Registry-Wert HKLM:\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device\ForcedPhysicalSectorSizeInBytes um den Eintrag “* 4095” ergänzt bzw. angelegt wird. Ein Neustart ist erforderlich, damit Windows die Sektorgrößen entsprechend meldet.
-Disable4kEmulation #
Type: switch
Mandatory: True
Deaktiviert die NVMe-4K-Emulation, indem der Eintrag “* 4095” aus “ForcedPhysicalSectorSizeInBytes” entfernt wird. Wenn danach keine Einträge mehr übrig sind, wird der Registry-Wert entfernt. Ein Neustart ist erforderlich, damit Windows wieder die nativen Werte meldet.
-Restart #
Type: switch
Startet den Rechner nach einer erfolgreichen Enable/Disable-Änderung automatisch neu. Es wird nur neu gestartet, wenn tatsächlich eine Änderung vorgenommen wurde.
-ForceRestart #
Type: switch
Erzwingt den Neustart, wenn zusammen mit -Restart verwendet.
-DriveLetter #
Type: string[]
Optional: Einschränkung auf bestimmte Laufwerksbuchstaben (z.B. C, D). Standard: alle Volumes mit DriveLetter.
AUSGABEN #
System.Management.Automation.PSCustomObject
Gibt Objekte vom Typ “Nvme4kEmulation” (Status der Registry-Emulation) und “VolumeSectorInfo” (Sektorinfos pro Volume) zurück.
BEISPIELE #
# Analyse aller Volumes (mit Laufwerksbuchstaben)
Test-SectorSizeForMssql
# Nur Volumes anzeigen, die sektorgrößenseitig nicht SQL-kompatibel sind
Test-SectorSizeForMssql |
Where-Object { $_.ObjectType -eq 'VolumeSectorInfo' -and ($false -eq $_.IsSqlSectorCompatible) }
# NVMe-4K-Emulation aktivieren, Analyse anzeigen, danach Neustart (falls Änderung erfolgte)
Test-SectorSizeForMssql -Enable4kEmulation -Restart
# NVMe-4K-Emulation deaktivieren, Analyse anzeigen, danach Neustart erzwingen (falls Änderung erfolgte)
Test-SectorSizeForMssql -Disable4kEmulation -Restart -ForceRestart
# Nur C: und D: prüfen
Test-SectorSizeForMssql -DriveLetter C, D