VMware Cloud Community
Pilu1978
Enthusiast
Enthusiast
Jump to solution

RDM Disk with Multiwriter

Guys,

I have a requirement to add LUN's as RDM disks in Physical mode and shared (multiwriter) between two VM's using powercli. I have device WWN (naa.id) of the LUNs.

While adding the RDM's, disks would maintain the sequence of the SCSIID as below:

Hard Disk 2: SCSI 0:1

Hard Disk 3: SCSI 0:2

Hard Disk 4: SCSI 0:3

Hard Disk 5: SCSI 0:4

...

Please help.

Tags (1)
0 Kudos
1 Solution

Accepted Solutions
LucD
Leadership
Leadership
Jump to solution

It is basically the Backing of the disks tat changes.

Something like this

$vmNames = 'VM1','VM2'

$diskNAA = @('naa.600098764dc75adc8a8545aa41234567','naa.600098764dc75adc8a8545aa41234568')


$nrDisk= $diskNAA.Count

$diskUnitNr = 1..($nrDisk) | where{$_ -ne 7}

$nrDB = 1

$vm = Get-VM -Name $vmNames[0]

$scsi = Get-ScsiController -VM $vm -Name 'SCSI controller 0'

$scsiBus = $scsi.ExtensionData.BusNumber

$scsiKey = $scsi.Key

$spec = New-Object VMware.Vim.VirtualMachineConfigSpec

for($db = 1; $db -le $nrDB; $db++){

   if($db -gt 1){

   $scsiBus = $scsiBus + 1

   $scsiKey = -(200 + $db)

   $dev = New-Object VMware.Vim.VirtualDeviceConfigSpec

   $dev.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::add

   $controller = New-Object VMware.Vim.ParaVirtualSCSIController

   $controller.Key = $scsiKey

   $controller.BusNumber = 1

   $dev.Device = $controller

   $spec.DeviceChange += $dev

   }

   for($hd = 1;$hd -le $nrDisk; $hd++){

   $dev = New-Object VMware.Vim.VirtualDeviceConfigSpec

   $disk = New-Object VMware.Vim.VirtualDisk

   $back = New-Object VMware.Vim.VirtualDiskRawDiskMappingVer1BackingInfo

   $back.CompatibilityMode = 'physicalMode'

   $back.FileName = ''

   $back.DiskMode = [VMware.Vim.VirtualDiskMode]::independent_persistent

   $back.Sharing = [VMware.Vim.VirtualDiskSharing]::sharingMultiWriter

   $back.DeviceName = "/vmfs/devices/disks/$($diskNAA[$hd - 1])"

   $disk.Key = -($db * 100 + $hd)

   $disk.ControllerKey = $scsiKey

   $disk.UnitNumber = $diskUnitNr[$hd - 1]

   $disk.Backing = $back

   $dev.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::add

   $dev.FileOperation = [VMware.Vim.VirtualDeviceConfigSpecFileOperation]::create

   $dev.Device = $disk

   $spec.DeviceChange += $dev

   }

}

$vm.ExtensionData.ReconfigVM($spec)


$hdNames = Get-VM -Name $vmNames[0] | Get-HardDisk | where{$_.Name -ne 'Hard disk 1'} | Select -ExpandProperty FileName


$vm = Get-VM -Name $vmNames[1]

$scsi = Get-ScsiController -VM $vm -Name 'SCSI controller 0'

$scsiBus = $scsi.ExtensionData.BusNumber

$scsiKey = $scsi.Key


$spec = New-Object VMware.Vim.VirtualMachineConfigSpec

for($db = 1; $db -le $nrDB; $db++){

   if($db -gt 1){

   $scsiBus = $scsiBus + 1

   $scsiKey = -(200 + $db)

   $dev = New-Object VMware.Vim.VirtualDeviceConfigSpec

   $dev.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::add

   $controller = New-Object VMware.Vim.ParaVirtualSCSIController

   $controller.Key = $scsiKey

   $controller.BusNumber = 1

   $dev.Device = $controller

   $spec.DeviceChange += $dev

   }

   for($hd = 1;$hd -le $nrDisk; $hd++){

   $dev = New-Object VMware.Vim.VirtualDeviceConfigSpec

   $disk = New-Object VMware.Vim.VirtualDisk

   $back = New-Object VMware.Vim.VirtualDiskRawDiskMappingVer1BackingInfo

   $back.FileName = $hdNames

   $back.DiskMode = [VMware.Vim.VirtualDiskMode]::independent_persistent

   $back.Sharing = [VMware.Vim.VirtualDiskSharing]::sharingMultiWriter

   $disk.Key = -($db * 100 + $hd)

   $disk.ControllerKey = $scsiKey

   $disk.UnitNumber = $diskUnitNr[$hd - 1]

   $disk.Backing = $back

   $dev.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::add

   $dev.Device = $disk

   $spec.DeviceChange += $dev

   }

}

$vm.ExtensionData.ReconfigVM($spec)

---------------------------------------------------------------------------------------------------------

Was it helpful? Let us know by completing this short survey here.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

View solution in original post

0 Kudos
5 Replies
LucD
Leadership
Leadership
Jump to solution

Didn't you ask that same question 2 years ago?

Multiwriter Disk


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
Pilu1978
Enthusiast
Enthusiast
Jump to solution

Hi LucD,

Yes but the requirements are different. Previous one was for normal virtual disk but this is for RDM disk in physical mode.

Sorry not sure how to add RDM disk with its naa id as shared disk between 2 VM's.

0 Kudos
LucD
Leadership
Leadership
Jump to solution

It is basically the Backing of the disks tat changes.

Something like this

$vmNames = 'VM1','VM2'

$diskNAA = @('naa.600098764dc75adc8a8545aa41234567','naa.600098764dc75adc8a8545aa41234568')


$nrDisk= $diskNAA.Count

$diskUnitNr = 1..($nrDisk) | where{$_ -ne 7}

$nrDB = 1

$vm = Get-VM -Name $vmNames[0]

$scsi = Get-ScsiController -VM $vm -Name 'SCSI controller 0'

$scsiBus = $scsi.ExtensionData.BusNumber

$scsiKey = $scsi.Key

$spec = New-Object VMware.Vim.VirtualMachineConfigSpec

for($db = 1; $db -le $nrDB; $db++){

   if($db -gt 1){

   $scsiBus = $scsiBus + 1

   $scsiKey = -(200 + $db)

   $dev = New-Object VMware.Vim.VirtualDeviceConfigSpec

   $dev.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::add

   $controller = New-Object VMware.Vim.ParaVirtualSCSIController

   $controller.Key = $scsiKey

   $controller.BusNumber = 1

   $dev.Device = $controller

   $spec.DeviceChange += $dev

   }

   for($hd = 1;$hd -le $nrDisk; $hd++){

   $dev = New-Object VMware.Vim.VirtualDeviceConfigSpec

   $disk = New-Object VMware.Vim.VirtualDisk

   $back = New-Object VMware.Vim.VirtualDiskRawDiskMappingVer1BackingInfo

   $back.CompatibilityMode = 'physicalMode'

   $back.FileName = ''

   $back.DiskMode = [VMware.Vim.VirtualDiskMode]::independent_persistent

   $back.Sharing = [VMware.Vim.VirtualDiskSharing]::sharingMultiWriter

   $back.DeviceName = "/vmfs/devices/disks/$($diskNAA[$hd - 1])"

   $disk.Key = -($db * 100 + $hd)

   $disk.ControllerKey = $scsiKey

   $disk.UnitNumber = $diskUnitNr[$hd - 1]

   $disk.Backing = $back

   $dev.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::add

   $dev.FileOperation = [VMware.Vim.VirtualDeviceConfigSpecFileOperation]::create

   $dev.Device = $disk

   $spec.DeviceChange += $dev

   }

}

$vm.ExtensionData.ReconfigVM($spec)


$hdNames = Get-VM -Name $vmNames[0] | Get-HardDisk | where{$_.Name -ne 'Hard disk 1'} | Select -ExpandProperty FileName


$vm = Get-VM -Name $vmNames[1]

$scsi = Get-ScsiController -VM $vm -Name 'SCSI controller 0'

$scsiBus = $scsi.ExtensionData.BusNumber

$scsiKey = $scsi.Key


$spec = New-Object VMware.Vim.VirtualMachineConfigSpec

for($db = 1; $db -le $nrDB; $db++){

   if($db -gt 1){

   $scsiBus = $scsiBus + 1

   $scsiKey = -(200 + $db)

   $dev = New-Object VMware.Vim.VirtualDeviceConfigSpec

   $dev.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::add

   $controller = New-Object VMware.Vim.ParaVirtualSCSIController

   $controller.Key = $scsiKey

   $controller.BusNumber = 1

   $dev.Device = $controller

   $spec.DeviceChange += $dev

   }

   for($hd = 1;$hd -le $nrDisk; $hd++){

   $dev = New-Object VMware.Vim.VirtualDeviceConfigSpec

   $disk = New-Object VMware.Vim.VirtualDisk

   $back = New-Object VMware.Vim.VirtualDiskRawDiskMappingVer1BackingInfo

   $back.FileName = $hdNames

   $back.DiskMode = [VMware.Vim.VirtualDiskMode]::independent_persistent

   $back.Sharing = [VMware.Vim.VirtualDiskSharing]::sharingMultiWriter

   $disk.Key = -($db * 100 + $hd)

   $disk.ControllerKey = $scsiKey

   $disk.UnitNumber = $diskUnitNr[$hd - 1]

   $disk.Backing = $back

   $dev.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::add

   $dev.Device = $disk

   $spec.DeviceChange += $dev

   }

}

$vm.ExtensionData.ReconfigVM($spec)

---------------------------------------------------------------------------------------------------------

Was it helpful? Let us know by completing this short survey here.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
Pilu1978
Enthusiast
Enthusiast
Jump to solution

Perfect. Thanks LucD.

0 Kudos
someo
Contributor
Contributor
Jump to solution

Hi,

Thanks for your solution, but I get the following error, can you help me?

Exception calling "ReconfigVM" with "1" argument(s): "Invalid configuration for device '0'."
At line:44 char:1
+ $vm.ExtensionData.ReconfigVM($spec)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : VimException



and line 44 refers to: $vm.ExtensionData.ReconfigVM($spec)
0 Kudos