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?
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é
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"
Glad you have it working
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference