EXT2/EXT3文件系統(一)


 

    整理自《鳥哥的Linux私房菜》,整理者:華科小濤http://www.cnblogs.com/hust-ghtao/微笑

 

1.文件系統概念引入

    文件系統是一種存儲和組織計算機數據的方法,它使得對其訪問和查找變得容易,文件系統使用文件樹形目錄的抽象邏輯概念代替了硬盤和光盤等物理設備使用數據塊的概念,用戶使用文件系統來保存數據不必關心數據實際保存在硬盤(或者光盤)的地址為多少的數據塊上,只需要記住這個文件的所屬目錄和文件名。在寫入新數據之前,用戶不必關心硬盤上的那個塊地址沒有被使用,硬盤上的存儲空間管理(分配和釋放)功能由文件系統自動完成,用戶只需要記住數據被寫入到了哪個文件中。

    我們都知道磁盤分區后還要進行格式化,之后操作系統才能夠使用這個分區。這是因為每種操作系統所設置的文件屬性/權限不同,為了存放這些數據所需要的數據,因此就要對分區進行格式化,以成為操作系統能夠利用的文件系統格式。

    文件數據除了文件的實際內容外,還含有文件權限(RWX)與文件屬性(所有者、群組、時間參數等)。文件系統通常會把這兩部分數據放到不同的塊,權限與屬性放置到inode中,至於實際數據則放置到data block中。另外,還有一個Superblock會記錄文件的整體信息,包括inode與block的總量、使用量、剩余量等。

    每個inode和block都有編號,這三個數據的意義簡要的說明如下:

  • superblock:記錄此文件的整體信息,包括inode/block的總量、使用量、剩余量,以及文件系統的格式與相關信息等;
  • inode:記錄文件的屬性,一個文件占用一個inode,同時記錄此文件的數據所在的block號碼;
  • block:實際記錄文件的內容,若文件太大時,會占用多個block。

    用於inode和block都有自己的編號,而每個文件都會占有一個inode,inode內則含有文件數據放置的block號碼。所以,如果能夠找到文件的inode,那么自然就會知道數據存放到哪些block了,也就可以對數據進行讀取。

    inode/block數據訪問示意圖:

                                      image

    從此圖我們可以看到,文件系統先格式化出inode與block的塊,假設一個文件的屬性與權限數據存放到inode4中,而inode4又記錄了文件數據的實際放置點為2,7,13,15這4個block號碼,此時操作系統就可以據此一下子將數據內容讀出來。這種數據訪問的訪問稱為“索引式文件系統”。

 

2.EXT2文件系統

    上面的示意圖,是將所有的inode和block都放到一起。但是如果文件系統很大時,inode和block的數量就會很多,將它們放在一起就不方便管理了。所以又提出了block group的概念,每個block group內都有獨立的inode/block/superblock系統。我們再看一下含有block group的文件系統示意圖:

                                      image

    注意,文件系統最前面有一個啟動扇區(boot sector),這個啟動扇區可以安裝引導裝在程序(這是個非常nice的設計,如此一來就能夠將不同的引導裝在程序安裝到個別的文件系統的最前端,而不用覆蓋掉MBR,這樣才能制作出多重引導的環境)。至於每一個block group的主要內容:

2.1 data block

    用來放置文件內容的地方,在EXT2文件系統中所支持的block大小有1KB,2KB及4KB。由於block大小的區別,會導致該文件系統能夠支持的最大磁盤容量和最大單一文件容量不同。因為block大小而產生的EXT2文件系統限制如下所示:

                             image

    除此之外對block的限制還包括:(1)原則上,block的大小與數量格式化完就不能變了;(2)每個block內最多只能存放一 個文件的數據;(3)如果文件大於block的大小,則會占用多個block;(4)若文件小於block大小,則該block的剩余空間就不能再用了。

2.2 inode table

    inode記錄的數據至少有下面這些:(1)該文件的訪問模式(RWX);(2)該文件的所有者(owner/group);(3)該文件的大小;(4)該文件創建或狀態改變的時間(ctime);(5)最后一次的讀取時間(atime);(6)最近修改的時間(mtime);(7)定義文件特性的標志,如SetUID;(8)該文件真正內容的指向。

    下面讓我們來分析一下inode/block與文件大小的關系。inode大小128B,記錄一個block用4B。假設文件很大,將需要很多記錄,為了解決這個問題,操作系統將inode記錄block號碼的區域定義為12個直接、一個間接、一個雙間接和一個三間接記錄區。如圖所示:

 

                                       image

 我們計算一下這樣的inode能指定多少block?我們假設block大小為1KB:

  • 12個直接:12*1KB=12KB
  • 間接:256*1K=256KB,每條block號碼花4B,因此1K大小記錄256個。
  • 雙間接:256*256*1K=256^2KB
  • 三間接:256*256*256=256^3KB
  • 總額=12個直接+間接+雙間接+三間接= 16GB

    此時我們知道當文件系統將block格式化為1K時,能夠容納的最大文件為16GB,和前面提到的相一致。但這個方法不能用在2K和4K大小的block的計算中,因為它們還會受到文件系統本身的限制。

   

   捕獲


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM