読者です 読者をやめる 読者になる 読者になる

Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

Azure StorageのPage Blobの使用量を取得する

仮想マシンなどで利用される仮想ディスク(VHD)はPage BLOB(ページブロブ)が利用されています。Page BLOBは100GBで確保しても、10GB分しか利用していなければ、その分しか課金されません。という前置きはおいておいて、あるPage BLOBがどの程度使用しているか計算したかったので、ざっくりAzure PowerShellで書きました。

細かい計算式は、以下にあります。

blogs.msdn.com

以下、簡単なサンプルです。Get-AzureStorageBlob で、BLOBオブジェクトを取得して、GetPageBlobSize に渡します。サイズは以下を合計するとでるみたいです。

  • 124 + ブロブ名の長さ × 2
  • メタデータのキーと値 + 3
  • GetPageRangesで使用ページを取得して End - Start オフセット + 12

という計算を、以下で行っています。

function Get-PageBlobSize 
{
    param(
         [Parameter(Mandatory=$True)][Microsoft.WindowsAzure.Commands.Storage.Model.ResourceModel.AzureStorageBlob]$PageBlob
    )

    if($PageBlob.BlobType -ne "PageBlob") {
        Write-Verbose "Not page blob"
        return
    }
    Write-Verbose "Calculating $($blob.Name) size"
    [long]$size = [long]0

    $size += 124 + $PageBlob.Name.Length * 2
    foreach($metadata in $PageBlob.ICloudBlob.Metadata) {
        $size += $metadata.Key.Length + $metadata.Value.Length + 3
    }
    foreach($page in $PageBlob.ICloudBlob.GetPageRanges()) {
        $size += 12 + $page.EndOffset - $page.StartOffset
    }
    Write-Host $PageBlob.ICloudBlob.Uri
    Write-Host ("Size        : {0:N2} GB ({1:N0} bytes)" -f ($PageBlob.Length / 1GB),$PageBlob.Length)
    Write-Host ("Actual Size : {0:N2} GB ({1:N0} bytes)" -f ($size / 1GB),$size)
}

$name      = "somestorage"
$container = "vhds"
$blobName  = "someosdisk.vhd"
$account  = Get-AzureStorageAccount -StorageAccountName $name
$context  = New-AzureStorageContext -StorageAccountName $name -StorageAccountKey (Get-AzureStorageKey -StorageAccountName $name).Primary
$PageBlob = Get-AzureStorageBlob -Context $context -Container $container-Blob $blobName


Get-PageBlobSize -PageBlob $blob

実際に実行した例は以下の通り。

https://xxxxx.blob.core.windows.net/vhds/yyyyyyy.vhd
Size        : 200.00 GB (214,748,365,312 bytes)
Actual Size : 30.98 GB (33,261,437,333 bytes)

あとは適当にストレージからBLOB一覧とりだして、全Page BLOBチェックするとか、適当にラッパーを書いてお好みにしてください。

参考

以下、他に参考にしたURLです。NETでのソースとかもおいてありますです。

Calculating how much storage space a Windows Azure Virtual Hard Disk is really using