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ですので,正確に入力する必要があります。
LUNのサイズにもよりますが,シュリンクが完了するまでに数分程度はかかるでしょう。
なお,同時に他のデータストアもシュリンクしようと思って,別のPowerCLIウィンドウを立ち上げてコマンドを流すと,The operation has timed outというエラーが出てしまいます。
ですので,複数のデータストアをunmapする際には,平行してコマンドを流すのではなく,一つ一つをループで実行するようにしましょう。
複数のLUNをunmapするPowerShellスクリプト
以下のPowerShellスクリプトを用いると,vCenterで管理されている複数のデータストアをまとめてシュリンクできます。
以下の3つのパラメーターだけ自身の環境に置き換えてください。
vCenter_Server_Name
DataStore_0*
Cluster_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の領域を解放する方法でした。
コメント