PowerCLIでunmapコマンドを用いてLUNの領域を解放する方法

OS上でデータを削除しても,その情報がLUNには反映されない場合があります。

そのような,LUNのサイズが実使用量よりも大きくなってしまっている場合,削除済みのデータ領域を解放してシュリンクしてやる必要があります。

ホストにESXiを使用している場合には,unmapというコマンドを用いて未使用領域を解放することができます。

PowerCLIを用いたunmapコマンドの使用方法

これは,vSphere 5.5以降の環境で使うことができるコマンドです。

まず,VMware vSphere PowerCLIを立ち上げます。

そして,以下の3行のコマンドを,必要なサーバー名とデーターストア名の部分を置き換えて流します。

Connect-VIServer HostName
$esxcli = Get-EsxCli -VMHost HostName
$esxcli.storage.vmfs.unmap($null,"DataStoreName",$null)

ちなみに,上記のDataStoreNameは大文字小文字を区別するCase Sensitiveですので,正確に入力する必要があります。

storage.vmfs.unmapコマンドをPowerCLIで実行する

storage.vmfs.unmapコマンドをPowerCLIで実行する

LUNのサイズにもよりますが,シュリンクが完了するまでに数分程度はかかるでしょう。

なお,同時に他のデータストアもシュリンクしようと思って,別のPowerCLIウィンドウを立ち上げてコマンドを流すと,The operation has timed outというエラーが出てしまいます。

ですので,複数のデータストアをunmapする際には,平行してコマンドを流すのではなく,一つ一つをループで実行するようにしましょう。

複数のLUNをunmapするPowerShellスクリプト

以下のPowerShellスクリプトを用いると,vCenterで管理されている複数のデータストアをまとめてシュリンクできます。

以下の3つのパラメーターだけ自身の環境に置き換えてください。

vCenter_Server_Name
DataStore_0*
Cluster_Name
#Paramenters
$VIServer = "vCenter_Server_Name"
$Verberose = $true
 
#Connect to vCenter
$OpenConnection = $global:DefaultVIServers | where { $_.Name -eq $VIServer }
if ($OpenConnection.IsConnected) {
    Write-Output "Already Connected to vCenter"
    $VIConnection = $OpenConnection
} else {
    Connect-VIServer -Server $VIServer
}
 
foreach ($DataStore in (Get-Datastore -Name DataStore_0* | where {$_.Type -eq 'VMFS'}))
  
{ 
    $ESXi = Get-VMHost -Location Cluster_Name -Datastore $ds | Get-Random -Count 1
  
    $esxcli = Get-EsxCli -VMHost $ESXi
    Write-Host 'Unmapping' $DataStore on $ESXi
    $esxcli.storage.vmfs.unmap($null,$DataStore.Name,$null)
 
    Write-Host 'Done: Unmapping ' $DataStore.Name
}
Write-Host 'Done: All unmapping process'
Write-Host 'Disconnecting: ' $VIServer
 
Disconnect-VIServer $VIServer -Confirm:$false

以上,PowerCLIでunmapコマンドを用いてLUNの領域を解放する方法でした。

コメント