Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 通过PowerCLI添加硬盘时跨SCSI控制器分发RDM_Powershell_Vsphere_Esxi_Powercli - Fatal编程技术网

Powershell 通过PowerCLI添加硬盘时跨SCSI控制器分发RDM

Powershell 通过PowerCLI添加硬盘时跨SCSI控制器分发RDM,powershell,vsphere,esxi,powercli,Powershell,Vsphere,Esxi,Powercli,我有一个问题一直困扰着我,我不知道如何解决它。这是我的困境…我正在测试一个存储阵列。对于每个测试,我创建一组卷,并将它们呈现给我的ESXi主机。每个主机有2到4个虚拟机,每个虚拟机需要连接4到8个RDM。我已经编写了一个附加RDM的脚本,它可以与4个RDM配合使用。问题是……映射8个RDM时,我需要设备均匀分布在虚拟SCSI适配器上。理想情况下,我希望: Hard disk 1 on SCSI 0:1 Hard disk 2 on SCSI 0:2 Hard disk 3 on SC

我有一个问题一直困扰着我,我不知道如何解决它。这是我的困境…我正在测试一个存储阵列。对于每个测试,我创建一组卷,并将它们呈现给我的ESXi主机。每个主机有2到4个虚拟机,每个虚拟机需要连接4到8个RDM。我已经编写了一个附加RDM的脚本,它可以与4个RDM配合使用。问题是……映射8个RDM时,我需要设备均匀分布在虚拟SCSI适配器上。理想情况下,我希望:

Hard disk 1  on  SCSI 0:1
Hard disk 2  on  SCSI 0:2
Hard disk 3  on  SCSI 1:1
Hard disk 4  on  SCSI 1:2
Hard disk 5  on  SCSI 2:1
Hard disk 6  on  SCSI 2:2
Hard disk 7  on  SCSI 3:1
Hard disk 8  on  SCSI 3:2
Get-HardDisk -VM $localVM | Where {$_.Name -eq "Hard disk 7" | Set-HardDisk -Controller "SCSI controller 1" -Confirm:$false
我已经尝试使用newharddisk命令来创建新设备。对于我创建的每个硬盘,我将一个标志递增1。这适用于将HD 1设置为0:1。然后,如果标志>0,它将创建磁盘,然后执行新的scsicontroller命令。这将HD 2、3和4分别设置为1:2、2:2和3:2。这不是我想要的,我可以接受。剩余的4个HDs,5-8在总线0上结束,因为我可以添加的最大新控制器是4个。这是我的密码:

$devicePointer = 0
foreach($vmhost in $vmhosts){
$localVMs = Get-VM -location $vmhost -name $vmNamingPattern | Sort-Object name
$devices = Get-ScsiLun -VmHost $vmhost -CanonicalName $deviceNamePattern | Sort-Object id
foreach ($localVM in $localVMs){
$flag = 0
    for($i=$devicePointer;$i -lt $devicePointer+$devicesPerVM; $i++){
        $disk = New-HardDisk -VM $localVM -DeviceName $devices[$i].ConsoleDeviceName -DiskType RawPhysical
    if ($flag -ne 0) {
        New-ScsiController -HardDisk $disk -BusSharingMode NoSharing -Type ParaVirtual
    }
    $flag+=1
        write-host $localVM $disk
    }
    $devicePointer = $devicePointer+$devicesPerVM
}
}

我尝试了另一种方法,只为标志值1、2或3添加一个新的scsi控制器。然后我运行了以下命令:

Hard disk 1  on  SCSI 0:1
Hard disk 2  on  SCSI 0:2
Hard disk 3  on  SCSI 1:1
Hard disk 4  on  SCSI 1:2
Hard disk 5  on  SCSI 2:1
Hard disk 6  on  SCSI 2:2
Hard disk 7  on  SCSI 3:1
Hard disk 8  on  SCSI 3:2
Get-HardDisk -VM $localVM | Where {$_.Name -eq "Hard disk 7" | Set-HardDisk -Controller "SCSI controller 1" -Confirm:$false

这导致单位数量增加1。如果是0:7,它将移动到0:8或2:0或其他任何位置。基本上,它与指定的值完全相反

此代码被合并到一个更大的脚本中,该脚本允许将RDM映射到VM。它主要用于构建存储阵列的测试环境,并在此处维护:
$consdevnam = "/vmfs/devices/disks/"
$devicePointer = 0
foreach ($global:Vmhost in $global:my_VM_hosts){
    foreach ($localVM in $global:my_VMs){
        $global:scsi_ctrl = $null
        $global:scsi_ctrl = @()
        $flag = 0
        for($i=$devicePointer;$i -lt $devicePointer+$devicesPerVM; $i++){
            if ($flag -eq 0 -or ($flag % 4) -eq 0){
                $disk = New-HardDisk -VM $localVM -DeviceName ($consdevnam + $naa_ids[$i]) -DiskType RawPhysical -WarningAction SilentlyContinue
            }
            if ($flag -ne 0 -and $flag -lt 4) {
                $disk = New-HardDisk -VM $localVM -DeviceName ($consdevnam + $naa_ids[$i]) -DiskType RawPhysical -WarningAction SilentlyContinue
                $global:scsi_ctrl += New-ScsiController -HardDisk $disk -BusSharingMode NoSharing -Type ParaVirtual -WarningAction SilentlyContinue
            }
            elseif ($flag -ne 0 -and ($flag % 4) -lt 4) {
                $f = ($flag % 4)
                if ($f -eq 1){
                    $disk = New-HardDisk -VM $localVM -DeviceName ($consdevnam + $naa_ids[$i]) -Controller ($global:scsi_ctrl[0]).name -DiskType RawPhysical –Confirm:$false -WarningAction SilentlyContinue
                }                                                                                                                                                              
                if ($f -eq 2){                                                                                                                                                 
                    $disk = New-HardDisk -VM $localVM -DeviceName ($consdevnam + $naa_ids[$i]) -Controller ($global:scsi_ctrl[1]).name -DiskType RawPhysical –Confirm:$false -WarningAction SilentlyContinue
                }                                                                                                                                                              
                if ($f -eq 3){                                                                                                                                                 
                    $disk = New-HardDisk -VM $localVM -DeviceName ($consdevnam + $naa_ids[$i]) -Controller ($global:scsi_ctrl[2]).name -DiskType RawPhysical –Confirm:$false -WarningAction SilentlyContinue
                }
            }
            $flag+=1
            write-host "Added $disk to $localVM"
        }
        $devicePointer = $devicePointer+$devicesPerVM
    }
}