不同的檔案系統儲存檔案的方式是不同的,所以其結構也是不同的。本文要介紹的是linux最傳統的檔案系統
ext2
的結構。
ext2檔案系統的主要組成結構有:
inode table
(inode
**)、
data block
(資訊區塊)、
superblock
(超級區塊)、
filesystem description
(檔案系統描述說明)、
inode bitmap
(inode
對照表)、
block bitmap
(區塊對照表)等。
在ext2檔案系統中,檔案的許可權、屬性與檔案的內容是分開儲存的,檔案的許可權和屬性都儲存在
inode
中,而檔案內容則儲存在
block
中。inode
和block
的大小和數量都是在格式化(即檔案系統建立)的時候就已經固定了的。每個
inode
的大小均為
128bytes
(ext4
與xfs
可以設定
256bytes
),每個檔案僅占用乙個
inode
,所以檔案系統中能夠建立的檔案數量與
inode
的數量有關。
block有1k
,2k和4k
三種大小,所以當檔案內容的大小超出
block
的大小時就需要多個
block
來儲存了。
每個inode和
block
都是有編號的。
inode
中不僅儲存了檔案的許可權和屬性,也儲存了檔案內容存放的所有
block
的編號,這樣只要找到檔案的
inode
就能根據
inode
中記錄的
block
的編號一次性把所有存放該檔案內容的
block
的資料全部讀取出來了。這裡借鳥哥的圖加以說明:
問題來了,記錄乙個block編號需要
4bytes
的空間,如果乙個檔案比較大的話,需要的
block
的數量是比較多的,但是
inode
只有128bytes
啊,怎麼記錄得了那麼多的
block
編號呢?其實並不是所有的
block
編號都直接記錄在
inode
中的,當檔案占用的
block
數量比較多的時候,系統會拿出一些
block
專門來記錄檔案內容
block
的編號,然後
inode
只要記錄這些
block
的編號就可以讀取到檔案內容
block
的編號了。
ext2
把inode
中記錄blok
編號的區域定義為
12個直接,乙個間接,乙個雙間接,和乙個三間接記錄區,這裡還是借用鳥哥的圖加以說明:
這樣子還是可以根據inode找到儲存檔案內容的所有
block
啊!不過儘管如此,由於inode中存放
block
編號的區域大小是固定的,
inode
能夠儲存的
block
編號的數量就是固定的,而
block
的大小也是固定的,所以也就是說在乙個已知
block
大小的檔案系統中,檔案的最大大小是固定的!
既然block的大小有1k,
2k和4k三種型別,那我們是應該選擇大一點的還是小一點的好呢?由於乙個
block
只能儲存乙個文件的內容,乙個檔案不管多小,它至少都會占用乙個
block
的空間,所以如果
block
的空間很大,但是系統中有很多很小的檔案,那會就浪費很多的空間了。如果把
block
定得很小,但是系統中有很多大檔案的話,那麼乙個檔案就需要存放到很多個
block
中,讀取檔案內容的時候需要到多個
block
中讀取,而且
inode
需要記錄的
block
的編號很多,系統還需要拿出更多的
block
來記錄檔案內容
block
的編號,這在時間和空間上都是比較浪費的。所以,
block
的大小定多少合適,還是需要根據檔案系統預計使用情況來決定的。
接下來簡單介紹一下ext檔案系統結構中其他組成部分:
(1)superblock:大小為
1024bytes
block
與inode
的大小和數量、未使用與已使用的
inode/block
的數量,以及檔案系統的是否已被掛載、掛載的時間等等。
(2)filesystem description:描述每個
block group
(下文介紹)的開始與結束的
block
編號,以及說明每個區段(
inode table
,data block
等)分別介於哪個
block
號碼之間。
(3)inode bitmap:記錄哪些
inode
是未使用的,哪些是已被使用的。
(4)block bitmap:記錄哪些
block
是未使用的,哪些是已被使用的。
此外,在ext3和
ext4
中,還會規劃出乙個區塊用於記錄檔案修改的日誌記錄,以便在檔案系統發生問題的時候能很快查到問題所在。
如果檔案系統很大的話,inode和
block
的數量就會很大,不容易管理,所以
ext在格式化的時候基本上是區分為多個區塊群組的,每個區塊群組都有以上介紹的所有組成部分(可以從指令
dumpe2fs
的列印結果中檢視),看起來就像下圖(圖借自鳥哥):
這樣了解了ext2檔案系統的結構之後,檔案的建立、查詢、修改、刪除具體經歷了哪些過程,包含了哪些細節,我們就可以清楚地知道了!
檔案系統格式化的時候,ext檔案系統家族在格式化處理的過程中就把所有
/inode/block/meta data
等結構都預先規劃並分配好,以後系統就可以直接取用,不需要再進行動態配置了。這種方法有個問題,就是當格式化的檔案系統很大的時候,格式化需要花費很長的時間。而新的日誌式檔案系統
xfs就彌補了這個不足,它的
inode
和block
都是等系統需要使用的時候才進行動態分配的,所以格式化過程超快,適合用於大檔案系統。
linux 檔案系統 Linux 檔案系統結構介紹
ubuntu 像所有類unix系統一樣 在分層樹中組織檔案,其中的關係就像父母和孩子一樣。目錄可以包含其他目錄以及常規檔案,它們是樹的 葉子 樹的任何元素都可以通過路徑名引用 絕對路徑以字元 標識根目錄,其中包含所有其他目錄和檔案 開頭,然後列出必須遍歷以到達該元素的每個子目錄,每個子目錄用 符號分...
Linux檔案系統結構
linux檔案系統是乙個倒轉的單根數數狀結構 所有的檔案資料夾結構都是存在於乙個根目錄下面 不同於windows作業系統,windows作業系統對於大小寫不敏感,但是linux系統嚴格區分大小寫 路徑使用 分割 windows中使用 每乙個shell或系統程序都有乙個當前工作目錄 我們使用pwd命令...
Linux 檔案系統結構
一.初步了解檔案系統 檢視檔案資訊的兩個指令 ls l stat ls l所示的7列 模式 硬鏈結數 檔案所有者 組 大小 最後修改時間 檔名 關於檔案的inode 超級塊 存放檔案系統本身的結構資訊 i節點表 存放檔案屬性。如檔案大小.所有者.資料區 存放檔案內容 二.建立檔案的操作 1 儲存屬性...