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 08:51
下一篇 2016-09-06 08:51

相關推薦

  • N26第三周

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。        who -i或-u 顯示閑置時間, 若該用戶在前一分鐘之內有進行任何動作,將標示成"."號,如果該用戶已超過24小時沒有任何動作,則標示出"old"字符串   &n…

    Linux干貨 2017-01-16
  • 搭建lnmp實現動靜分離

    LNMP代表的就是:Linux系統下Nginx+MySQL+PHP這種網站服務器架構。 (nginx主機)web 處理靜態內容 172.16.250.149 (fpm server   mariad bserver)處理動態內容 172.16.253.131 以上為兩臺CentOS7.3主機 試驗拓撲圖如下:   ==…

    2017-07-22
  • CentOS 7網絡屬性配置

    傳統命名:以太網eth[0,1,2,…], wlan[0,1,2,…] 可預測功能 udev支持多種不同的命名方案: Firmware, 拓撲結構 (1) 網卡命名機制 systemd對網絡設備的命名方式: (a) 如果Firmware或BIOS為主板上集成的設備提供的索引信息可用,且可預測則根據此索引進行命名,例如eno1; (b)…

    Linux干貨 2015-05-28
  • sed命令用法

    sed命令 [option]  “script”  file sed命令是一種行編輯工具,他是逐行對文件進行編輯。sed命令有一個模式空間,他將一行命令讀取進模式空間進行編輯,完成后將本行數據打印再讀取下一行數據進行處理。 option: -n:靜默模式不顯示模式空間內容 -f:從指定文件中讀取 -i:修改源文件(-i.###會自動將原文…

    Linux干貨 2016-08-12
  • Linux的用戶組和權限(一)

    導讀:本章主要內容如下       1.解釋Linux的安全模型      2.解釋用戶賬號和組群賬號的目的      3.用戶和組管理命令      4.理解并設置文件權限 &n…

    Linux干貨 2016-08-04
  • Linux基礎知識之網絡配置

    基本網絡配置:     將Linux主機接入到網絡,需要配置網路相關設置。         IP/NETMASK:本地通信         路由(網關):跨網絡…

    Linux干貨 2016-09-07
欧美性久久久久