Linux系統中inode和block的簡單知識

Linux系統中inode和block的簡單知識node

在Linux系統中,讀取文件內容是經過"文件名"->"inode"->"block"的順序進行的。在你建立文件前必須先要分區、格式化(建立文件系統),建立文件系統後inode和block的數量就會固定下來。linux

inodeindex node,索引節點)ide

Linux系統中,inode用於存放文件屬性信息,包括:文件類型和權限、文件屬主、文件屬組、大小、時間戳以及指向文件實體內容的指針,但不存放文件名,文件名是存放在上一級目錄的block中。性能

建立文件系統是可使用mkfs命令指定inodeblock的大小,但實際工做中沒麼必要,Linux默認的設置已經很好用,起碼我在工做中歷來未指定過inodeblock的大小。在CentOS 5.x 系統中,1inode默認是128bytesCentOS 6.x默認是256bytes,但系統也會根據分區大小設置inode的大小,好比/boot分區一般只會分200M大小,CentOS 6.x系統一樣會把/boot分區的inode大小設置成128bytesspa

建立文件系統命令:指針

mkfs.ext4 -b 2048 -I 256 /dev/sda1索引

 

查看文件屬性:it

[root@CentOS6lsrv02 ~]# ls -liclass

total 6×××test

1922 -rw-r--r--. 1 root root         6 Sep 13 10:28 a.log

1867 -rw-------. 1 root root      1495 Jul  8  2015anaconda-ks.cfg

1267 -rw-r--r--  1root  root        63 Oct 13 20:13 file

  17 -rw-r--r--. 1root  root     23040 Jul 8  2015 install.log

  29 -rw-r--r--. 1root  root      6240 Jul 8  2015 install.log.syslog

1261 -rw-r--r--. 1 root root         0 Aug 19 16:23linux.log

 146 -rw-r--r--. 1root  root        35 Jul 7 09:02 test

1列:經過ls命令-i參數列出的inode編號

2列:文件類型和權限(默認只列出9位權限位)

3列:文件硬連接數

4列:文件屬主

5列:文件屬組

6列:文件大小

789列:文件最近修改時間

第10列:文件名


查看文件詳細屬性可使用命令stat

[root@CentOS6lsrv02 ~]# stat test

  File: `test'

  Size: 35              Blocks: 8          IO Block: 4096   regular file

Device: 802h/2050d     Inode: 146         Links: 1

Access: (0644/-rw-r--r--) Uid: (    0/    root)  Gid: (    0/    root)

Access: 2017-07-07 09:02:32.555385049 +0800

Modify: 2017-07-07 09:02:30.434384526 +0800

Change: 2017-07-16 11:37:04.481215921 +0800

Data block(數據塊)

      block(塊或data block),文件的內容都是存放在block中,1block一般是4K1個文件(比較大的)可能會佔用多個block,但若是文件不多(好比0.1K),也會佔用1block,而且剩餘空間不能使用。

使用dumpe2fs查看文件系統inode和block的大小

[root@CentOS6lsrv02 ~]# dumpe2fs /dev/sda1 | egrep -i"inode size|block size"

dumpe2fs 1.41.12 (17-May-2010)

Block size:              1024/boot分區block大小

Inode size:              128/boot分區inode大小

[root@CentOS6lsrv02 ~]# dumpe2fs /dev/sda2 | egrep -i"inode size|block size"

dumpe2fs 1.41.12 (17-May-2010)

Block size:              4096/分區block大小

Inode size:              256/分區inode大小


inodeblock的知識小結:

1. Linux系統建立文件系統後會生成必定數量的inodeblock,系統讀取文件是以block爲單位讀取的。

2. 一個文件會佔用1inode和可能會佔用多個block,每讀取一次block就會消耗1次磁盤I/O

3. 若是要提高磁盤I/O性能,就要一次性讀取儘可能多的block

4. inode也是磁盤上的一塊存儲空間,CentOS6.x非啓動分區inode默認大小是256字節,CentOS 5.x默認是128字節。

5. inode在系統中的表現形式是一串數字,具備相同inode編號的文件互爲硬連接。

6. 一個block只能存放一個文件的內容,不管文件有多小,剩餘空間也不可以使用。好比block的大小是4K,存一個1K大小的文件,那麼剩餘的3K空間只可以浪費,不可以使用。

7. inode存放文件屬性和指向文件實體的指針,但不存放文件名,文件名存放在上一級目錄的block中。

8. block並非越大越好的,block太大對於以小文件存放爲主的應用就會浪費大量的磁盤空間。好比要存放1000050byte大小的文件,block大小爲4K,文件總量爲:50 byte * 10000/1024 = 488.28125K,浪費的磁盤總量爲:4046 byte * 10000/1024/1024= 38.59M,纔不到500K的文件,就浪費了接近40M的磁盤空間。

9. block的大小根據業務需求設定,若是須要存放大量小文件(<1K),則設置block大小爲1K,若是大部分文件都比較大(>4K),則設置block4K(這也是企業實際環境中最多見的狀況)

10. 有時候也會由於須要得到更高的磁盤性能而選擇更大的block。好比大小爲10000K的文件,使用4K大小的block,佔用2500block,若是使用1K大小的block,則會佔用10000block,讀取一樣大小的文件磁盤I/O分別是2500次和10000次。CentOS 5.xCentOS 6.xext4文件系統支持的block大小爲:1K 2K 4K,若是要設置更大的block,只能安裝其它文件系統了。

11. block的大小也是在建立文件系統時能夠定義的,命令mkfs.ext4-b 2048 -I 4096 /dev/sdb

12. 企業實際應用中絕大部份狀況文件都是大於4K的,因此選擇默認參數建立文件系統就能夠了(除了引導分區/boot,該分區一般很小,一般只分配200MCentO 6.x系統中默認設置block的大小爲1Kinode大小爲128byte

相關文章
相關標籤/搜索