Linux系统中inode和block的简单知识

时间:2021-10-02 16:26:13

Linux系统中inode和block的简单知识

在Linux系统中,读取文件内容是通过"文件名"->"inode"->"block"的顺序进行的。在你创建文件前必须先要分区、格式化(创建文件系统),创建文件系统后inode和block的数量就会固定下来。

inodeindex node,索引节点)

Linux系统中,inode用于存放文件属性信息,包括:文件类型和权限、文件属主、文件属组、大小、时间戳以及指向文件实体内容的指针,但不存放文件名,文件名是存放在上一级目录的block中。

创建文件系统是可以使用mkfs命令指定inodeblock的大小,但实际工作中没么必要,Linux默认的设置已经很好用,起码我在工作中从来未指定过inodeblock的大小。在CentOS 5.x 系统中,1inode默认是128bytesCentOS 6.x默认是256bytes,但系统也会根据分区大小设置inode的大小,比如/boot分区通常只会分200M大小,CentOS 6.x系统同样会把/boot分区的inode大小设置成128bytes

创建文件系统命令:

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

 

查看文件属性:

[root@CentOS6lsrv02 ~]# ls -li

total 69992

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


本文出自 “Linux学习天地” 博客,请务必保留此出处http://linuxprince.blog.51cto.com/373334/1974674