前言:
文件系統作為linux總最基礎的但愿。理解并深入了解文件系統對linux的學習有重要意義。我們從文件系統創建,構成以及工作流程幾個方面全方位的介紹文件系統的相關概念。
簡述:
一塊完整的磁盤經過分區后我們就可以通過格式化,根據我們的需求構建文件系統能使用的文件系統格式。傳統的文檔系統中,一個分區就只能夠被格式化為一個文件系統。所以我們可以說一個文件系統就是一個分區。但因為新技術的引用,我們在格式化時已經不再說是針對分區格式化了,通常我們可以把一個可被掛載的資料稱為一個文件系統。
文件系統內的文件除了文件本身的內容外,通常會包含許多與文件本身內容無關的屬性,例如文件的權限,時間參數,屬主等。我們把這種文件自身的屬性稱作元數據(metadata),把文件內容稱為數據(data).文件系統將這兩部分數據分別存放在不同的區域,文件屬性放置到inode(引用節點)中,實際數據則放置在data block區域中。另外還有一個超級區塊(superblock)會記錄整個檔案系統的整體信息,包括inode與block的總量,使用量和剩余量等。
磁盤的基本單位是扇區,每個扇區的大小為512個字節,如果文件系統以扇區為基本存儲單位,再給每個扇區進行編號,那么光是扇區的編號就占了好大的存儲空間,所以文件系統是block為最小存儲單位的,一個block典型的大小是1024字節或者4096字節,在磁盤格式化就得設置好,并且之后不可修改。一個block最多只能放置一個文件,即使這個文件只有1個字節。
Inode和block都是有編號的。每個文件占用一個inode,inode所存放的元數據包含文件數據放置的block號碼。因為,如果能找到inode的話,那么自然就會知道這個檔案所放置資料的block號碼。當然也就能讀出該文件的實際數據了。
我們將inode與block區塊用圖解來說明下,如下圖所示,文件系統先格式化出inode與block的區域,假設某一文件的元數據放置在inode4號的位置,而這個inode記錄了文件數據實際存放在2,7,13,15這四個block號碼所對應的block中,這樣我們的文件系統就能一次把4個block中的內容讀取出來。這種資料存取的方法我們稱為索引式文檔系統(indexed allocation)
詳細描述:
通過前面的簡述,我們已經大概了解到linux文件系統相關的概念:inode,block,superblock。文件系統一開始就將inode和block規劃好了,除非從新格式化(或者利用resize2fs等指令變更文件系統大?。?,否則inode與block固定后就不變動。為管理的方便,inode與block并沒有被放在一起。而是文件系統在格式化的時候基本就劃分為多個區塊群組(block group)的,并且每個區塊群組都有自己獨立的inode/block/superblock系統。Linux文件系統格式化后有點像下面這樣:
每個區塊內容說明如下:
-
Data block
Data block是用來存放文件數據的地方。在linux文件系統中block的大小有1K,2K以及4K三種。在格式化時block的大小就固定了,且每個block都有編號,以方便inode的記錄。
-
Inode table(inode 表格)
Inode主要保存以下文件的元數據:
文件類型,權限,UID,GID
鏈接數(即硬鏈接數)
該文件的大小和不同的時間戳
指向磁盤上文件的數據塊指針
定義文件特性的標記,如SetUID..
每個inode的大小固定為128 bytes(新的ext4與xfs可設定到256bytes),每個文件都只占有一個inode。一個block的大小就幾k,而一個文件卻大的多,而inode記錄一條block號碼就要花掉4字節,那我們有如何用128字節的inode去記錄成千上萬的block號碼的記錄呢?為此我們的系統很聰明的將inode記錄block號碼的區域定義為12個直接,一個間接,一個雙重間接,一個三重間接。這是什么呢?我們把Inode的結構畫出來:
上圖左邊為inode本身(128字節),里面有12個直接指向block號碼的對照,這12個記錄都能直接取得block號碼。之后所謂的簡介就是拿一個block來當作記錄block號碼的記錄器,如果文件太大就會使用簡介的block來記錄號碼。同理,如果,文件持續長大,那么就會利用所謂的雙間接,第一個block僅再指出下一個記錄號碼的block在哪里,實際記錄的在第二個block當中。以此類推,三簡介就是利用第三層block來記錄號碼。
-
Superblock(超級區塊)
Superblock是記錄整個文件系統相關信息的地方,沒有superblock,就沒有整個文件系統了,其中的信息主要包含:block和inode的總量,未使用的數量,block和inode的大小,文件系統的各種時間,以及文件系統被掛載與否的狀態標識。
一個文件系統中僅有一個superblock,除了第一個block group內含有碎片而block之外,后續的block group不一定含有superblock,即使有,也僅僅是作為第一個block group內surperblock的備份而已。
-
Filesystem Description(文件系統描述說明)
這個區段可以描述每個block group的開始與結束的block號碼,以及說明每個區段(superblock,bitmap,inodemap,data block)分別介于哪兩個block號碼之間。
-
Block bitmap(區塊對照表)和inode bitmap(inode對照表)
分別用來記錄使用和未使用的block號碼和inode號碼。當我們使用或者釋放block或inode時就可以通過這個兩個對照表進行查看。
目錄
linux文件中有一個特殊的文件就是目錄文件,首先,不要被windows中文件夾的說法而擾亂。目錄文件的內容就是一張目錄下所有文件的文件名與inode號碼的對照表。
當我們打開一個目錄下名為 文件1的文件時,系統通過目錄的對照表找到文件的inode號,通過inode號獲取inode信息,最后根據Inode信息找到文件數據所在的區域,讀出數據。所以目錄并不是一個盒子把文件都裝在里面,而是一個文件的清單,然后通過這個清單找到文件。
總結:
關于文件系統的基本概念就先講到這里,而之后文件的權限,又是一大塊內容,得分單獨博客進行說明。文件系統做為linux的基礎,理解其各個基礎概念是學習linux所必須的基礎。
原創文章,作者:M21-陜西-李賢,如若轉載,請注明出處:http://www.www58058.com/53191