首页 > 代码库 > 文件系统inode与block

文件系统inode与block

ls -lhi:

-i:inode索引节点编号,它是文件或目录,在磁盘里的唯一标识,Linux读取文件或者目录首先要读取到这个索引节点。

查看根分区inode大小:(inode大点可以存放更多的属性)

[root@wuyike ~]# dumpe2fs /dev/sda3|grep -i "Inode size"

dumpe2fs 1.41.12 (17-May-2010)

Inode size:               256

[root@wuyike ~]# dumpe2fs /dev/sda1|less

Inode count:              51200  inode个数

Block count:              204800

Reserved block count:        10240

Free blocks:              166630

Free inodes:              51162

First block:              1

Block size:               1024

dumpe2fs命令:针对ext2、3、4查询文件系统信息




[root@wuyike ~]# ls -lhi|tail -5

4363 -rw-r--r--. 1 root root   31 3月   3 08:15 awk.txt

341 drwxr-xr-x. 6 root root 4.0K 3月   3 19:35 data

 14 -rw-r--r--. 1 root root    7 3月   4 03:00 test.txt

4014 -rw-r--r--. 1 root root   30 3月   4 18:51 wuyike.txt

4402 -rw-r--r--. 1 root root    0 3月   4 18:51 吴宜珂.txt

第一列:inode索引节点编号

第二列的第一个字符代表文件类型,-普通文件,d目录

第二列的后2-10个字符:rw-r--r--.文件权限,r是read读,w是write写,x执行,-代表无。

第二列的第11个字符:selinux。“.”表示getenforce=enforcing

第三列:文件的硬链接数。文件硬链接是文件的又一个入口。

第四列:文件对应的属主或者用户。

第五列:文件对用的属组或用户组。

技术分享

第六列:文件大小。

第七八九列:文件被改动的时间。

第十列:文件名。



inode:

磁盘要分区,然后格式化,创建文件系统。

在每个linux存储设备或存储设备的分区被格式化为ext4文件系统后,一般都有两部分:第一部分是INode,第二部分是block。Block用来存储实际数据的,例如照片,视频等普通文件数据。而inode包含的属性信息包括文件大小、属性、归属的用户组,读写权限、文件类型、修改时间,还包含指向文件实体的指针的功能。(文件名不属于文件的属性,inode不包含文件名)

cat wuyike.txt-->找到文件名所对应的inode并查看用户有没有权限读写,若权限通过-->通过inode的指针链接找到存放wuyike.txt里面具体内容的block块。(文件很大的话,对应很多个block,block之间再相互建立链接)(wuyike.txt这个文件名在上一级目录的block中)

技术分享


查看每个挂载的磁盘inode的情况:

[root@wuyike ~]# df -i

Filesystem     Inodes IUsed  IFree    IUse% Mounted on

/dev/sda3      610800 54694  556106    9%  /

tmpfs          125543     1 125542   1%  /dev/shm

/dev/sda1       51200    38  51162    1%  /boot

inode小结:

1)磁盘分区格式化为ext2、3、4文件系统后会生成一定数量的inode和block

2)inode是索引节点,作用是存放文件的属性信息以及作为文件的索引。

3)ext3、ext4文件系统的block存放的是文件的实际内容。

4)block的大小一般有1k,2k,4k几种,其中引导分区等为1k,其他普通分区为4k(c6)

/boot分区:(grep -i不区分大小写)

查看block大小

[root@wuyike ~]# dumpe2fs /dev/sda1|grep -i "block size"

dumpe2fs 1.41.12 (17-May-2010)

Block size:               1024

/root分区:

[root@wuyike ~]# dumpe2fs /dev/sda3|grep -i "block size" 

dumpe2fs 1.41.12 (17-May-2010)

Block size:               4096

5)inode是一块存储空间,c6非启动分区inode默认256字节,c5是128

6)inode是一串数字,不同的文件对应的inode在文件系统中是唯一的

7)inode号相同的文件,互为硬链接文件。(文件的又一个入口)

8)一个文件创建后至少要占用一个inode和一个block

9)如果文件很大,可能占用多个block。如果文件很小,至少也要占用一个block,剩余空间浪费了。

10)inode的大小与总量查看:

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

dumpe2fs 1.41.12 (17-May-2010)

Block size:               4096

Inode size:               256

[root@wuyike ~]# dumpe2fs /dev/sda3|egrep -i "block count|inode count"   

dumpe2fs 1.41.12 (17-May-2010)

Inode count:              610800

Block count:              2438912

Reserved block count:     121945

该文件系统最多还能再放610800个文件,inode或block满了都不可以再放文件了。

一个文件系统默认Block比inode多


技术分享

技术分享

技术分享




1)磁盘读取数据是按block为单位读取的。

2)一个文件可能占用多个block。每读一个block就会消耗一次磁盘I/O。

3)如果要提升磁盘IO性能,那么就要尽可能一次性读取数据尽量多。(block稍微大一些)

4)一个block只能存放一个文件的内容,无论内容有多小,如果block 4k,那么存放1K的文件,剩余3K就浪费了。

5)BLOCK并非越大越好。BLOCK越大对于小文件存放就会浪费磁盘空间,例如:1000k的文件,block为4k,占用250个block,block为1k时,占用1000个block。访问效率谁更高?消耗IO分别为250次和1000次。

6)大文件(大于16k)一般设置BLOCK大一些,读取速度更快。小文件(小于1K)一般设置BLOCK小一些,防止浪费磁盘空间。

7)BLOCK和inode的设置是在分区格式化的时候确定的,-b block, -I inode。mkfsx.ext4 -b 2048 -I 256 /dev/sd...

8)ext3、ext4文件一般设置为4K。



面试题:

一个100M(100000K)的磁盘分区,写入1K和1M的文件,分别能写多少个?

1K的与inode数量相同。

1M的将近能写100M。

技术分享

写小文件,INode会先满,写大文件,block会先满。
















文件系统inode与block