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