vm.gowatana.jp

NEOにほんごVMware(仮)

PowerCLI で ネステッド ESXi 環境むけの VSAN.FakeSCSIReservations を設定してみる。

vSAN データストアにネステッド ESXi (ゲスト OS として ESXi をインストール)を配置するときに、仮想ディスクのフォーマット エラー対策などで物理サーバ側の ESXi で /VSAN/FakeSCSIReservations を有効にします。

今回は、PowerCLI で /VSAN/FakeSCSIReservations を有効にしてみます。

ネステッド ESXi でのエラーの様子

vSAN データストア上の仮想ディスクを、ふつうに vSAN ディスク グループに追加しようとすると、下記のようなエラーになってしまいます。

一般的なシステム エラーが発生しました: Failed to reserve disk mpx.vmhba0:C0:T1:L0 with exception: Failed to reserve disk mpx.vmhba0:C0:T1:L0 with exception: Reserve failed with error code: -1

f:id:gowatana:20210102133451p:plain

そこで、/VSAN/FakeSCSIReservations を物理マシンの ESXi(ネストの外側)で設定しておきます。esxcli などでも設定できますが、今回は PowerCLI を利用します。

PowerCLI での設定

PowerCLI で、vCenter に接続しておきます。

PS C:\> Connect-VIServer -Force infra-vc-01.go-lab.jp

Name                           Port  User
----                           ----  ----
infra-vc-01.go-lab.jp          443   GO-LAB\gowatana

vSAN クラスタに参加している ESXi のみに設定するため、対象クラスタを取得してから、パイプで設定コマンドに渡します。今回の対象クラスタは infra-cluster-01 で、その配下の ESXi を取得します。

PS C:\> Get-Cluster infra-cluster-01 | Get-VMHost | Sort-Object Name | select Name,ConnectionState,PowerState,Version,Build | ft -AutoSize

Name                    ConnectionState PowerState Version Build
----                    --------------- ---------- ------- -----
infra-esxi-01.go-lab.jp       Connected  PoweredOn 6.7.0   15160138
infra-esxi-02.go-lab.jp       Connected  PoweredOn 6.7.0   15160138
infra-esxi-03.go-lab.jp       Connected  PoweredOn 6.7.0   15160138
infra-esxi-04.go-lab.jp       Connected  PoweredOn 6.7.0   15160138
infra-esxi-05.go-lab.jp       Connected  PoweredOn 6.7.0   15160138
infra-esxi-06.go-lab.jp       Connected  PoweredOn 6.7.0   15160138

現状の設定を確認しておきます。ESXi「infra-esxi-04.go-lab.jp」のみ、VSAN.FakeSCSIReservations が無効「0」です。

PS C:\> Get-Cluster infra-cluster-01 | Get-VMHost | Sort-Object Name | select Name,{$_|Get-AdvancedSetting VSAN.FakeSCSIReservations}

Name                    $_|Get-AdvancedSetting VSAN.FakeSCSIReservations
----                    ------------------------------------------------
infra-esxi-01.go-lab.jp VSAN.FakeSCSIReservations:1
infra-esxi-02.go-lab.jp VSAN.FakeSCSIReservations:1
infra-esxi-03.go-lab.jp VSAN.FakeSCSIReservations:1
infra-esxi-04.go-lab.jp VSAN.FakeSCSIReservations:0
infra-esxi-05.go-lab.jp VSAN.FakeSCSIReservations:1
infra-esxi-06.go-lab.jp VSAN.FakeSCSIReservations:1

設定変更します。

VSAN.FakeSCSIReservations を、有効の「1」にします。

PS C:\> Get-Cluster infra-cluster-01 | Get-VMHost | Sort-Object Name | Get-AdvancedSetting VSAN.FakeSCSIReservations | where {$_.Value -eq 0} | Set-AdvancedSetting -Value 1 -Confirm:$false

Name                 Value                Type                 Description
----                 -----                ----                 -----------
VSAN.FakeSCSIRese... 1                    VMHost

設定変更されました。

PS C:\> Get-Cluster infra-cluster-01 | Get-VMHost | Sort-Object Name | select Name,{$_|Get-AdvancedSetting VSAN.FakeSCSIReservations}

Name                    $_|Get-AdvancedSetting VSAN.FakeSCSIReservations
----                    ------------------------------------------------
infra-esxi-01.go-lab.jp VSAN.FakeSCSIReservations:1
infra-esxi-02.go-lab.jp VSAN.FakeSCSIReservations:1
infra-esxi-03.go-lab.jp VSAN.FakeSCSIReservations:1
infra-esxi-04.go-lab.jp VSAN.FakeSCSIReservations:1
infra-esxi-05.go-lab.jp VSAN.FakeSCSIReservations:1
infra-esxi-06.go-lab.jp VSAN.FakeSCSIReservations:1

下記のように列名の表示などを調整することもできます。

PS C:\> Get-Cluster infra-cluster-01 | Get-VMHost | Sort-Object Name | select Name,@{N="VSAN.FakeSCSIReservations";E={($_|Get-AdvancedSetting VSAN.FakeSCSIReservations).Value}}

Name                    VSAN.FakeSCSIReservations
----                    -------------------------
infra-esxi-01.go-lab.jp                         1
infra-esxi-02.go-lab.jp                         1
infra-esxi-03.go-lab.jp                         1
infra-esxi-04.go-lab.jp                         1
infra-esxi-05.go-lab.jp                         1
infra-esxi-06.go-lab.jp                         1

設定が統一されているか、グルーピングして確認することもできます。VSAN.FakeSCSIReservations が「1」の ESXi ホストをグルーピングして、6台すべての設定が統一されていることがわかります。

PS C:\> Get-Cluster infra-cluster-01 | Get-VMHost | Sort-Object Name | Get-AdvancedSetting VSAN.FakeSCSIReservations | Group-Object Name,Value | select Count,Name,{$_.Group.Entity}

Count Name                         $_.Group.Entity
----- ----                         ---------------
    6 VSAN.FakeSCSIReservations, 1 {infra-esxi-01.go-lab.jp, infra-esxi-02.go-lab.jp, infra-esxi-03.go-lab.jp, infra-esxi-04.go-lab.jp...}

下記のようにシンプルに表示することもできます。

PS C:\> Get-Cluster infra-cluster-01 | Get-VMHost | Get-AdvancedSetting VSAN.FakeSCSIReservations | Group-Object Name,Value | select Count,Name

Count Name
----- ----
    6 VSAN.FakeSCSIReservations, 1

以上、PowerCLI の利用例でした。