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,如需转载请自行联系原作者

目录
相关文章
|
3月前
|
Linux C++ Windows
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
|
10天前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
34 11
|
3月前
|
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. 错误
|
3月前
|
网络安全 API 数据安全/隐私保护
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
|
3月前
|
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.
|
3月前
|
存储 Linux Windows
【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
|
3月前
|
应用服务中间件 nginx Windows
【Azure 应用服务】在App Service for Windows中实现反向代理
【Azure 应用服务】在App Service for Windows中实现反向代理
|
6天前
|
监控 安全 网络安全
Windows Server管理:配置与管理技巧
Windows Server管理:配置与管理技巧
26 3
|
9天前
|
存储 安全 网络安全
Windows Server 本地安全策略
由于广泛使用及历史上存在的漏洞,Windows服务器成为黑客和恶意行为者的主要攻击目标。这些系统通常存储敏感数据并支持关键服务,因此组织需优先缓解风险,保障业务的完整性和连续性。常见的威胁包括勒索软件、拒绝服务攻击、内部威胁、恶意软件感染等。本地安全策略是Windows操作系统中用于管理计算机本地安全性设置的工具,主要包括用户账户策略、安全选项、安全设置等。实施强大的安全措施,如定期补丁更新、网络分段、入侵检测系统、数据加密等,对于加固Windows服务器至关重要。
|
1月前
|
边缘计算 安全 网络安全