-
Linux文件系統的最基本數據結構:inode和block
-
為什么有inode和block
-
inode
-
block
-
創建目錄或文件
-
使用場景
-
查看本機的文件系統信息
Linux文件系統的最基本數據結構:inode和block
為什么有inode和block
由于Linux系統是多用戶多的,所以文件系統類型多樣化是在所難免的。從ext2開始,是將文件屬性和文件內容分開存儲的,分別由inode和block來負責。
inode
用于存儲文件的各屬性,包括:
- 所有者信息:文件的owner,group;
- 權限信息:read、write和excite;
-時間信息:建立或改變時間(ctime)、最后讀取時間(atime)、最后修改時間(mtime);
- 標志信息:一些flags;
- 內容信息:type,size,以及相應的block的位置信息。
//注意:不記錄文件名或目錄名,文件名或目錄名記錄在文件所在目錄對應的block里。
block
用來存儲文件的內容。
創建目錄或文件
1、當創建一個目錄時,文件系統會為該目錄分配一個inode和至少一個block。該inode記錄該目錄的屬性,并指向那塊block。該block記錄該目錄下相關聯的文件或目錄的關聯性和名字。
2、當創建一個文件時,文件系統會為該文件分配至少一個inode和與該文件大小相對應的數量的block。該inode記錄該文件的屬性,并指向block。
3、如果一個目錄中的文件數太多,以至于1個block容納不下這么多文件時,Linux的文件系統會為該目錄分配更多的block。
分區
(1)分區結構
分區(partition)在被Linux的文件系統(比如ext2)格式化的時候,會分成inode table和block table兩部分,且大小都是固定的。該分區的所有inode都在inode table里,所有block都在block table里。
(2)塊大小
ext2允許的block size為1024bytes、2048bytes和4096bytes。
(3)inode大小
ext2一般默認給inode預設的大小為128bytes。
(4)預設分區
一個T bytes的分區,設定每個block為B bytes,每個inode為I bytes。如果假設平均每個文件占用兩個block的話,那么inode的數量就應該設定為T/(2B+I)個,即inode table為T*I/(2B+I) bytes,block table為T*B/(2B+I) bytes。所以一個分區的文件系統所能容納的文件數量,被限制于該分區的文件系統的inode area中的inode數。
如果一個分區大小為1GB,每個block為4KB,一個inode為128B,并假設平均每個文件占用2個block。那么inode的數量為1GB/(8KB+128B)=129055.5,即129055。那么inode table的大小為129055*128B=15.75MB。所以按照這樣的規劃,如果一個1GB的磁盤,那么格式化后,就已經有15.75MB被使用了。
使用場景
大文件應用場景:block設置的小一些,inode設置的多一些。比如新聞組、BBS等。
小文件應用場景:block設置的大一些,inode設置的少一些。比如圖片分享網站。
查看本機的文件系統信息
使用dumpe2fs命令可以查看分區的文件系統的相關信息。比如我在我的一臺測試機上查看sda1,可以輸入:
dumpe2fs /dev/sda1
會得到如下內容,一些信息已經標注在注釋里了。
(1)文件系統基本信息
#該分區的文件系統的名稱
Filesystem volumn name: MAIN
#上次的掛載點
Last mounted on: <not available>
#文件系統的通用唯一標識符
Filesystem UUID: <none>
#文件系統的
Filesystem magic number: 0xEF53
#修訂版本號
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal needs_recovery
Filesystem flags: signed_directory_hash
Default mount options: (none)
#文件系統狀態
Filesystem state: clean
#發生錯誤后的行為
Errors behavior: Continue
#操作系統
Filesystem OS type: Linux
(2)結構信息
#Inode總數
Inode count: 1313312
#Block總數
Block count: 1313305
#保留block數
Reserved block count: 65665
#空閑block數
Free blocks: 979164
#空閑inode數
Free inodes: 1298415
#第一個block的編號
First block: 0
#block的大小
Block size: 4096
#fragment的大小
Fragment size: 4096
#每個group的block數是32K個
Blocks per group: 32768
#每個group的fragment數是32K個
Fragments per group: 32768
#每個group的inode數
Inodes per group: 32032
#每個group的inode blocks
Inode blocks per group: 1001
一個100M(100000K)文件的磁盤分區,分別寫入1K文件與寫入1M文件,分別可以寫多少個?
答:最多寫入9103個文件
分析
設置默認塊大小1k
100M/(1k+128B)
// 轉換成b后除
104857600/1152
最多9103
100M被格式化以后有11kb創建了inode表
//用104857600除以9103=11519(11kb)
原創文章,作者:M20_he,如若轉載,請注明出處:http://www.www58058.com/43527