Linux文件數據除了文件實際內容外,還含有很多的屬性,比如操作權限rwx與文件屬性(所有者,群組和時間參數等)
其中權限與屬性會放在iNode中,而實際數據則放在data block中,另外還有一個超級塊會記錄整個文件系統的整體信息,包括inode和data block的使用量等
inode中有文件數據防止的block號碼,如果找到文件的inode的話,自然就知道這個文件所放置的數據的block號碼,當然就可以讀出文件的實際數據了。
這數據該訪問的方法稱之為索引式文件系統 indexed allocation
其他常用的文件系統有FAT的文件系統,常用於U盤,這種格式的文件系統沒有inode的存在,因此,fat沒辦法將文件的所有block在一開始全部讀出,每個block號碼都記錄在前一個block中。如果一個文件的數據寫入block較為分散,那麼磁盤磁頭將無法再磁盤轉一圈能夠讀到所有數據,因此磁盤會多轉幾圈才能完整的讀取這個文件的內容。
所謂的“碎片整理”,就是文件寫入block太過於離散,因此文件讀取的性能將會變得很差,可以通過碎片整理景同一個文件的block匯合在一起,FAT系統需要經常碎片整理。而ext2系統格式索引式文件系統不需要。
Linux的ex2文件系統
在格式化的時候去區分為多個塊組,每個塊組都有獨立的inode/block/superrblock系統
data block
在ext2系統中支持的block大小有1KB,2KB,4KB三種。在格式化的時候block的大小已經固定好了。
且,每個block最多只能防止一個文件的數據;若文件大於一個block,一個文件會占用多個block,而文件小於一個block,則block的剩余空間不能夠被使用。也就是浪費了。
因此大的block會造成浪費,而過小的block會導致過多的block,而inode也會記錄更多的block號碼,導致讀寫性能下降。
因此在進行文件系統格式化時,要想好文件系統的使用情況。
inode
固定大小為128bytes
每個文件只能占用一個inode
如果block特別多,inode怎麼儲存,因為inode記錄一個block號碼要花掉4bytes。
系統將inode記錄block號碼的區域定義為12個直接,一個間接,一個雙間接,一個三間接記錄區。
間接就是再拿一個block當做記錄block號碼的記錄區,雙間接和三間接同理。
這樣一來,如果以較小的1kb的block來說,一個inode可以指定16GB的block大小,也就是16GB的文件大小
superblock
記錄整個文件系統相關信息的地方,包括有
block和inode的總量
未使用和已使用的inode,block數量
block和inode的大小等