linux磁盤及文件系統之二文件系統

文件系統

磁盤分區完成之後,需要進行格式化,之後操作系統才能使用這個分區,所謂的格式化就是創建文件系統格式,通常所說的格式化是指高級格式化。

高級格式化對應的是低級格式化,作用是在磁盤出廠的時候,進行劃分磁道形成簇。

傳統的方式中,一個分區就只能格式化爲一個文件系統格式,現在由於新技術的運用,現在也可以將一個分區格式化爲多個文件系統,比如LVM,也可以將多個分區合成一個文件系統,如LVMRAID。所以現在一般稱爲一個數據掛載點爲文件系統,而不是分區。 ---- 來自 《鳥哥的linux私房菜》

基本結構

下圖是linux常用文件系統示意圖。

在這裏插入圖片描述

  • MBR : Master Boot Record ,前一節已經說過了。

  • 塊組(block group): 文件系統一旦創建,就將inodeblock規劃好了,除非重新格式化(或者利用resize2fs等指令變更文件系統的大小),否則inodeblock固定後就不會再變動了。但是如果一個分區大小成百上千GB的時候,將會產生巨量的inodeblock,查找定位的效率就會收到影響,也不利於管理。所以就有了塊組概念。

    每個塊組都有自己獨立的inode、塊(block)、超級塊(superblock)系統。這樣就比較容易查找數據和管理。

  • 元數據區(inode table) : inode的大小是固定的,切在被創建的時候就確定了,不同文件系統的inode大小又有所不同,一般是128字節或者256字節。

    因爲存儲數據塊指針也是要佔據存儲空間的,所以不同文件系統的inode空間的大小,也就決定了該文件系統能夠存儲單文件的最大值,但是也可以通過中間指向的block來幫忙存儲塊信息,如果還不夠,可以再繼續指向一個block,幫忙存儲。

    inode 是中存放了對應文件的屬主屬組、權限、大小、時間戳等屬性數據(stat file_path的數據),以及文件數據存放在哪些數據塊的編號,需要注意的是文件名稱不存在inode裏面

    元數據區的特點:

    1. 每個文件會且只會佔用一個inode
    2. 文件系統能夠創建多少個文件,是有文件系統中inode的數量決定的;
    3. 系統讀取文件的時候,需要先找到文件對應的inode,通過inode中存儲的文件屬性信息來判斷用戶是否有權限,權限匹配才能讀取。
  • 數據區(Data Block):數據區是用來放置文件數據的地方,在創建文件系統的時候,數據區會被劃分爲很多固定大小的塊,且每個塊都有編號,以方便inode記錄。每個塊的大小在不同類型的文件系統中默認的都不一樣,一般爲1K2K4K,也可以通過參數指定要創建塊的大小。數據塊還具有一下特點:

    1. 原則上,塊的大小和數量在文件系統創建(格式化)完成後就不能再被改變了(除非重新創建文件系統)
    2. 每個塊內最多隻能放一個文件的數據;
    3. 如果文件大於塊的大小,則會佔用多個塊;
    4. 如果文件小於塊的大小,多餘的空間也不能繼續使用了;
  • 超級塊(Super Block):超級塊是記錄整個文件系統相關信息的地方。主要用來存儲一下信息:

    1. blockinode的總量;
    2. 未使用和已使用的block/inode的數量;
    3. 每個blockinode的實際大小;
    4. 文件系統的掛載時間、最近一次寫入數據的時間、最近一次檢驗磁盤(fsck)的時間等文件系統相關的信息;
    5. 一個valid bit數值,若此文件系統已被掛載,則爲0,否則爲1
    6. 第一個塊組內一定會有一個超級塊的,其他的塊組可能有含有超級塊,其他塊組內保存超級塊的目的是爲了第一個塊組內超級塊的備份,以備救援。
  • 塊位圖索引(block bit map):每次新增一個文件時,都需要查找空閒塊來存儲,那麼多塊一個個去遍歷也太慢了,那麼怎麼才能快速定位空閒塊呢?塊位圖索引就是用來一對一描述所有塊狀態的一組區域,這樣就可以加快查找空閒塊的速度,它會根據添加/刪除等一些操作來修改位圖。

  • inode位圖索引:和塊位圖索引是類似的功能,只是這裏記錄的是每個inode使用與被使用的狀態。

  • 塊組描述符(Group Descriptor Table):用來描述每個塊組從開始到結束的塊編號,以及塊組內的超級塊、元數據區、數據區、位圖索引等內容所對應的塊編號範圍。

  • 日誌區:日誌區主要是爲了解決在文件寫入的過程中,因爲不知名原因導致系統中斷,造成元數據區和數據區產生不一致的問題,爲了解決不一致的問題,需要對磁盤文件進行檢查,特別耗時耗資源,而使用日誌區可以很好的解決這個問題。

    日誌區也是一個區塊,該區塊專門用來記彔文件寫入或修改的步驟,過程是這樣的:

    1. 當系統要寫入一個文件時,會先在日誌記彔區塊中記錄某個檔案准備要寫入的信息;
    2. 開始寫入檔案的權限與數據,開始更新元數據;
    3. 最後,完成數據和元數據的更新後,在日誌記彔區塊當中完成該文件的記錄。

    在這樣的過程中,某次操作如果中間除了問題,系統只需要去檢查日誌記錄塊,就可以知道是哪裏的位圖,而不用去檢查全部的文件系統。

    支持日誌的文件系統有ext3ext4xfs( centos7 )默認文件系統)等,ext2 不支持文件系統。

目錄樹

每個目錄都對應一個inode和至少一個塊。

inode用來記錄與該目錄相關的權限與屬性,以及那些塊用來存儲目錄信息,塊用來存儲目錄下的文件名和該文件對應的inode編號。

查看指定目錄下文件的inode編號

在這裏插入圖片描述
查看指定文件的inode編號

在這裏插入圖片描述

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