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