釋放虛擬磁盤(pán)未使用空間來(lái)減少計(jì)費(fèi)容量

一些 Azure 上的虛擬機(jī)用戶(hù)遇到過(guò)一個(gè)令人困惑的虛擬磁盤(pán)計(jì)費(fèi)問(wèn)題伤塌。一旦寫(xiě)入大量數(shù)據(jù)使得磁盤(pán)容量變大后,即使刪除那些數(shù)據(jù)轧铁,仍會(huì)一直按照最大時(shí)得磁盤(pán)容量計(jì)費(fèi)每聪。這實(shí)際上是由于一部分虛擬機(jī)上的操作系統(tǒng)不支持一些必要的功能或用戶(hù)沒(méi)有做一些磁盤(pán)維護(hù)所致的。

在 Azure 上,如果我有一個(gè) 100 GB 的虛擬磁盤(pán)药薯,里面實(shí)際只保存了 20 GB 的數(shù)據(jù)绑洛,這個(gè)磁盤(pán)的實(shí)際大小會(huì)是 20 GB,也只會(huì)以 20 GB 計(jì)費(fèi)(除非這個(gè)磁盤(pán)由高級(jí)存儲(chǔ)帳戶(hù)提供支持)童本。然而當(dāng)我再加入 60 GB真屯,然后刪除 30 GB 后,這個(gè)磁盤(pán)的大小仍會(huì)是 80 GB 而不是 50 GB 穷娱。它的原理是這樣的:

虛擬磁盤(pán)在 Azure 上是作為頁(yè) Blob 來(lái)存儲(chǔ)的绑蔫。頁(yè) Blob 是一種稀疏的存儲(chǔ)方式,只有實(shí)際寫(xiě)入數(shù)據(jù)的容量會(huì)被計(jì)費(fèi)泵额。這就是為什么上面的例子中一開(kāi)始以 20 GB 計(jì)費(fèi)配深。在普通的文件系統(tǒng)中,當(dāng)一個(gè)文件被刪除后嫁盲,它只是被標(biāo)記為刪除篓叶,而實(shí)際的存儲(chǔ)介質(zhì)上的數(shù)據(jù)不會(huì)被清空。這也是為什么我們能通過(guò)一些反刪除軟件來(lái)恢復(fù)已經(jīng)刪除的文件亡资。在頁(yè) Blob 這樣的稀疏存儲(chǔ)系統(tǒng)中也是一樣的澜共,它的存儲(chǔ)結(jié)構(gòu)如下圖所示,包含了 Header, Footer 和 Data blocks锥腻。我們?cè)趯?duì)它執(zhí)行寫(xiě)操作時(shí)嗦董,文件系統(tǒng)會(huì)去尋找符合待寫(xiě)入文件大小的連續(xù)數(shù)據(jù)塊。假設(shè)一個(gè)文件數(shù)據(jù)被寫(xiě)入了 Data Block i ~ Data Block i+k瘦黑,當(dāng)該文件被刪除后京革,這些 Data Block 并不會(huì)被完全釋放,與普通文件系統(tǒng)類(lèi)似幸斥,它們只是被標(biāo)記為可寫(xiě)數(shù)據(jù)塊匹摇。這就導(dǎo)致在計(jì)算存儲(chǔ)使用量時(shí),這部分容量仍然被計(jì)算在內(nèi)甲葬。 Azure 虛擬機(jī)作為一個(gè) IaaS廊勃,沒(méi)有操作系統(tǒng)的配合無(wú)法從外部判斷哪些空間可以釋放。

為了改善這個(gè)問(wèn)題经窖,Azure 虛擬機(jī)支持了 TRIM 功能坡垫。這個(gè)功能原先用于來(lái)自于固態(tài)硬盤(pán)(SSD),用于釋放寫(xiě)入過(guò)的空間画侣。在 Azure 上冰悠,虛擬機(jī)操作系統(tǒng)通過(guò)這個(gè)命令來(lái)告知頁(yè) Blob 哪些空間可以釋放,從而減少計(jì)費(fèi)容量∨渎遥現(xiàn)在大部分 Azure 上由 Microsoft 提供的映像所使用的操作系統(tǒng)都支持 TRIM 功能溉卓,包括所有 Windows 的映像皮迟,和較新的 Linux 映像(如所有 UBUNTU,centos 7.2桑寨,和 SUSE Linux Enterprise Server 12)伏尼。對(duì) TRIM 功能支持的確切版本信息,請(qǐng)查詢(xún)具體 Linux 發(fā)行版本提供商的技術(shù)文檔尉尾。對(duì)于不支持的 TRIM 的 Linux 版本烦粒,可嘗試安裝Linux Integration Services Version 4.1 for Hyper-V驅(qū)動(dòng),增加對(duì) TRIM 的支持代赁。

在 Windows 系統(tǒng)中,這個(gè)功能是通過(guò)驅(qū)動(dòng)器優(yōu)化提供的兽掰,默認(rèn)每周會(huì)自動(dòng)執(zhí)行一次芭碍。當(dāng)然也可以在“控制面板->系統(tǒng)和安全->對(duì)你的驅(qū)動(dòng)器進(jìn)行碎片整理和優(yōu)化”中進(jìn)行手動(dòng)執(zhí)行或更改設(shè)置。另一個(gè)必要條件是啟用 UnMap孽尽,因?yàn)樵?Azure 虛擬機(jī)上是默認(rèn)不啟用的窖壕,需要通過(guò)以下命令啟用。

復(fù)制

fsutil behavior set DisableDeleteNotify 0

在支持 TRIM 功能的 Linux 系統(tǒng)中杉女,可以用fstrim命令來(lái)執(zhí)行瞻讽。例如對(duì)一個(gè)掛載在 /mnt/data 的 Azure 磁盤(pán)執(zhí)行TRIM操作可以用以下命令:

復(fù)制

sudo /sbin/fstrim /mnt/data

現(xiàn)在我們明白了虛擬磁盤(pán)計(jì)費(fèi)的原理,就可以理解導(dǎo)致“已釋放”空間被計(jì)費(fèi)問(wèn)題的原因熏挎。為了減少計(jì)費(fèi)容量速勇,首先要確定操作系統(tǒng)是否支持 TRIM 功能。尤其在 Linux 的情況下坎拐,各種不同的系統(tǒng)和版本的支持情況都略有不同烦磁,需要用戶(hù)自己根據(jù)實(shí)際配置去確認(rèn)和啟用。如果系統(tǒng)支持哼勇,還須在必要時(shí)去執(zhí)行它都伪。為了方便維護(hù),可以建一個(gè)計(jì)劃任務(wù)來(lái)定期執(zhí)行积担。 最后陨晶,筆者再介紹一個(gè)用于查詢(xún) Azure 上的虛擬磁盤(pán)實(shí)際可計(jì)費(fèi)大小的工具https://github.com/sandrinodimattia/WindowsAzure-VhdSize/releases/tag/v1.0。它由 Azure MVP帝璧,Sandrino Di Mattia 開(kāi)發(fā)先誉,默認(rèn)用于國(guó)際版 Azure,也可用于中國(guó)版聋溜。用法:wazvhdsize.exe <存儲(chǔ)賬戶(hù)名> <訪(fǎng)問(wèn)密鑰>

常見(jiàn)問(wèn)題

問(wèn):如果在虛擬機(jī)上掛載一個(gè) 100 GB 的數(shù)據(jù)盤(pán)谆膳,是只對(duì)使用的部分收費(fèi),還是整個(gè) 100 GB 收費(fèi)撮躁?

答:如果您的存儲(chǔ)賬號(hào)類(lèi)型是高級(jí)存儲(chǔ)漱病,那么我們會(huì)按照磁盤(pán)大新蛭怼(如 P10,P20, P30)收取每月固定費(fèi)用杨帽;如果您的存儲(chǔ)賬號(hào)是其他類(lèi)型(比如普通賬號(hào))漓穿,則按照您的實(shí)際使用量進(jìn)行收費(fèi)。

問(wèn): Azure 存儲(chǔ)是如何統(tǒng)計(jì)磁盤(pán)計(jì)費(fèi)容量的注盈?

答:請(qǐng)參考這篇文檔晃危,里面詳細(xì)闡述了存儲(chǔ)容量的計(jì)算算法。算法的 PowerShell 實(shí)現(xiàn)樣例可以在這里下載老客。

參考文獻(xiàn)

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

立即訪(fǎng)問(wèn)http://market.azure.cn

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末僚饭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子胧砰,更是在濱河造成了極大的恐慌鳍鸵,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尉间,死亡現(xiàn)場(chǎng)離奇詭異偿乖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)哲嘲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)贪薪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人眠副,你說(shuō)我怎么就攤上這事画切。” “怎么了囱怕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵槽唾,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我光涂,道長(zhǎng)庞萍,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任忘闻,我火速辦了婚禮钝计,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘齐佳。我一直安慰自己私恬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布炼吴。 她就那樣靜靜地躺著本鸣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪硅蹦。 梳的紋絲不亂的頭發(fā)上荣德,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天闷煤,我揣著相機(jī)與錄音,去河邊找鬼涮瞻。 笑死鲤拿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的署咽。 我是一名探鬼主播近顷,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼宁否!你這毒婦竟也來(lái)了窒升?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤慕匠,失蹤者是張志新(化名)和其女友劉穎异剥,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體絮重,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年歹苦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了青伤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡殴瘦,死狀恐怖狠角,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚪腋,我是刑警寧澤丰歌,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站屉凯,受9級(jí)特大地震影響立帖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悠砚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一晓勇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧灌旧,春花似錦绑咱、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至衡蚂,卻和暖如春窿克,著一層夾襖步出監(jiān)牢的瞬間骏庸,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工让歼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敞恋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓谋右,卻偏偏與公主長(zhǎng)得像硬猫,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子改执,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容