Windows Azure Storage (23) 计算Azure VHD实际使用容量

  《Windows Azure Platform 系列文章目录

  

  对于A系列和D系列的虚拟机来说,使用的是普通存储。

  普通存储的存储资源,是按照每GB每月计费的。Microsoft Azure普通存储资源是用多少算多少的,且按照平均使用计算。

    http://blogs.msdn.com/b/windowsazurestorage/archive/2010/07/09/understanding-windows-azure-storage-billing-bandwidth-transactions-and-capacity.aspx?PageIndex=2#comments

  举个例子:虚拟机操作系统的文件,对于Windows平台,C盘系统盘容量127GB,操作系统实际使用30GB。只收取实际使用的30GB存储。

  但是我们通过Azure管理界面,只能知道VHD的容量大小。并不知道实际使用容量。

  笔者在这里提供一个Sample Code,可以计算某个VHD的实际使用容量。

  我们需要准备:

  1.Azure China 存储账号

  2.Azure China 存储账号密码

  3.VHD所在的Container Name

  4.VHD Name

  

  将配置信息保存在App.config文件里:

<appSettings>
    <add key="AccountName" value="leivms"/>
    <add key="AccountKey" value="storagekey"/>
    <add key="ContainerName" value="vhds"/>
    <add key="VHDName" value="Lei2012CHNVM-Lei2012CHNVM01-2016-01-25.vhd"/>
  </appSettings>

  Sample Code如下:

        private string accountname;
        private string accountkey;
        private string containername;
        private void Form1_Load(object sender, EventArgs e)
        {
            Calculate();
        }

        private void Calculate()
        {
            var container = GetContainer();
            var cloudpageblob = container.GetPageBlobReference(ConfigurationManager.AppSettings["VHDName"].ToString());

            //OutPut VHD Actual Size
            string actualSize = GetFormattedDiskSize(GetActualDiskSize(cloudpageblob));
        }

        private CloudBlobContainer GetContainer()
        {
            //Get config from Web.Config
            accountname = ConfigurationManager.AppSettings["AccountName"].ToString();
            accountkey = ConfigurationManager.AppSettings["AccountKey"].ToString();
            containername = ConfigurationManager.AppSettings["ContainerName"].ToString();

            string connectionString = GenerateConnectionString();

            //Get Azure Storage Connection String
            var account = CloudStorageAccount.Parse(connectionString);
            var client = account.CreateCloudBlobClient();
            //Get BlobContainer Object
            return client.GetContainerReference(containername);
        }

        private string GenerateConnectionString()
        {
            StringBuilder sbuilder = new StringBuilder();
            sbuilder.Append(@"BlobEndpoint=https://");
            sbuilder.Append(accountname);
            sbuilder.Append(".blob.core.chinacloudapi.cn/");

            sbuilder.Append(@";QueueEndpoint=https://");
            sbuilder.Append(accountname);
            sbuilder.Append(".queue.core.chinacloudapi.cn/");

            sbuilder.Append(@";TableEndpoint=https://");
            sbuilder.Append(accountname);
            sbuilder.Append(".table.core.chinacloudapi.cn/");

            sbuilder.Append(";AccountName=");
            sbuilder.Append(accountname);

            sbuilder.Append(";AccountKey=");
            sbuilder.Append(accountkey);

            return sbuilder.ToString();
        }

        private long GetActualDiskSize(CloudPageBlob pageBlob)
        {
            pageBlob.FetchAttributes();
            return 124 + pageBlob.Name.Length * 2
               + pageBlob.Metadata.Sum(m => m.Key.Length + m.Value.Length + 3)
               + pageBlob.GetPageRanges().Sum(r => 12 + (r.EndOffset - r.StartOffset));
        }

        [DllImport("Shlwapi.dll", CharSet = CharSet.Auto)]
        public static extern long StrFormatByteSize(long fileSize, [MarshalAs(UnmanagedType.LPTStr)] StringBuilder buffer, int bufferSize);

        public static string GetFormattedDiskSize(long size)
        {
            var sb = new StringBuilder(11);
            StrFormatByteSize(size, sb, sb.Capacity);
            return sb.ToString();
        }

  运行结果:

  1.上图中,Lei2012CHNVM-Lei2012CHNVM01-2016-01-25.vhd这个Page Blob容量大小为127GB

  

  

  2.运行代码后,这个vhd的实际使用容量为10GB

  

  

  3.我们开启这台Windows虚拟机,显示C盘容量为9.58G

  

  参考资料:

http://fabriccontroller.net/calculating-how-much-space-a-windows-azure-disk-is-really-using/

时间: 2024-10-27 14:01:42

Windows Azure Storage (23) 计算Azure VHD实际使用容量的相关文章

Windows Azure Storage (20) 使用Azure File

<Windows Azure Platform 系列文章目录> 我们在传统IDC托管环境运维网站的时候,经常会遇到多台Web服务器实现负载均衡的时候,后面使用同一个网络存储(SAN).通过这种方式,可以解决文件同步的问题. 服务器部署图,如下图所示: 在Windows Azure公有云环境,想实现上面的架构会比较困难,主要原因有: 1.Azure公有云不允许用户把网络存储(SAN)放置在Azure数据中心 2.如果使用单独一台Azure Virtual Machine模拟网络存储,则这一台Az

使用Azure Storage Explorer备份Azure虚拟机VHD

复制VHD磁盘工具Azure Storage Explorer: 介绍 :http://azurestorageexplorer.codeplex.com/ 下载地址:http://azurestorageexplorer.codeplex.com/downloads/get/891668 复制方法如下:如果复制虚拟机的系统磁盘,请先关机. 填写基本信息: 关于上面的相关值,按下图一一对应填写: 输入存储账户名和访问密钥,选择Microsoft Azure China,然后点击Test Acce

Windows Azure Storage (19) 再谈Azure Block Blob和Page Blob

<Windows Azure Platform 系列文章目录> 请读者在参考本文之前,预习相关背景知识:Windows Azure Storage (1) Windows Azure Storage Service存储服务 最近被一些客户问到,什么场景下需要用到Azure Block Blob和Azure Page Blob?这里我简单总结一下. 一.Azure Block Blob (1)Azure Block Blob概念类似网盘,可以直接存放图片.文件.照片等二进制文件,并且可以直接被客

Azure Queue Storage 基本用法 -- Azure Storage 之 Queue

Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure File Storage 基本用法>中介绍了 File Storage 的基本用法,本文将介绍 Queue Storage 的主要使用方法. Queue Storage 是什么? Azure Queue Storage 是一个存储大量消息的存储服务,这些消息可以在任何地方通过 HTTP/HTTPS 访问.每条消息最大 64K,消息

Azure File Storage 基本用法 -- Azure Storage 之 File

Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure Blob Storage 基本用法>中介绍了 Blob Storage 的基本用法,本文将介绍 File Storage 的主要使用方法. File Storage 是什么? Azure File Storage 是一个通过 Server Message Block (SMB) 协议提供云端文件共享的服务.通过 File Stor

Azure Storage用法:使用Blob Storage

Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在C# 消息队列-Microsoft Azure service bus 服务总线中介绍了 Queue Storage 的基本用法,本文将介绍 Blob Storage 的主要使用方法. Blob Storage可以看做是云端的文件系统.与桌面操作系统上不同,我们是通过REST API来进行对文件的操作.有关REST API的详细信息,请参见Blo

[转]探索 Windows Azure Storage

本文转自:https://msdn.microsoft.com/zh-tw/jj573842 概觀 儲存服務 (Storage services) 在 Windows Azure 運算模擬器中提供了可永續保存並強固的儲存能力,並且包含了 blob,table 與 queue 等服務.另外,使用 Windows Azure Drives,您執行於雲端的 Windows Azure 應用程式將會使用 NTFS APIs 存取植基於 blob storage 的穩固磁碟機.在本手作實驗中,您將會在本地

Windows Azure Cloud Service (12) PaaS之Web Role, Worker Role, Azure Storage Queue(下)

<Windows Azure Platform 系列文章目录> 本章DEMO部分源代码,请在这里下载. 在上一章中,笔者介绍了我们可以使用Azure PaaS的Web Role和Worker Role来处理复杂的业务逻辑 -Web Role可以快速响应前端的业务请求,并将输入保存到Azure Storage Queue中 -Worker Role将数据从Queue中读取,可以在后端处理复杂的业务逻辑 -可以看到,Azure Storage Queue是前端业务逻辑和后端业务处理的桥梁 该架构图

Windows Azure Storage (18) 使用HTML5 Portal的Azure CDN服务

<Windows Azure Platform 系列文章目录> 熟悉Microsoft Azure的读者都知道,Azure在以前的Silverlight Management Portal中,已经提供CDN服务.但是自从改版成HTML5的Management Portal之后,CDN从Azure界面中消失了,用户没法创建新的CDN服务. 好消息是,最近HTML5的Management Portal又重新提供了Azure CDN服务,相比之前的Silverlight版本有一些区别,笔者在这里向大