在HPE服务器上部署vSAN群集时,遇到了一个问题。vSAN向导没有显示驱动器的物理托架号,因此我必须找出另一种方法来将显示的驱动器NAA ID与物理驱动器位置相关联。

esxi服务器扩容 esxi 服务器_服务器

出现在vSAN配置向导中的磁盘

在我的情况下,我希望将托架1、3和5中的驱动器放在磁盘组1中,将托架2、4和6中的驱动器放在磁盘组2中。要形象化此最终目标,请查看下图。

esxi服务器扩容 esxi 服务器_运营商_02

所需的磁盘组布局

为了使该解决方案起作用,需要将ESXi与HPE ESXi映像一起安装  。HPE自定义映像包括Smart Storage Administrator CLI(SSACLI)实用程序,它是用于以编程方式在HPE服务器中标识驱动器位置的秘密工具。对于ESXi 6.5及更高版本,以下命令将返回物理驱动器信息:/opt/smartstorageadmin/ssacli/bin/ssacli ctrl slot=0 pd all show detail

输出看起来像这样,每个驱动器都有一个条目。

physicaldrive 1I:1:4

Port:1I

Box:1

Bay:4

Status:OK

驱动器类型:未分配的驱动器

接口类型:固态SAS

大小:1.9 TB

暴露给OS的驱动器:True

Logical / Physical Block Size:512/4096

固件修订版:HPD2

序列号:–

WWID:58CE38EE2057D3C6

型号:HP MO001920JWFWU

当前温度(C):29

最高温度(C):30

剩余使用量:100.00%

开机时间:592

SSD Smart Trip磨损:虚假

PHY计数:2

PHY传输速率:12.0Gbps,未知的

驱动器身份验证状态:正常

运营商应用程序版本:11

运营商Bootloader版本:6

支持的Sanitize Erase:True

Sanitize估计的最大擦除时间:1分钟,10秒

不受限制的Sanitize支持:True

Shingled磁记录支持:无

驱动器唯一ID:58CE38EE2057D3C56193000858CE38EE

请注意突出显示的WWID值。我故意遗漏了最后一个字符。突出显示的字符串与显示在vSphere向导中的NAA ID相同,但减去最后一个字符。现在我们知道该示例中的驱动器属于托架4,并且是磁盘组2中的容量驱动器。类似于此示例,您现在可以使用其他驱动器的输出来标识每个NAA值的物理位置,并且将其分配给适合您的设计的磁盘组。

或者,您可以使用序列号(从此示例中删除)与您在iLO界面中找到的序列号匹配。

但是,登录到每个主机并运行命令可能会有些乏味。相反,我整理了一个快速的Powershell脚本,该脚本利用pytty连接工具  从指定的主机中提取该信息。您可以轻松地修改脚本以一次处理多个主机,也可以随意处理输出。

########## Define the below values ##########
$vmhost = "esx1"
$user = "root"
$Passwd = "password"
$PathToPlink = "C:\plink.exe"
######## DO NOT EDIT BELOW THIS LINE ########
$cmd = "/opt/smartstorageadmin/ssacli/bin/ssacli ctrl slot=0 pd all show detail"
$plink = "echo y | " + $PathToPlink + " " + "-ssh" + " " + "$user" + "@" + $vmhost + " " + "-pw" + " " + $Passwd + " " + '"' + $cmd + '"'
Connect-VIServer $vmhost -User $user -Password $Passwd
#Starts the ssh service on the host if it is not running
$sshstatus = Get-VMHostService  -VMHost $vmhost| Where-Object {$psitem.key -eq "tsm-ssh"}
if ($sshstatus.Running -eq $False) {
Get-VMHostService | Where-Object {$psitem.key -eq "tsm-ssh"} | Start-VMHostService
}
Write-Verbose -Message "Executing $cmd on $vmhost"
$cmdOutput = Invoke-Expression -command $plink
#If SSH was stopped on the host before running this script, this will put it back to a stopped state
if ($sshstatus.Running -eq $False) {
Get-VMHostService | Where-Object {$psitem.key -eq "tsm-ssh"} | Stop-VMHostService -Confirm:$False
}
$cmdOutput