通过 PowerCLI 添加硬盘时跨 SCSI 控制器分布 RDM
Distributing RDMs across SCSI controllers when adding hard disks via 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 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
我试过使用 new-harddisk 命令创建新设备。对于我创建的每个硬盘,我将一个标志递增 1。这适用于将 HD 1 放在 0:1 上。然后,如果标志 > 0,它会创建磁盘,然后执行 new-scsicontroller 命令。这会将 HD 2、3 和 4 分别放到 1:2、2:2 和 3:2 上。不完全是我想要的,我可以忍受。剩下的 4 个 HD,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 控制器。然后我 运行 以下内容:
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 或其他任何位置。基本上它与指定的值完全相反。
$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
}
}
我有一个问题让我很困惑,我不知道如何解决它。这是我的困境...我正在测试存储阵列。对于每个测试,我创建一组卷并将它们呈现给我的 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
我试过使用 new-harddisk 命令创建新设备。对于我创建的每个硬盘,我将一个标志递增 1。这适用于将 HD 1 放在 0:1 上。然后,如果标志 > 0,它会创建磁盘,然后执行 new-scsicontroller 命令。这会将 HD 2、3 和 4 分别放到 1:2、2:2 和 3:2 上。不完全是我想要的,我可以忍受。剩下的 4 个 HD,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 控制器。然后我 运行 以下内容:
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 或其他任何位置。基本上它与指定的值完全相反。
$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
}
}