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

  

  创建Visual Studio Windows Form项目,Nuget增加Azure Storage引用。图略。

  将配置信息保存在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

  

  

 

 

 

  参考资料:

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

 


本文转自Lei Zhang博客园博客,原文链接:http://www.cnblogs.com/threestone/p/5179832.html,如需转载请自行联系原作者

目录
相关文章
|
Linux C++ Windows
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
138 0
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
|
10月前
|
安全 Windows
【Azure Cloud Service】在Windows系统中抓取网络包 ( 不需要另外安全抓包工具)
通常,在生产环境中,为了保证系统环境的安全和纯粹,是不建议安装其它软件或排查工具(如果可以安装,也是需要走审批流程)。 本文将介绍一种,不用安装Wireshark / tcpdump 等工具,使用Windows系统自带的 netsh trace 命令来获取网络包的步骤
204 32
|
10月前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
160 11
|
PHP Windows
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
209 1
|
网络安全 API 数据安全/隐私保护
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
114 0
|
Shell PHP Windows
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
109 0
|
存储 Linux Windows
【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
111 0
|
4月前
|
安全 数据安全/隐私保护 虚拟化
Windows Server 2022 中文版、英文版下载 (2025 年 5 月更新)
Windows Server 2022 中文版、英文版下载 (2025 年 5 月更新)
724 2
|
6月前
|
Unix 虚拟化 Windows
Windows Server 2025 中文版、英文版下载 (2025 年 3 月更新)
Windows Server 2025 中文版、英文版下载 (2025 年 3 月更新)
317 4
Windows Server 2025 中文版、英文版下载 (2025 年 3 月更新)
|
6月前
|
安全 数据安全/隐私保护 虚拟化
Windows Server 2022 中文版、英文版下载 (2025 年 3 月更新)
Windows Server 2022 中文版、英文版下载 (2025 年 3 月更新)
371 4
Windows Server 2022 中文版、英文版下载 (2025 年 3 月更新)