PowerShell/PowerCLIを使ってデータストアの空き容量チェックを行う過程で、ローカルディスクのVMFSは無視したい、というものがある。
ESXiホスト台数が増加することを考えると名前による除外などはやりたくない。
何らかの手法でローカルディスクかどうかを判定できないかを探した。
・Get-Datastoreで取得できる情報の範囲で確定できるものが無い
vSphere6であれば「ExtensionData.Summary.MultipleHostAccess」というデータストアが
複数のホストからアクセス可能か?というフラグ(true or false)があるが、
1台のホストだけ接続しているiSCSi,FCデータストアも対象になるのでは?(未確認)
・Get-ScsiLunには「IsLocal」というローカルディスク判定フラグがある
・Get-ScsiLunはデータストアを指定して実行することができる
・ESXiホストが停止しているデータストアに対するGet-ScsiLunはエラーとなる
・アクセス出来ないデータストアは「Accessible」フラグがfalseとなる
これらを元に作成した判定
$localdatastore=$false # フラグ
$datastore = Get-Datastore "データストア名"
if($datastore.Type -eq "VMFS"){
# VMFSだとローカルディスクの可能性があり
# それ以外の、NFS,vsanは対象外
if($datastore.ExtensionData.Summary.MultipleHostAccess -eq $true){
# MultipleHostAccessがTrueなら、ローカルディスクではないことが確定
$localdatastore=$false
}elseif($datastore.Accessible -eq $true){
# アクセスできるならGet-ScsiLunがエラーにならない
$diskinquire = Get-ScsiLun -Datastore $datastore
if($diskinquire.IsLocal -eq $true){
# IsLocalによるローカルディスク確定
$localdatastore=$true
}
}else{
# アクセスできないデータストア
}
}