Skript – PowerCLI VM Disk Report

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.

WorkloadSCSI IDDatastore
OS0:0Datastore 01
SQL System Root0:1Datastore 01
SQL Temp1:0Datastore 02
SQL User DB2:0 Datastore 03
SQL User LOG3:0Datastore 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

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
    }
}

Note:
Die Funktion funktioniert nicht für IDE Festplatten. Es könnte in zukünftigen vSphere Versionen andere Plattentypen-Typen (z.B. NVMe) geben, der mit dem Skript ebenfalls nicht funktionieren.

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.

Leave a Reply