Linux系统——inode和block
Linux文件属性
磁盘被分区并格式化为ext4文件系统后,会生成一定数量的inode和block
Inode 索引节点
作用:存放文件的属性信息以及作为文件的索引(指向文件的实体block)
Block存放的是文件的实际数据
iNode存放文件的属性信息以及指向文件实体的指针(block的位置),文件名不在iNode里一般在上级目录的block里
系统内部打开文件的步骤
访问文件的过程,通过文件名(上一级目录的block)——>inode ——>blocks
(1)系统找到这个文件名对应的inode号码
(2)通过inode号码,获取inode信息
(3)根据inode信息,找到文件数据所在的block,读出数据
查看inode时,存在三个时间显示,分别是Atime、Mtime、Ctime
Atime:访问时间 查看命令# ls -lu
Mtime:修改内容时间 查看命令# ls -l
Ctime:改变时间(修改文件名、权限等等) 查看命令# ls -lc
inode是磁盘的一块存储空间,CentOS6版本中默认大小256字节
inode的表现形式是一串数字,不同的文件对用的inode在文件系统里是唯一的
inode节点号相同的文件,互为硬链接文件,可认为是一个文件的不同入口
ext4文件系统下,一个文件至少要占用一个inode和一个block(在文件size比较大的情况),多个文件可以占用同一个inode(硬链接),相同文件;正常情况下,一个文件只能占用一个inode
可以再格式化的时候改变inode及block的大小
查看文件inode号码
# ls -i 文件名
# stat 文件名
删除指定的inode号对应的文件
# find ./ -inum inode号 -exec rm -i {} \;
查看文件系统的inode与block的信息
# df -i 设备名(在已挂载状态下查询,查询inode总数与已用数量)
# dumpe2fs -h 设备名 (无需挂载)
# tune2fs -l 设备名 (无需挂载)
查看inode版本
# cat /etc/redhat-release
# dumpe2fs 目标磁盘 | grep -i “inode size”
格式化时指定文件系统的inode个数与block大小
# mkfs.ext4 -N inode 数 -b 块大小(单位字节)设备名
解决inode耗尽导致的磁盘故障
(1)删除不使用文件
(2)将文件备份,重新格式化此文件系统,指定较多的inode个数
查看inode及block的使用量
# df -l
Block
磁盘读取数据是按block为单位读取的
一个文件可能占用多个block,每读取一个block就会消耗一次磁盘I/O;如果要提升磁盘I/O性能,就要尽可能一次性读取多的数据
block是用来存储实际数据的,每个block的大小一般只有1k,2k,4k,其中引导分区等为1k,其他普通法分区多为4k
如果一个文件很大,需要占用多个block,如果文件很小,知道占一个block,并且这个block的剩余空间浪费,即无法再存储其他数据
企业里文件都会比较大(一般会大于4k),block设置大一些会提高磁盘访问效率(一般选择4k)
一个100M(100000K)的磁盘分区,分别写入1K的文件或写入1M的文件,分别可以写多少个?
1K虽然小,但block一般默认4K,即使1K的数据也会占用4K大小,存储数据小号block和inode,inode默认256K,每个文件指导占用一个block的同时还会占用一个inode;1M的数据刚好被4整除,不会浪费空间,大约100个左右,inode充足。
如果向磁盘写入数据提示如下错误:No space left on device, 通过df -h查看磁盘空间,发现没满,请问可能原因是什么?企业场景什么情况下会导致这个问题发生?
最可能原因是inode被耗尽;企业工作中右键临时队列/var/spool/postfix/maildrop这里很容易被大量的恶小文件占满导致No space left on device的错误。