释放虚拟磁盘未使用空间来减少计费容量

本文内容

常见问题

参考文献

一些 Azure 上的虚拟机用户遇到过一个令人困惑的虚拟磁盘计费问题。一旦写入大量数据使得磁盘容量变大后,即使删除那些数据,仍会一直按照最大时得磁盘容量计费。这实际上是由于一部分虚拟机上的操作系统不支持一些必要的功能或用户没有做一些磁盘维护所致的。

在 Azure 上,如果我有一个 100 GB 的虚拟磁盘,里面实际只保存了 20 GB 的数据,这个磁盘的实际大小会是 20 GB,也只会以 20 GB 计费(除非这个磁盘由高级存储帐户提供支持)。然而当我再加入 60 GB,然后删除 30 GB 后,这个磁盘的大小仍会是 80 GB 而不是 50 GB 。它的原理是这样的:

虚拟磁盘在 Azure 上是作为页 Blob 来存储的。页 Blob 是一种稀疏的存储方式,只有实际写入数据的容量会被计费。这就是为什么上面的例子中一开始以 20 GB 计费。在普通的文件系统中,当一个文件被删除后,它只是被标记为删除,而实际的存储介质上的数据不会被清空。这也是为什么我们能通过一些反删除软件来恢复已经删除的文件。在页 Blob 这样的稀疏存储系统中也是一样的,它的存储结构如下图所示,包含了 Header, Footer 和 Data blocks。我们在对它执行写操作时,文件系统会去寻找符合待写入文件大小的连续数据块。假设一个文件数据被写入了 Data Block i ~ Data Block i+k,当该文件被删除后,这些 Data Block 并不会被完全释放,与普通文件系统类似,它们只是被标记为可写数据块。这就导致在计算存储使用量时,这部分容量仍然被计算在内。 Azure 虚拟机作为一个 IaaS,没有操作系统的配合无法从外部判断哪些空间可以释放。

为了改善这个问题,Azure 虚拟机支持了 TRIM 功能。这个功能原先用于来自于固态硬盘(SSD),用于释放写入过的空间。在 Azure 上,虚拟机操作系统通过这个命令来告知页 Blob 哪些空间可以释放,从而减少计费容量。现在大部分 Azure 上由 Microsoft 提供的映像所使用的操作系统都支持 TRIM 功能,包括所有 Windows 的映像,和较新的 Linux 映像(如所有 UBUNTU,centos 7.2,和 SUSE Linux Enterprise Server 12)。对 TRIM 功能支持的确切版本信息,请查询具体 Linux 发行版本提供商的技术文档。对于不支持的 TRIM 的 Linux 版本,可尝试安装Linux Integration Services Version 4.1 for Hyper-V驱动,增加对 TRIM 的支持。

在 Windows 系统中,这个功能是通过驱动器优化提供的,默认每周会自动执行一次。当然也可以在“控制面板->系统和安全->对你的驱动器进行碎片整理和优化”中进行手动执行或更改设置。另一个必要条件是启用 UnMap,因为在 Azure 虚拟机上是默认不启用的,需要通过以下命令启用。

复制

fsutil behavior set DisableDeleteNotify 0

在支持 TRIM 功能的 Linux 系统中,可以用fstrim命令来执行。例如对一个挂载在 /mnt/data 的 Azure 磁盘执行TRIM操作可以用以下命令:

复制

sudo /sbin/fstrim /mnt/data

现在我们明白了虚拟磁盘计费的原理,就可以理解导致“已释放”空间被计费问题的原因。为了减少计费容量,首先要确定操作系统是否支持 TRIM 功能。尤其在 Linux 的情况下,各种不同的系统和版本的支持情况都略有不同,需要用户自己根据实际配置去确认和启用。如果系统支持,还须在必要时去执行它。为了方便维护,可以建一个计划任务来定期执行。 最后,笔者再介绍一个用于查询 Azure 上的虚拟磁盘实际可计费大小的工具https://github.com/sandrinodimattia/WindowsAzure-VhdSize/releases/tag/v1.0。它由 Azure MVP,Sandrino Di Mattia 开发,默认用于国际版 Azure,也可用于中国版。用法:wazvhdsize.exe <存储账户名> <访问密钥>

常见问题

问:如果在虚拟机上挂载一个 100 GB 的数据盘,是只对使用的部分收费,还是整个 100 GB 收费?

答:如果您的存储账号类型是高级存储,那么我们会按照磁盘大小(如 P10,P20, P30)收取每月固定费用;如果您的存储账号是其他类型(比如普通账号),则按照您的实际使用量进行收费。

问: Azure 存储是如何统计磁盘计费容量的?

答:请参考这篇文档,里面详细阐述了存储容量的计算算法。算法的 PowerShell 实现样例可以在这里下载

参考文献

Release unused space from your Azure Virtual Hard Disks to reduce their billable size, Sandrino Di Mattia, 2013-12-19

TRIM Support comes to Azure Virtual Machines, MikeWo, 2013-10-14

Disk Storage on Linux VMs in Azure,https://convective.wordpress.com/, 2014-5-27

共享

|

主题亮暗

中国区 Azure

常用操作指南

虚拟机

计算

虚拟机

Linux 虚拟机

Windows 虚拟机

基于 Azure 托管磁盘配置高可用共享文件系统

如何将使用托管磁盘虚拟机的 OS 盘挂载到其他虚拟机上

如何将同一 VNET 下的虚拟机从经典部署模型迁移到 Azure Resource Manager

如何将同一云服务下的虚拟机从经典部署模型迁移到 Azure Resource Manager

Azure 托管镜像和非托管镜像对比

理解托管磁盘的原理与优势

如何复制或导出托管磁盘

理解 Azure 平台中虚拟机的计算能力

虚拟机压力测试延迟高的可能原因及 ILPIP 配置 / 查询脚本

Azure 虚拟机诊断设置问题排查

Java 如何启用 ARM 虚拟机诊断

如何禁用 Azure 虚拟机的日期时间同步

理解 Azure 虚拟机的性能监视

通过 Powershell 来调整 ARM 模式下虚拟机的尺寸

如何定位虚拟机内部附加的数据磁盘

使用版本 1.0.0 的 Azure ARM SDK for Java 创建虚拟机时报错

Java 创建 ARM 虚拟机磁盘类型选择的问题

Python 基于固定 IP 来命名 ARM 虚拟机的实现

通过 Powershell 来替换 ARM 模式下虚拟机的网络接口

ARM 中可用性集使用的注意事项

ARM 虚拟机使用同一个公共 IP 访问公网的解决方案

使 Azure 虚拟机可 Ping 的方法

存储账户之间转移虚拟机

订阅无法在 ARM 模式下创建虚拟机,只能在 ASM 模式下创建 Azure VM 部署

虚拟就配置静态 IP 以后, 无法连接的问题解决

理解及快速测定 Azure 虚拟机的磁盘性能

如何为虚拟机附加磁盘

通过 PowerShell 的方式增加虚拟机终结点

如何调整虚拟机的尺寸

自动化实现定时关闭虚拟机

将虚拟机添加到可用性集中

释放虚拟磁盘未使用空间来减少计费容量

虚拟机规模集

应用服务

批处理

Service Fabric

云服务

网络

存储

Web + 移动

数据库

数据 + 分析

物联网

企业集成

安全性 + 标识

监视 + 管理

示例代码

其他

此页面有帮助吗?

是否

立即访问http://market.azure.cn

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容