Crear un disco multiwriter en cluster de vm en vmware con powercli

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

Deja un comentario