Linux文件系統的最基本數據結構:inode和block

    • 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

(8)
M20_heM20_he
上一篇 2016-09-06
下一篇 2016-09-06

相關推薦

  • 程序包編譯安裝

    linux安裝采用命令行形式。

    2018-03-17
  • N26第一周作業

    第一周作業   1. 描述計算機的組成及其功能。   計算機主要由處理器(CPU)、存儲器、輸入設備、輸出設備。 CPU由運算器、控制器、寄存器、緩存器組成,提供運算。 存儲器即內存,RAM(Random Access Memory),內存為cpu運算時提供數據存儲。 Input:用戶下指令的設備,使計算機能夠與用戶進行交互。 Outpu…

    Linux干貨 2017-01-03
  • 馬哥教育網絡班21期-第六周課程練習

    第六周作業 請詳細總結vim編輯器的使用并完成以下練習題 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; [root@qq tmp]# cp /etc/rc.d/rc.sysinit /tmp [root@qq&nbsp…

    Linux干貨 2016-08-02
  • 磁盤分區管理與文件系統的創建

    磁盤分區管理與文件系統的創建   不光是linux文件系統,所有的大結構,多數據湊到一塊的時候,單一的管理是沒有能力處理這樣龐大規模的存在的。所謂“君王不下縣”也就是這個道理。要系統的,規范的管理一個國家,存在著省、市這樣的層級結構。linux系統也是這樣,將整個系統劃分為若干個分區,實現不同功能,不同層級的規范管理,這就是創建磁盤分區的意義。既然…

    Linux干貨 2016-09-01
  • N-28作業第一周

    N-28作業第一周小結:以前看存儲視頻里面講存儲架構里不清楚的部分居然開始清晰。基礎命令需要多花時間熟悉。

    2017-12-05
  • shell腳本中變量與運算及簡單編程示例

    一、變量         在Linux shell腳本的變量中,分為系統定義的變量和用戶定義的變量。這些變量是用來調用一個數值或字符值。定義變量時,不需要聲明變量類型。 1、系統變量         …

    Linux干貨 2016-08-15
欧美性久久久久