ext2/3文件系統存儲,查找,新建,刪除文件機制詳解

ext2文件系統分爲兩個區域:元數據區和數據區



         元數據區包含索引節點區index node,索引位圖區inode bitmap,塊位圖區block bitmap,分別存儲:

         index node:存儲文件的inode節點信息,並指向相應節點塊所處的位置,以及文件的訪問信息(包括accesss,modefy,change時間戳等),可以用stat 文件名來查看相關信息。

         inode bitmap:存儲inode 節點是否被使用的信息,每個inode位佔用1位,inode位爲0表示該inode未被使用,inode位爲1表示該inode已被使用。

         block bitmap :存儲block塊是否被使用的信息,每個block位佔用1位,block數據塊位爲0表示該數據塊未存儲數據,否則該數據塊已存儲數據。

 

         數據區包含目錄和文件,分別存儲:

         目錄存儲當前目錄下文件/一級子目錄的名稱(右)和對應的inode號(左),模型如下:


       文件:存儲文件包含的數據,但不包含文件名,時間戳等信息。

 

         在新建文件系統時應注意

          (1)適當指定塊大小,以防文件多次存儲過程中造成空間碎片化導致空間嚴重浪費的情況;當系統主要用於存儲大文件時,可以增大塊大小,減少存取頻率,加快存取速度;當主要用於存儲小文件時,儘量減小塊大小,較少磁盤碎片化現象,提高磁盤空間利用率。

          (2)Inode數和block數應該保持1:1的對應關係,這樣才能保證有足夠的inode節點記錄block塊存儲位置,同時又不至於過多的inode節點數造成空間的浪費;

          (3)創建文件系統指定了Inode節點數和Block塊大小和Block塊數後,系統會自動爲inode位圖和block位圖分配空間,用來實現inode索引節點和block數據塊的使用情況的監控;

        

基於ext2文件系統的文件查找

         /跟路徑可以自動尋址,找到相應的inode節點;

         例:尋找/var/log/message文件

         先尋址根目錄,假設根目錄inode號爲1,在數據區1號塊下尋找var目錄,對應節點爲90,回到inode索引區,找到var目錄(90號)對應的inode節點號97:




到數據區97號block塊下尋找log目錄,對應節點爲105,回到索引區,找到log目錄(105號)對應的inode節點號133:



到數據區133號block塊下尋找message文件,對應節點爲138,回到索引區,找到message文件(138號)對應的inode節點號155:



通過inode索引找到message文件存儲的位置155號block塊:


基於ext2文件系統的文件新建:

  例:新建文件/tmp/myFile.txt

  搜索inode位圖表,定位到值爲0的位,找到並標記inode節點索引區對應的節點號121,以及數據區塊號157



先尋址根目錄,假設根目錄inode號爲1,在數據區1號塊下尋找tmp目錄,對應節點爲56,回到inode索引區,找到tmp目錄(56號)對應的inode節點號78:



到數據區78號block塊下新建文件名myFile.txt,對應節點號爲121,回到索引區,找到myFile.txt文件(121號)對應的塊號157號:


假設每個數據塊4k,myFile.txt文件大小爲20k.在數據區爲該文件分配5個block塊:157—161號block塊,並將數據寫入block塊中。與此同時,將inode 位圖表中相應bit位置爲1。




基於ext2文件系統的文件刪除:

例:刪除/etc/initrd文件

1)根據ext2文件系統尋址方式找到initrd文件;

2)將相應inode位圖表中對應該Inode節點的bit位置爲0即可。



:這種情況下,block塊中的數據在下次新的數據填充進來之前不會被清楚掉,依然保存在block數據塊中。只是inode位圖表相應bit位被置爲0。這種刪除文件的方式加快了刪除文件的效率,新文件創建時,直接向相應的block塊中填充數據,就會覆蓋掉原有的數據。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章