阿里云服務(wù)器中為什么文件系統(tǒng)和快照大小不一致?
在ECS實(shí)例內(nèi)刪除文件后再創(chuàng)建快照,發(fā)現(xiàn)快照容量并沒(méi)有變小。甚至快照比磁盤(pán)(EBS)占用空間大。本文提供了原因解釋供您參考。
原因分析
以下原因可能造成文件系統(tǒng)與快照大小不一致:
文件系統(tǒng)的元數(shù)據(jù)會(huì)占用磁盤(pán)空間。
?文件系統(tǒng)在初始化階段被寫(xiě)入大量數(shù)據(jù)塊(Block,指磁盤(pán)的邏輯塊地址LBA被塊存儲(chǔ)劃分為相同大小的塊),寫(xiě)入數(shù)據(jù)操作會(huì)占用磁盤(pán)空間。
?文件系統(tǒng)為了降低性能消耗,刪除文件時(shí)只在文件屬性中創(chuàng)建棄用標(biāo)記。磁盤(pán)無(wú)法感知?jiǎng)h除指令,Block仍然是已分配狀態(tài),同時(shí)Block會(huì)被拷貝到快照中,導(dǎo)致快照容量大于文件系統(tǒng)。
?虛擬化驅(qū)動(dòng)KVM的Virtio-block和Xen的Block-front等模塊不支持TRIM指令(磁盤(pán)I/O指令,提示LBA上的某段數(shù)據(jù)不再使用,可以被刪除),磁盤(pán)無(wú)法感知數(shù)據(jù)可以被刪除。
文件系統(tǒng)與磁盤(pán)和快照的關(guān)系
您在磁盤(pán)分區(qū)上創(chuàng)建的是文件系統(tǒng)。文件系統(tǒng)負(fù)責(zé)管理磁盤(pán)空間,管理操作最終均轉(zhuǎn)化為磁盤(pán)的I/O請(qǐng)求。磁盤(pán)會(huì)記錄Block狀態(tài),按需將臟數(shù)據(jù)一并拷貝到OSS,這就是創(chuàng)建快照的過(guò)程。下圖表示了文件系統(tǒng)與快照之間的關(guān)系:
說(shuō)明 上圖中,只要被寫(xiě)過(guò)數(shù)據(jù)的Block,即使在磁盤(pán)中的相關(guān)文件已經(jīng)被刪除,Block仍會(huì)被記錄到快照中。文件系統(tǒng)中所謂刪除只是在需要?jiǎng)h除的文件頭部做個(gè)標(biāo)記,讓您知道這塊空間可以利用了,不會(huì)減少磁盤(pán)本身的空間占用。
寫(xiě)入數(shù)據(jù)與磁盤(pán)格式化的關(guān)系
對(duì)分布式存儲(chǔ)系統(tǒng)而言,寫(xiě)入數(shù)據(jù)既包括寫(xiě)入業(yè)務(wù)數(shù)據(jù),也包括格式化磁盤(pán)等I/O操作。業(yè)務(wù)數(shù)據(jù)和文件系統(tǒng)均會(huì)占用磁盤(pán)空間。
一塊新磁盤(pán)或新磁盤(pán)分區(qū)在正常使用前,必須經(jīng)過(guò)初始化,并將數(shù)據(jù)結(jié)構(gòu)記錄到磁盤(pán)上。格式化的目的是建立文件系統(tǒng)。因此,在磁盤(pán)上建立文件系統(tǒng)意味著對(duì)磁盤(pán)有寫(xiě)入數(shù)據(jù)操作。不同的文件系統(tǒng)在格式化時(shí)寫(xiě)入的文件大小不同:
?Windows系統(tǒng)格式化(分為快速和正常格式化):
?快速格式化:只是為分區(qū)分配文件系統(tǒng),并重寫(xiě)目錄表。快速格式化占用的實(shí)際空間則相對(duì)較少。
?正常格式化:不但完成快速格式化工作,還逐扇區(qū)掃描分區(qū)以確定和標(biāo)記壞扇區(qū),填充磁盤(pán)空塊,相當(dāng)于寫(xiě)了磁盤(pán)全盤(pán)的數(shù)據(jù)量。此時(shí),第一份全量快照會(huì)近似于磁盤(pán)容量。
?Linux系統(tǒng)格式化:格式化磁盤(pán)后,實(shí)例沒(méi)有寫(xiě)入業(yè)務(wù)數(shù)據(jù)前,第一份快照的容量大小與磁盤(pán)文件系統(tǒng)格式有關(guān)。