Windows Azure Storage (23) 计算Azure VHD实际使用容量
《Windows Azure Platform 系列文章目录》
对于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文件里:
<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 + pageBlob.Name.Length *
+ pageBlob.Metadata.Sum(m => m.Key.Length + m.Value.Length + )
+ pageBlob.GetPageRanges().Sum(r => + (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();
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/
Windows Azure Storage (23) 计算Azure VHD实际使用容量的更多相关文章
- Windows Azure Storage (24) 启用Azure Blob日志
<Windows Azure Platform 系列文章目录> 之前有一个业务需求,客户想知道Azure Storage是否有日志功能,可以检查某个Azure Blob文件在某个时间点被删 ...
- Windows Azure Storage (20) 使用Azure File实现共享文件夹
<Windows Azure Platform 系列文章目录> Update 2016-4-14.在Azure VM配置FTP和IIS,请参考: http://blogs.iis.net/ ...
- [New Portal]Windows Azure Storage (14) 使用Azure Blob的PutBlock方法,实现文件的分块、离线上传
<Windows Azure Platform 系列文章目录> 相关内容 Windows Azure Platform (二十二) Windows Azure Storage Servic ...
- 【Azure Developer】使用 Python SDK连接Azure Storage Account, 计算Blob大小代码示例
问题描述 在微软云环境中,使用python SDK连接存储账号(Storage Account)需要计算Blob大小?虽然Azure提供了一个专用工具Azure Storage Explorer可以统 ...
- Windows Azure Storage (19) 再谈Azure Block Blob和Page Blob
<Windows Azure Platform 系列文章目录> 请读者在参考本文之前,预习相关背景知识:Windows Azure Storage (1) Windows Azure St ...
- Azure Queue Storage 基本用法 -- Azure Storage 之 Queue
Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure File Storage 基 ...
- Azure File Storage 基本用法 -- Azure Storage 之 File
Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure Blob Storage 基 ...
- Azure Blob Storage 基本用法 -- Azure Storage 之 Blob
Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure Table storage ...
- Azure Table storage 基本用法 -- Azure Storage 之 Table
Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table,其中的 Table 就是本文的主角 Azure Tabl ...
随机推荐
- BeautifulSoup研究一
BeautifulSoup的文档见 https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/ 其中.contents 会将换行也记录为一个子节 ...
- 阿里开源消息中间件RocketMQ的前世今生-转自阿里中间件
昨天,我们将分布式消息中间件RocketMQ捐赠给了开源软件基金会Apache. 孵化成功后,RocketMQ或将成为国内首个互联网中间件在Apache上的顶级项目. 消息一出,本以为群众的反应是这样 ...
- MIT 6.828 JOS学习笔记11 Exercise 1.8
Exercise 1.8 我们丢弃了一小部分代码---即当我们在printf中指定输出"%o"格式的字符串,即八进制格式的代码.尝试去完成这部分程序. 解答: 在这个练 ...
- sencha touch的开源插件和例子
写了好久的sencha touch,没想到换工作竟然一年多没有搞了.因为项目的缘故收集了好多的组件,由于懒惰,没有整理,现在想想有点后悔了,再加上如果就这样丢弃,感觉有些遗憾,今天整理了一下放在git ...
- 【java.lang.UnsupportedClassVersionError】版本不一致出错
这种错误的全部报错信息: java.lang.UnsupportedClassVersionError: org/apache/lucene/store/Directory : Unsupported ...
- CVE-2010-3654分析及利用
三年前分析的一个漏洞,最近又温习一遍,这个flash中混淆漏洞的鼻祖,10年最经典的漏洞. 漏洞触发原因 该漏洞主要因为avm对返回的类没有进行校验,通过修改swf文件,实现Ref类和Origin类的 ...
- memcache的lru删除机制
惰性删除,get时才删除 LRU原理:当某个单元被请求的时候,维护一个计数器,通过计数器来判断最近谁最少使用,那就把谁踢出去. 注:即使某个key设置的永久有效,也会被踢出来,这个就是永久数据被踢的现 ...
- iOS之 利用通知(NSNotificationCenter)获取键盘的高度,以及显示和隐藏键盘时修改界面的注意事项
我们在开发中会遇到这样的情况:调用键盘时需要界面有一个调整,避免键盘遮掩输入框. 但实现时你会发现,在不同的手机上键盘的高度是不同的.这里列举一下: //获取键盘的高度 /* iphone 6: 中文 ...
- 从零开始山寨Caffe·拾:IO系统(三)
数据变形 IO(二)中,我们已经将原始数据缓冲至Datum,Datum又存入了生产者缓冲区,不过,这离消费,还早得很呢. 在消费(使用)之前,最重要的一步,就是数据变形. ImageNet Image ...
- 还原后缀名为.bak的数据库备份文件
1.打开SQL Server Management Studio,随便右击击一个数据库选择任务-->还原-->数据库 4.在弹出来的窗口中的源选项中选择设备-->点选择设备--> ...