linux文件系統(inode block superblock)
先說一下格式化:每種操作系統所設置的文件屬性/權限並不相同,為了存放這些文件所需的數據,因此就需要將分區格式化,以成為操作系統能夠利用的文件系統格式。linux的文件格式為Ext2/Ext3,現在好像已經到了Ext4.windows 操作系統為vfat或者NTFS。
linux文件系統:
操作系統的文件數據除了文件實際內容外,還有非常多的屬性,如文件權限(rwx)與文件屬性(所有者、群組、時間參數等)。
文件系統通常將這兩部分數據存放在不同的塊。權限屬性放到 inode 中,實際數據放到 data block 中。
還有一個超級塊(super block)會記錄文件系統的整體信息,包括 inode 與block 的數量、使用量等。
inode:記錄文件屬性,一個文件占用一個inode,同時記錄此文件的數據所在的block號碼;
block:實際記錄文件的內容,若文件太大時會占用多個 block ;
super block:記錄文件系統的整體信息,包括inode/block 的總量、使用量、剩余量,以及文件系統的格式與相關信息等。
每個inode與block都有編號,而每個文件系統都會占用一個inode,inode中有文件數據放置的block號碼。我們可以找到文件的inode,然後找出文件所放置數據的block號碼,之後讀出數據。這種數據訪問方式成為索引式文件系統。這種文件系統一般不太需要經常進行磁盤碎片整理。
而 U 盤等為FAT文件格式,每個block號碼都記錄在前一個block號碼中,因此數據的讀取性能較差,用久了得進行碎片整理。
linux的Ext2文件系統一開始就將 inode 與block規劃好了,除非重新格式化(或者利用resize2fs等命令更改文件系統大小),否則 inode 與block 固定後就不再變動。
如果文件系統太大,將所有的inode 與 block 放在一起很難管理,因此Ext2文件系統在格式化的時候基本上是區分為多個塊組(block group),每個塊組都有獨立的inode/block/super block系統。
data block (數據塊)
Ext2 文件系統支持的block 有 1K,2K,4K三種。在格式化時 block已經固定,且每個block都有編號。但要注意,由於block大小不同,會導致該文件系統能夠支持的最大磁盤容量與最大單一文件容量並不相同。
使用的block太小,則一個文件要用多兩個block,inode 記錄也會增加,降低讀寫性能。
若block太大,文件小的時候則會使剩余空間不能用了,會浪費資源。
inodetable (inode表格)
再說一下inode.inode記錄的文件數據至少要包含以下內容:
該文件的訪問模式;
該文件的所有者與所有組;
該文件的大小;
該文件的創建或者狀態改變時間(ctime);
最近一次的讀取時間(atime);
最近修改時間(mtime);
該文件真正內容的指向。
inode 還有一下特色:
每個inode大小均固定為 128bytes;
每個文件都會占用一個inode;
系統讀文件時需要先找到 inode,並分析inode所記錄的權限與用戶是否符合,若符合才能夠讀取 block的內容。
但是有一個問題,需要記錄的文件屬性特別多,而且一個文件可能有很多很多block,而inode又太小(記錄一個block要用4byte),怎麼辦?linux的解決辦法是:將inode記錄block號碼的區域定義為12個直接、一個間接、一個雙間接與一個三間接記錄區。總共可記錄的block數量為:12+256+256*256+256*256*256(K)=16G 這只符合block大小為1K時的情況。
Superblock (超級塊)
這裡面記錄文件系統的整體情況。比如文件系統的掛載時間、最近一次寫入數據的時間、最近一次檢驗磁盤(fsck)的時間等。還有一個validbit數值,若此文件系統已經被掛載,validbit的值為 0 ,若未被掛載,則validbit值為 1 。
了解了文件系統的概念之後,當然是要查看這個文件系統,用下面的命令:
#dumpe2fs [-bh] 設備文件名
-b列出保留為壞道的部分
-h僅列出superblock的數據,不會列出其他的區段內容。
例如:
#dumpe2fs /dev/hdc2