1、inode和block、superblock是什么? 要了解inode,请从文件存储开始。
文件存储在硬盘上,硬盘的最小存储单位称为“扇区”,即“Sector”。 每个扇区512字节(相当于0.5KB )。
操作系统读取硬盘时,不读取一个扇区是低效的,一次连续读取多个扇区,即一次读取一个“块”“块”。 由多个扇区组成的这种“块”是文件访问的最小单元。 “块”的大小最常见的是4KB,即8个sector连续组成一个块。
很明显,block是文件访问的最小单位,所有文件数据都存储在“块”中,因此还需要找到存储文件元信息的位置,如文件创建者、文件创建日期和文件大小。 保存这种文档元信息的区域称为inode,中文译名为“索引节点”。
block存储文件的实际数据,包括照片、视频和音频,但需要注意的是,inode不包含文件名。 一个文件的文件名存储在高级目录的block中!
其实inode和block的关系就像书一样。 inode是书的目录,书里有很多内容。 一个知识点或一个故事占很多页面。 一个block相当于书的一个页面的内容。
super block :记录该文件系统的整体信息,包括索引/块的总量、使用量、剩馀量、文件系统的格式和相关信息
注意:扇区是对硬盘而言,块是对文件系统而言。
2、inode的内容inode包含文件的元信息。 具体包括以下内容。
的字节数文件所有者的用户id文件的组id文件的读取、写入和执行权限文件数据block的位置文件引用数,也就是指向此索引节点文件的时间戳的文件名有三个。 ctime是inode更改的时间,mtime是上次修改文件内容的时间,atime是上次访问文件的时间。 差异: mtime:ctime仅在文件内容发生更改时更新。 更改文件属性时,stat命令将更新文件的inode信息和inode的大小。
inode也占用硬盘空间,因此在格式化硬盘时,操作系统会自动将硬盘分为两个区域。 一个是数据区,保管文件数据; 另一个是“索引节点区域”(inode table ),用于存储索引节点中包含的信息。
每个inode的大小通常为128或256字节。 I节点的总数在格式化时给出,并且通常每1KB或每2KB设置一个I节点。 假设在1GB硬盘上,每个inode的大小为128字节,并且每1KB配置一个inode,则inode的大小将达到128MB,占整个硬盘的12.8%。
可以手动指定inode和block的大小,inode和block的大小因操作系统和文件系统而异。
由于每个文件都需要一个inode,因此inode可能已使用,但硬盘可能尚未满。 此时,无法在硬盘上创建新文件。 但是,可以通过调整inode的大小来更改inode的数量。
实际情况
方案:
在配置较低的Linux服务器(内存、硬盘较小)的/data分区中创建文件时,系统会通知您磁盘空间不足,并使用df -h命令检查磁盘的使用情况,结果显示/data分区然后,在df -i中查看/data分区的索引节点(inode ),发现已满(IUsed=100% ),系统无法创建新的目录和文件。
查找原因:
/data/cache目录中有非常多的小字节缓存文件,Block并不多,但占用了大量的inode。
解决方案:
删除/data/cache目录中的部分文件,并释放/data分区的部分inode。
通过软连接将可用分区/opt的newcache目录连接到/data/cache,并使用/opt分区的inode减少/data分区的inode不足。
首先,备份此磁盘数据,手动调整inode的大小,然后增加inode的数量
磁盘性能
其实块的大小与业务和磁盘的I/O性能有密切的关系。 砌块并不是越大越好,或者越小越好。 还是取决于业务。 以下列举两个例子。
如果这样的单个文件非常小,而且这样的小文件非常多,那么块设置太大就会浪费块,这是因为无论一个文件多么小,它都会占用一个inode和整个块如果一个块的大小为4k,磁盘上一个小文件为1k,则此小文件将占用4k的整个块,而剩下的3k将被浪费。
如果单个文件较大,则将块设置得较小,则需要导入多个块。 这是磁盘I/O的消耗量。 (因为每次读取块都会消耗磁盘I/O,所以磁盘每次读取时都是以块为单位。 )
在单个文件较大的情况下,适当增大块大小可以提高磁盘读取效率,并减少对磁盘的I/O。
如果block设置太小,将影响大文件的读取效率。 如果block设置太小,存储一个大文件需要很多block,并且在读取数据时需要将内容读取到很多block中。 正如我刚才所说,磁盘每次读取内容都是以块为单位的,每次读取一个块都会浪费磁盘I/O。 因此,磁盘读取大文件
因此,如上所述,在进行盘格式化时根据业务调整块,从而能够提高盘的利用效率和读取性能。