Automation

 View Only
  • 1.  mount / mapp eines existierenden VMFS Datastore

    Posted Dec 13, 2012 08:13 PM

    Hallo,

    ich bin blutiger PowerCLI Anfänger habe da ein Problem.

    Ich möchte einen existierenden VMFS Datastore aus einem FlexClone an einen ESXi 5.1 Server mounten um einzelne VMDK´s heraus zu kopieren.

    Den CanonicalName der existierenden LUN welche nicht gemountet ist habe ich schon isoliert.

    Eine neue Signatur muss meiner Meinung nach nicht zugewiesen werden, da der Datastore von einem anderen Cluster stammt.

    Mit "New-Datastore -vmhost $ESXHost -Name TEST -Path $lunid -vmfs" bekomme ich zwar den Datastore dieser wird aber formatiert.

    Scipt bis jetzt:

    add-pssnapin VMware.VimAutomation.Core
    . C:\dbshadow\DatastoreFunctions.ps1

    $VIServer        = "Server"
    $datacenter      = "Test"
    $cluster         = "Cluster-Test"

    Connect-VIServer $VIServer

    # Get ESX Hosts / DBSHADOW
    $ESXHost = Get-Datacenter $datacenter | Get-Cluster $cluster | Get-VM | Where {$_.Name -eq "DBSHADOW"} | Get-VMHost

    # HBA Rescan
    $ESXHost|Get-VMHostStorage  -RescanAllHba -RescanVmfs

    # Ausgabe der DatastoreMountInfo CanonicalName

    Get-Datastore -vmhost $ESXHOST | Get-DatastoreMountInfo |select  Lun | Get-Unique -asstring | ft -AutoSize -hideTableHeaders |out-file  -FilePath C:\log\mountinfo.txt

    # Ausgabe der gesehenen SCSILUN CanonicalName

    Get-ScsiLun -vmhost $ESXhost |Where {$_.LunType -eq "disk"}  |select CanonicalName | Get-Unique -asstring | FT -AutoSize  -hideTableHeaders | out-file -FilePath C:\log\scsilun.txt

    # Abgleich CanonicalName gesehen aber nicht mounted

    $lunid = Compare-Object (Get-content C:\log\scsilun.txt) (Get-content C:\log\mountinfo.txt) | Select -ExpandProperty InputObject

    Wie bekomme ich jetzt am einfachsten die LUN welche ja schon ein VMFS Datastore ist an den ESXi Server verbunden, ohne das der Inhalt verloren geht?



  • 2.  RE: mount / mapp eines existierenden VMFS Datastore

    Posted Dec 13, 2012 08:26 PM

    Willkommmen im Forum,

    schu mal ob Dir persistently force mount the datastore weiterhilft.

    André



  • 3.  RE: mount / mapp eines existierenden VMFS Datastore

    Posted Dec 13, 2012 08:55 PM

    Hallo André,

    den thread habe ich neben vielen anderen zu meinem Problem auch schon gelesen, aber ich blicke da noch nicht durch...

    In der "DatastorFunctions.ps1" versteckt sich auch eine Mount Funktion, nur bin ich noch nicht dahinter gekommen wie ich diese nutzen kann.

    Wie gesagt, blutiger Anfänger in powershell und powercli, dazu noch nicht mal ein Freund vom scripting...

    Es muss doch möglich sein Anhand des VMHost und des CanonicalName der Lun diese zu mounten ohne vorher hunderte Variablen zu füllen.

    MFG

    André



  • 4.  RE: mount / mapp eines existierenden VMFS Datastore

    Posted Dec 26, 2012 11:00 AM

    Hallo,

    ich habe eine Lösung gefunden.

    Quellen:

    http://communities.vmware.com/message/1834316

    http://www.lucd.info/2011/07/26/the-making-of-a-new-viproperty-called-lunid/

    $LunID = "festgelegte Lun ID die beim iGroup mapping auf dem Storage genutzt wurde"

    $VMHost|Get-VMHostStorage  -RescanAllHba -RescanVmfs

    New-VIProperty -Name lunID -ObjectType ScsiLun -Value {
          param($lun)
        
          [int](Select-String ":L(?<lunID>\d+)$" `
            -InputObject $lun.RuntimeName).Matches[0].Groups['lunID'].Value
        } -Force | Out-Null

    $LunIDfind = Get-VMHost -Name $VMHost | Get-ScsiLun | `Select CanonicalName, lunID, RuntimeName | where {$_.lunID -eq "$LunID"}
    $scsiCname = $LunIDfind.CanonicalName

    #Liste der nicht aufgelösten scsi devices erzeugen
    $hostView = get-vmhost -name $VMHost | get-view
    $dsView = get-view $hostView.ConfigManager.DatastoreSystem
    $unBound = $dsView.QueryUnresolvedVmfsVolumes()

    #Schleife durch die nicht aufgelösten scsi devices und neu zu signierende scsi devices bestimmen (CanonicalName)
    foreach ($ub in $UnBound) {
    $extPaths = @()
    $Extents = $ub.Extent;
    foreach ($ex in $Extents) {
    $extPaths = $extPaths + $ex.DevicePath
    }

    #Nur nicht aufgelöstes scsi device neu signieren, dessen LunID in Verbindung zum CanonicalName steht
    IF ($extPaths -match $scsiCname){
    $res = New-Object VMware.Vim.HostUnresolvedVmfsResignatureSpec
    $res.ExtentDevicePath = $extPaths
    $dsView.ResignatureUnresolvedVmfsVolume($res)
    }
    }

    # VMFS Label von vor Neusignierung auslesen und für weitere bearbeitungen in Variable schreiben
    $VmfsLabelFind = $unBound | select VmfsLabel
    $VmfsLabel = $VmfsLabelFind.vmfslabel

    #Neuen Datastore finden und umbenennen
    $NewDatastore = Get-Datastore -VmHost $VMHost | Where{ $_.Name -like "snap-*$VmfsLabel" }
    Set-Datastore $NewDatastore -Name "snap-$VmfsLabel"



  • 5.  RE: mount / mapp eines existierenden VMFS Datastore

    Posted Dec 26, 2012 11:29 AM

    Glad you have it working :smileyhappy: