博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows Azure Storage (23) 计算Azure VHD实际使用容量
阅读量:7014 次
发布时间:2019-06-28

本文共 3502 字,大约阅读时间需要 11 分钟。

  《》

  

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

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

    

 

  举个例子:虚拟机操作系统的文件,对于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文件里:

 

  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

  

  

 

 

 

  参考资料:

     

 

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

你可能感兴趣的文章
用 kGDB 调试 Linux 内核
查看>>
ActiveMQ发布-订阅消息模式
查看>>
2017.3找工作面试记录-第一周(2)
查看>>
vuejs2.0子组件改变父组件的数据
查看>>
Java开发环境配置(4)--Maven安装 环境变量配置,本地仓库配置---插件安装
查看>>
【NIO】Java NIO之通道
查看>>
HDU 4287 Intelligent IME(map运用)
查看>>
[LeetCode] Subtree of Another Tree 另一个树的子树
查看>>
说说这些年做的云计算和大数据项目
查看>>
P1019 单词接龙
查看>>
linux下的开源移动图像监测程序--motion编译与配置【转】
查看>>
git的版本回退探索
查看>>
记一次docker问题定位(perf,iostat等性能分析)
查看>>
H3c 配置ssh acl
查看>>
【IntellJ IDEA】idea上 实现了Serializable接口,要自动生成serialVersionUID的方法
查看>>
帮助函数
查看>>
自己动手写Android插件化框架,让老板对你刮目相看
查看>>
[转]Object.keys()和for in的排序问题
查看>>
Dedecms判断当前栏目下是否有子栏目
查看>>
常见的加密和解密算法—AES
查看>>