inode
inode就是用来存储这些数据属性信息的(也就是ls -l的结果),inode包含的属性信息包括文件大小、属主、用户组、读写权限、文件类型,修改时间,还包含执行文件实体的指针的功能(inode节点与block的对应关系)等,但是,inode不包含文件名。
inode除了记录文件的属性信息以外,还会为每个文件进行信息索引,所以就有了inode的数值,操作系统根据指令即可通过inode的数值找到对应的文件实体。文件,inode和block之间的关系见下图:
inode小结:
1)硬盘分区格式化ext4文件系统后会自动生成一定数量的inode和block
2)inode是索引节点,作用是存储文件的属性信息以及作为文件的索引(指向文件的实体)
3)inode是一块存储空间,centos6、7默认inode大小是256字节
4)inode是一串数字,不同的文件对应的inode在文件系统里是唯一的
5)inode相同的文件,互为硬链接文件(关于硬链接的知识,我们在后面的推文中安排)。
6)一个文件被创建后至少要占用一个inode和一个block
7)block的大小一般有1k 2k 4k几种,其中引导分区为1k,其他普通分区为4k。
8)查看inode总量和大小:
df -i
block
记录文件的内容,如果文件很大,则一个文件会占用多个block。block大小在格式化的时候确定,一旦格式化完成,将无法修改这个大小。常见block大小有1KB、4KB,特殊生产场景还有4MB的情况。
block(区块)是用来存放文件的内容的,但是ext2支持的区块大小有1K,2K,4K三种,在存放数据时,有以下几个原则:
-
block的数量与大小在格式化的时候就已经确定了,无法修改(除非重新格式化)
-
一个block只能放置一个文件的数据
-
如果文件大小比block大,那这个文件就会占用多个block
-
如果文件大小小于block,那这个区块的剩余容量也不能被其他文件使用
block小结:
1) 硬盘读取数据是按block为单位读取的
2) 一个文件可能占用多个block,每读一个block就会消耗一次硬盘IO
3) 如果要提升硬盘IO性能,那么就要尽可能一次性读取数据尽量的多
4) 一个block只能存放一个文件的内容,无论内容有多少,如果block 4k,那存放1k的文件,剩余3k就浪费了
5) block并非越大越好,block太大对于小文件存放就会浪费硬盘空间,例如:1M的文件,block为4k,占用约250个block,block为1k,占用1000个block,访问效率谁更高?消耗IO分别为250次和1000次
6) 大文件(大于16k)一般设置block大一些,小文件一般设置block小一些
7) block太大,例如4k,文件都是0.1k的,大量浪费硬盘空间
8) block太小,例如1k,文件都是1000k,消耗硬盘IO
9) block的设置也是格式化分区的时候确定的
10) 文件较大时,block设置大一点会提升硬盘访问效率
11) ext3、ext4文件一般设置为4k
inode与biock之间的关系
在创建文件系统的时候(即格式化的时候)会创建inode和block,假设文件属性、block号存放在下图中的11号inode中,假设block号是2,5,14,17,那么操作系统就可以按照图示的方式读出来:
在11号inode里记录了文件数据的实际存放位置为2,5,14,17这4个区块,此时操作系统就能够拿到这四个存储位置并一次性把它的内容读出来。
对于上面的这种从inode里拿到所有的区块信息的管理方式,我们成为索引式文件系统。
inode、block总结:
1) 硬盘分区格式化文件系统后,会分为inode和block两部分内容
2) inode存放文件的属性以及执行文件实体的指针,文件名不在inode里,一般存放在上级目录的block里
3) 访问文件,通过文件名àinodeàblock
4) inode一般情况默认大小256B,block大小1,2,4k,默认4k,注意,引导分区等特殊分区除外。
5) 通过df -i查看inode的数量及使用情况,dumpe2fs、xfs-info查看inode及block的大小及数量。
6) 一个文件至少占用一个inode及一个block,多个文件可以占用同一个inode(硬链接),相同文件
7) 一个block只能被一个文件占用,如果文件很小,block很大,剩余空间浪费。无法继续被其他文件使用。
8) block不是越大越好,要根据业务需求进行选择。
9) 在格式化时就决定了inode和block大小,以后无法更改。