元資料(metadata)是描述其它資料的資料(data about other data),或者說是用於提供某種資源的有關資訊的結構資料(structured data)。
檔案系統管理思想的精髓就在於它的鍊錶、b樹和位圖等結構,也就是元資料(metadata),以及對這些元資料的管理方式。檔案系統其實對底層磁碟是有點「恐懼」的,我們可以計算以下,乙個100gb的磁碟上,有超過2億個扇區(乙個扇區512byte)。檔案系統時如何管理這2億個扇區,又如何知道某個扇區正在使用呢?如果使用的話,時分配給哪個檔案或者檔案的一部分呢?
檔案系統首先將扇區組合成更大的邏輯塊來降低管理規模。
ntfs最大每個塊可以到4kb,也就是8個扇區一組形成乙個簇(塊,block)。這樣,2億的管理規模便會除8,縮小到1.2萬的管理規模,雖然儲存空間可能有所浪費,但是切實降低了管理成本。
其次,檔案系統會建立管理儲存空間上所有簇(塊)的位**件,這個檔案有固定的入口,檔案系統能在1.2千萬個塊中快速定位到這個檔案入口並讀寫。位**件中每個位代表卷上的乙個簇(或者物理扇區,視設計不同而決定),如果簇正在被某個檔案使用,這個簇在位圖中對應的值就為1;否則為0。
再次,檔案系統還儲存乙份檔案和其對應簇號的對映鏈,這個對映鏈本身以及簇位圖本身也是檔案,也要有自己的對映鏈,所以針對這些重要的元資料,必須有乙個固定的入口,用來讓檔案系統程式讀入並且遍歷所有檔案系統元資料。通常將這個初始固定位址入口稱為root inode,不同作業系統有具體實現方式不同。
當向卷中寫入乙個新檔案,檔案系統首先會查詢簇位圖,找到位置為0所對應的簇號,並計算所需的空間,然後分配這些簇號給這個檔案。它首先將檔案實體資料寫入對應的簇,然後再去檔案——簇號對映圖中更新,將新檔案與其對應的簇對映關係記錄下來,最後到簇位圖中將這些簇對應的位的值從0改為1。如果要刪除這個檔案,則直接再inode鏈中將這個檔案的inode抹掉即可,然後再簇位圖中將對應簇的位值從1改為0。
檔案系統並不會抹掉這個被刪除檔案所對應卷上的簇中的實際資料,如果用扇區讀寫軟體來提取這個簇,就會得到這個檔案的部分內容。雖然這些簇中依然有內容,但是對於檔案系統來說,這些簇時可重用的,一旦有新檔案寫入,新檔案的資料便會覆蓋原來簇中的資料。
所以,對於乙個檔案系統來說,最重要的不是卷簇中的資料,而是檔案——簇號對映鏈和位圖等這些元資料。比如,想要破壞某個檔案系統中的某個檔案,我們不必費勁地修改某個檔案對應簇中的實際內容,只需修改一下檔案——簇號對映鏈中關於這個檔案所對乙個的實際簇號的記錄即可,讓它指向其他簇號。
這樣,檔案讀出來的內容就不是原有內容。此外,如果修改了檔案系統中對應簇中的資料,檔案系統也根本感知不到這些動作,因為它所查詢的是檔案——簇號對映鏈,它只知道某個檔案對應著哪些簇,而不關心這些簇是否被改過,它想關心也無法關心。
VMware SDS 之一 什麼是VSAN
vsan可看成是一種vsphere storage,是vsphere虛擬機器後端的企業級高效能儲存。vsan是基於伺服器端儲存的共享分布式物件儲存系統,可以用來取代vsphere後端的外接磁碟陣列。vsan主要在vsphere環境裡使用。vmware vsan,全稱vmware virtual sa...
jmesa系列之一 什麼是Jmesa
jmesa是extremetable的作者基於extremetable並進行重寫的新專案。extremetable己停止更新。與 extremetable相同的是,jmesa同樣是乙個強大的table元件。而與extremetable根本不一樣的是,extremetable 是一套jsptaglib...
Github學習之一 什麼是Github
github是通過git進行版本控制的軟體源 託管服務。由github公司 曾稱logical awesome 的開發者chris wanstrath pj hyett和tom preston werner使用ruby on rails編寫而成。github通常用於軟體開發。github還支援以下格...