No se si alguno lo sufriréis en su día, pero antes de vSphere 6.0, para que varias máquinas virtuales compartieran un disco, teníamos que habilitar una opción multiwriter en las configuraciones avanzadas, y añadir una fila con estas opciones:
scsi1:1.sharing multi-writer.
Esto requería una parada de sistemas, que se convertía en un proceso muy engorroso. Actualmente esta opción ya no funciona.
Esta vez os traigo un script muy interesante, donde crearemos un disco multiwriter para compartirlo en un cluster de máquinas virtuales.
El script nos pedirá en que datastorage queremos crear el disco, lo asigna a scsi, que máquina virtual se le va a asignar, lo pondrá en multiwriter y lo asigna a otro nodo.
Todo ello en vmware usando el potentísimo powercli.
Como os he comentado, que este proceso vale a partir de la versión 6.0, y se realiza en caliente, sin parada de servicio.
# datos previos para la creación de disco $vmname = Read-Host “añadir nombre de maquina” $vmdk = Read-Host “Nombre del disco” [int]$diskSizeGB = Read-Host “Capacidad del disco” [int]$busnumber = Read-host “numero de scsi” [int]$unitnumber = Read-Host “numero de disco” $vm = Get-VM $vmname Write-Host “Añadir disco “$vmdk” a “$vm” en el SCSI ID “$busnumber”:”$unitnumber $server = Connect-VIServer vcenter5.puertos.es #testea la VM y todos sus dispositivos $vm = Get-View -Server $server -ViewType VirtualMachine -Property Name,Config.Hardware.Device -Filter @{"Name" = $vmname} # Convertir GB to KB $diskSizeInKB = (($diskSizeGB * 1024 * 1024 * 1024)/1KB) $diskSizeInKB = [Math]::Round($diskSizeInKB,4,[MidPointRounding]::AwayFromZero) # Dispositivos en VM $vmDevices = $vm.Config.Hardware.Device # busca el controlador SCSI que nos interesa foreach ($device in $vmDevices) { if($device -is [VMware.Vim.VirtualSCSIController] -and $device.BusNumber -eq $busnumber) { $diskControllerKey = $device.key break } } # Cree VM Config Spec para agregar un nuevo VMDK y ponerlo como multiwriter $spec = New-Object VMware.Vim.VirtualMachineConfigSpec $spec.deviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec $spec.deviceChange[0].operation = 'add' $spec.DeviceChange[0].FileOperation = 'create' $spec.deviceChange[0].device = New-Object VMware.Vim.VirtualDisk $spec.deviceChange[0].device.key = -1 $spec.deviceChange[0].device.ControllerKey = $diskControllerKey $spec.deviceChange[0].device.unitNumber = $unitNumber $spec.deviceChange[0].device.CapacityInKB = $diskSizeInKB $spec.DeviceChange[0].device.backing = New-Object VMware.Vim.VirtualDiskFlatVer2BackingInfo $spec.DeviceChange[0].device.Backing.fileName = $vmdk $spec.DeviceChange[0].device.Backing.diskMode = "independent_persistent" $spec.DeviceChange[0].device.Backing.eagerlyScrub = $True $spec.deviceChange[0].device.backing.sharing = [VMware.Vim.VirtualDiskSharing]::sharingMultiWriter Write-Host "`nañadiendo nuevo VMDK w/capacidad $diskSizeGB GB a VM: $vmname" $task = $vm.ReconfigVM_Task($spec) $task1 = Get-Task -Id ("Task-$($task.value)") $task1 | Wait-Task #vamos a añadir el disco creado al otro nodo Write-Host “Añadir disco a Nodo 2“ $vmname2 = Read-Host “añadir nombre de maquina” $vmdk2 = Read-Host “Nombre del disco” [int]$busnumber2 = Read-host “numero de scsi” [int]$unitnumber2 = Read-Host “numero de disco” $vm2 = Get-VM $vmname2 Write-Host “Añadir disco “$vmdk2” a “$vm2” en el SCSI ID “$busnumber2”:”$unitnumber2 $ctrll2 = Get-ScsiController -VM $vm2 | ?{$_.extensiondata.busNumber -eq $busnumber2} $spec2 = New-Object VMware.Vim.VirtualMachineConfigSpec $spec2.deviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec[] (1) $spec2.deviceChange[0] = New-Object VMware.Vim.VirtualDeviceConfigSpec $spec2.deviceChange[0].operation = “add” $spec2.deviceChange[0].device = New-Object VMware.Vim.VirtualDisk $spec2.deviceChange[0].device.key = -100 $spec2.deviceChange[0].device.backing = New-Object VMware.Vim.VirtualDiskFlatVer2BackingInfo $spec2.deviceChange[0].device.backing.fileName = “”+$vmdk2 $spec2.deviceChange[0].device.backing.diskMode = “independent_persistent” $spec2.deviceChange[0].device.connectable = New-Object VMware.Vim.VirtualDeviceConnectInfo $spec2.deviceChange[0].device.connectable.startConnected = $true $spec2.deviceChange[0].device.connectable.allowGuestControl = $false $spec2.deviceChange[0].device.connectable.connected = $true $spec2.deviceChange[0].device.controllerKey = [int]$ctrll2.extensiondata.Key $spec2.deviceChange[0].device.unitNumber = [int]$unitNumber2 $spec2.deviceChange[0].device.backing.sharing = [VMware.Vim.VirtualDiskSharing]::sharingMultiWriter $vm2.ExtensionData.ReconfigVM($spec2)
Espero que os sirva