Windows Azure Storage (23) 计算Azure VHD实际使用容量
2016-02-03 15:39
387 查看
《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文件里:
Sample Code如下:
运行结果:
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/
对于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/
相关文章推荐
- 奇怪的Lisp和难懂的计算机程序的构造和解释
- Win8系统怎么关闭家庭组服务?Win8关闭家庭组服务的方法
- 限时抢购秒杀系统架构分析与实战
- windbg的version命令
- Rocchio 算法
- 自己是自己的品牌
- Android中adb命令
- 【一步一步学NPOI】6.Excel显示比例与密码
- Ubuntu server 搭建Git server【转】
- Oracle数据库全球化
- 大题---机器人行走
- CC++代码优化的27个建议
- Android 测试 Appium、Robotium、monkey等框架或者工具对比
- ubuntu完美搭建git服务器【转】
- rank() over(partition)的使用
- windbg的lastevent命令
- ViewPager 图片切换
- Using TurboVNC 0.6 and VirtualGL 2.1.4 to run OpenGL Application Remotely on CentOS
- Linux流量监控工具 - iftop (最全面的iftop教程)
- 206. Reverse Linked List