2021-05-12 14:32:11
Linux 檔案系統(inode和block)
先說一下格式化:每種作業系統所設定的檔案屬性/許可權並不相同,為了存放這些檔案所需的資料,因此就需要將分割區格式化,以成為作業系統能夠利用的檔案系統格式。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
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-12/125776.htm
相關文章