Linux 檔案系統

2021-06-18 15:58:37 字數 3963 閱讀 2889

分類: linux

2013-10-08 22:22

53人閱讀收藏 

舉報linux

檔案系統

ext2

文章引用自:鳥哥的 linux 私房菜,經過部分修改

linux 檔案系統中涉及的幾個基本概念

superblock:記錄此 filesystem 的整體資訊,包括 inode/block 的總量、使用量、剩餘量,以及檔案系統的格式與相關資訊等

inode:記錄檔案的屬性,乙個檔案占用乙個 inode,同時記錄此檔案的資料所在的 block 號碼

block:實際記錄檔案的內容,如果檔案太大,會占用多個 block

inode 和 block 都有編號,找到乙個檔案的 inode 便可以找到存放檔案的 block

這種檔案系統統稱為索引式檔案系統

不同於索引式,fat 檔案系統使用的是類似於鍊錶的儲存系統

這種檔案系統無法直接得到檔案大小,並且在乙個檔案的 block 比較分散的時候,檔案讀取的效能便會降低,所以才有了「磁碟碎片整理」這一說法。

注意:實際上,如果 linux 的檔案較大,而儲存檔案內容的 block 比較分散,也是會產生讀取效能降低的問題。這時可以將檔案系統的中的檔案備份,格式化檔案系統,然後將檔案恢復回去即可解決。

ext2 檔案系統

檔案系統在一開始便已經規劃好所有的 inode 和 block,除非重新格式化或改變檔案系統大小

ext2 檔案系統在格式化式會分為多個 block group,每個 block group 都有自己的 superblock/inode/block。如下圖

用來存放檔案內容,ext2 支援的 block 大小有 1k、2k、4k 三種。

block 大小1kb

2kb4kb

最大單個檔案16gb

256gb

2tb檔案系統最大容量2tb

8tb16tb

原則上 data blcok 的數量和大小只在格式化的時候確定

每個 data block 只能存放乙個檔案的內容,也可以說乙個檔案使用的儲存空間是以 data block 為單位的

inode table

inode 記錄了訪問模式(r/w/x)、owner、group、檔案大小、ctime、atime、mtime、setuid、setgid、檔案內容的指標。

每個 inode 大小均為 128 byte

每個檔案只占用乙個 inode,因此檔案系統所能建立的總檔案數目與 inode 數目有關,而 inode 的數目和大小在格式化時指定

由於 inode 大小有限,且檔案所在的 block 的數目可能很龐大,為了使用有限的空間記錄龐大的 block 號碼資訊,所以檔案系統將 inode 記錄 block 號碼的區域劃分為 12 個直接記錄區、1 個間接記錄區、1 個雙間接記錄區、1 個三間接記錄區。(每個 data block 號碼需要 4 byte 空間)

這裡的間接記錄區就是將乙個 data block 作為記錄 block 號碼的記錄區。

這樣,在 block 大小為 1k 的檔案系統中,乙個 inode 可以記錄的最大 data block 號碼數量為:12 + 1k / 4 + 1k / 4 * 1k / 4 + 1k / 4 * 1k / 4 * 1k / 4 = 16 m,所以乙個 inode 在 block 大小為 1k 的情況下可以記錄的最大檔案大小為 16g。

(由於 ext2 檔案系統對於大於 2k 的 block 有限制,所以以上演算法並不適用於 2k 和 4k 大小的 block)

super block

記錄整個檔案系統的資訊:block 與 inode 的大小與總量、檔案系統的掛載時間等相關資訊

由於檔案系統中應該只有乙個 super block,實際上除了第乙個 block group 必須包含 super block,而其他的 block group 中的 super block 僅僅是第乙個的備份

檔案系統描述(filesystem description)

記錄每個 block group 起始與結束的 block 號碼,以及說明每個區段(superblock、block bitmap、inode bitmap、data block)分別介於哪個 block 號碼之間。

可使用 dumpe2fs 來檢視此部分資訊。

區塊對照表(block bitmap)

記錄每個 block 是否為空。

在建立檔案時查詢空 block,並更新為非空;在刪除檔案時將不用的 block 更新為空。

inode 對照表(inode bitmap)

類似於 block bitmap,記錄每個 inode 是否在使用。

如果需要查詢檔案系統的資訊,可以使用dumpe2fs命令

目錄在檔案系統中的儲存

目錄在的儲存與檔案相同。

當建立乙個目錄時,檔案系統為其分配乙個 inode 和至少乙個 data block(所以在 block 大小為 4k 的檔案系統中,大多數的目錄大小為 4096),inode 中記錄目錄的許可權、屬性、data block 號碼等資訊,而 data block 中記錄的是目錄下所有檔案/目錄的名稱以及相應的 inode 號碼。

可以使用ls -i檢視乙個目錄下的檔案的 inode 號碼

建立檔案的步驟

確定使用者對檔案所在目錄具有 w 和 x 許可權

在 inode bitmap 中找到沒有使用的 inode,寫入檔案相關資訊

在 block bitmap 中找到沒有使用的 block 並寫入檔案內容,更新 inode 中的 block 號碼資訊

更新 inode bitmap、block bitmap,然後更新 superblock 內容

日誌式檔案系統(journaling filesystem)

ext2 檔案系統對於檔案建立的操作是先寫入 inode 再寫入 block,所以如果在寫入 inode 之後,建立操作中斷,則會出現資料不一致狀態

系統在開機時會根據 super block 中的資訊判斷是否出現了資料不一致狀態,可以使用 e2fsck 命令進行資料不一致狀態的檢查。這種檢查非常費時。

為了避免出現資料不一致狀態,引入了日誌式檔案系統

日誌式檔案系統引入乙個日誌區塊,該區塊記錄檔案建立或修改操作。

日誌式檔案系統建立乙個檔案的步驟為:

準備:首先在日誌記錄區塊中記錄準備進行的檔案操作的資訊

實際操作:寫入檔案許可權等資訊,寫入檔案內容

結束:在日誌記錄區塊中標記操作已完成

這時,如果在檔案操作過程中出現了問題,可以直接查詢日誌得到具體的錯誤,然後進行修復。

ext3 檔案系統便是日誌檔案系統,它為 ext2 的公升級版。

linux 檔案系統 Linux 檔案系統結構介紹

ubuntu 像所有類unix系統一樣 在分層樹中組織檔案,其中的關係就像父母和孩子一樣。目錄可以包含其他目錄以及常規檔案,它們是樹的 葉子 樹的任何元素都可以通過路徑名引用 絕對路徑以字元 標識根目錄,其中包含所有其他目錄和檔案 開頭,然後列出必須遍歷以到達該元素的每個子目錄,每個子目錄用 符號分...

Linux檔案系統

linux目錄結構 根目錄 bin 可執行檔案目錄 boot 核心引導檔案 vmlinuz,initrd.img等 dev 裝置檔案儲存目錄,應用程式對這些檔案讀寫和控制可訪問實際裝置 etc 系統配置和一些伺服器配置檔案的位置,如帳號及密碼配置檔案。home 普通使用者目錄 lib 庫檔案目錄 l...

Linux檔案系統

之前對磁碟分割槽已經有了詳細的描述,這篇主要介紹檔案系統 linux的檔案系統是出了名的 下面就 大概介紹下 可以把檔案系統大概分成 superblock inodeblock datablock 三部分 superblock superblock記錄檔案系統的基本資訊比如每塊資料塊的大小,空閒磁碟...