Vor kurzem musste ich ein paar VMware vSphere VMs mit sehr sehr vielen virtuellen Festplatten erstellen. Die Anwendung in den virtuellen Maschinen erforderte ein spezielles Festplattenlayout und eine passende Datastore-Platzierung der virtuellen Festplatten, um die optimale Performance zu gewährleisten. Um die Konfiguration der VMware vSphere VMs bezüglich des Festplattenlayouts zu überprüfen. habe ich mir einen entsprechenden PowerCLI VM Disk Report erstellt,
Ein einfaches Beispiel für eine Anwendung, die von einem speziellen Festplattenlayout und einer optimalen Datastore-Platzierung der virtuellen Disks profitiert, ist ein Microsoft SQL Server. Durch die Platzierung von „User DB“ und „User LOG“ auf getrennten Laufwerken kann die I/O-Aktivität gleichzeitig für die Daten und die Protokolldateien erfolgen.
Workload | SCSI ID | Datastore |
---|---|---|
OS | 0:0 | Datastore 01 |
SQL System Root | 0:1 | Datastore 01 |
SQL Temp | 1:0 | Datastore 02 |
SQL User DB | 2:0 | Datastore 03 |
SQL User LOG | 3:0 | Datastore 04 |
Mi Hilfe des PowerCLI VM Disk Report kann der Speicherort jeder virtuellen Festplatte und die konfigurierte SCSI ID sehr einfach verifiziert werden.

PowerCLI VM Disk Report
Eigentlich ist die Get-VMDisk Funktion sehr simpel, es ist mehr oder weniger eine für diesen Zweck optimierte Darstellung von Eigenschaften der virtuellen Disks. Da ich diesen Bericht aber sehr häufig benötige, macht eine PowerShell Funktion, die in meinem PowerShell Profil gespeichert ist, für mich absolut Sinn.
function Get-VMDisk { [CmdletBinding()] param( [Parameter(Mandatory=$True, ValueFromPipeline=$True, Position=0, HelpMessage = "VMs to process")] [ValidateNotNullorEmpty()] [VMware.VimAutomation.ViCore.Impl.V1.Inventory.InventoryItemImpl[]] $myVMs ) Process { $View = @() foreach ($myVM in $myVMs){ $VMDKs = $myVM | get-HardDisk foreach ($VMDK in $VMDKs) { if ($VMDK -ne $null){ [int]$CapacityGB = $VMDK.CapacityKB/1024/1024 $Report = [PSCustomObject] @{ Name = $myVM.name PowerState = $myVM.PowerState Datastore = $VMDK.FileName.Split(']')[0].TrimStart('[') VMDK = $VMDK.FileName.Split(']')[1].TrimStart('[') StorageFormat = $VMDK.StorageFormat CapacityGB = $CapacityGB Controller = $VMDK.ExtensionData.ControllerKey -1000 Unit = $VMDK.ExtensionData.UnitNumber } $View += $Report } } } $View | Sort-Object VMname, Controller, Unit } }
Robert van den Nieuwendijk hat ein sehr gutes PowerShell Skript geschrieben, um einen Report zu erhalten, der die SCSI ID den Windows-Laufwerksbuchstaben zuordnet. Für Linux-basierte Betriebssysteme verwende ich meist den Befehl „lsscsi -v“, um die SCSI ID auf die Disks abzubilden.
Die aktuelle Version der Get-VMDisk Funktion ist auch in meinem vSphere Modules Github Repository zu finden.