inode、block和磁盘性能的关系
什么是inode和block?
理解inode,要从文件储存说起。
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(即:Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
block中存储的就是文件的实际数据,比如说,照片,视频,音频等等,但是有一点需要注意!就是inode当中不包含文件名!一个文件的文件名,存储在上级目录的block中!
其实inode和block之间的关系就像是一本书一样,inode是一本书的目录,一本书会有很多内容,一个知识点或者一个故事会占很多页,一个block就相当于书中的一页内容。
inode的内容
inode包含文件的元信息,具体来说有以下内容:
- 文件的字节数
- 文件拥有者的User ID
- 文件的Group ID
- 文件的读、写、执行权限
- 文件的时间戳,共有三个:ctime指inode创建时间,mtime指文件内容上一次修改的时间,atime指文件最后一次访问的时间。
- 链接数,即有多少文件名指向这个inode
- 文件数据block的位置
可以用stat命令,查看某个文件的inode信息。
inode的大小
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。
inode和block的大小是可以手动去指定的,并且在不同的操作系统和文件系统下inode和block的大小是不一样的。
由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。但是可以通过更改inode大小来改变inode数量。
实际案例
- 情景:
在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题。 后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。
- 查找原因:
/data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。
- 解决方案:
- 删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。
- 用软连接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题。
- 先将该磁盘数据备份,人工更改inode大小,增加inode数量
磁盘性能
其实block的大小与业务与磁盘的I/O性能有着密不可分的关系。 block并非越大越好或者越小越好,还是要看业务,下面就举两个例子:
-
如果遇到这种单个文件特别小(小于一个block),而且这种小文件特别多,block设置的太大则对block是一种浪费!这是因为一个文件不管有多小,它都会占用一个inode和一整个block,假如说一个block的大小为4k,磁盘里有一个小文件是1k,那么这个小文件会把4k的一整个block全部占用,剩下的3k就白白浪费掉了。
-
如果单个文件很大的情况下,block设置的很小,就需要读取多个block,这对磁盘I/O是一种消耗(因为每读取一个block都会消耗磁盘I/O,磁盘每次读取都是以block为单位的)
-
如果单个文件很大,适当的加大block的大小则会提高磁盘的读取效率,减少了磁盘的I/O。
-
当block设置的太小,则会影响大文件的读取效率,如果block设置的太小,那么存储一个大文件就需要很多很多block,在读取数据的时候就需要到很多block中去读取内容,刚刚说过,磁盘每次读取内容都是以block为单位的,每读取一个block都会浪费一次磁盘I/O,所以,磁盘读取大文件的效率就回大大降低~
所以,综上所述,在进行磁盘格式化区时根据业务的不同对block做一些调整,可以提高磁盘的利用率和读取性能。
补充:
- 一个文件的文件名,存放于上级目录的block中。
- 多个文件可以占用同一个inode(linux的硬链接就是这个原理)
- 一个block只能属于一个文件。
转载于:https://my.oschina.net/1995blog/blog/1592375
分享到:
相关推荐
block的大小会影响文件系统的性能和磁盘空间利用率。较大的block可以减少寻址开销,提高读写速度,但可能会导致空间浪费;较小的block则可以更精细地分配空间,减少浪费,但会增加寻址开销。 #### inode的作用与...
3. **优化文件系统**:选择合适的文件系统(如JFS2),调整文件系统参数,如blocksize和inode size,以适应不同的数据类型和工作负载。 4. **利用缓存机制**:合理配置缓存大小,优化缓存策略,如read-ahead和write-...
超级块(superblock)是文件系统的重要组成部分,它保存了整个文件系统的全局信息,如文件系统的类型、版本、inode和block的总数、使用情况、校验和等。在每个块组(block group)的开头通常都有一个superblock备份...
在Linux文件系统中,inode(即“索引节点”)是一个至关重要的概念,它存储了文件和目录的相关信息,包括权限、所有权、...正确配置inode size、block size和inode count,能够有效提高文件系统的性能和空间利用率。
superblock存储整个文件系统的全局信息,如inode和block的数量、使用情况等;inode用于存储文件的元数据,如权限、时间戳、文件大小等,每个文件对应一个inode;block则是实际存储文件内容的地方,大的文件可能需要...
XFS是一种高性能的日志文件系统,广泛用于Linux服务器和存储系统。与EXT系列文件系统不同,XFS有其特定的扩容工具——`xfs_growfs`,它只支持增大已存在的XFS文件系统,而不能缩小。当我们尝试使用`resize2fs`命令去...
EXT2是EXT文件系统的扩展,而EXT3则是EXT2的扩展,它们在硬盘布局上基本相同,主要区别在于EXT3引入了日志功能以提高文件系统的稳定性和性能。然而,本文主要关注EXT2的磁盘布局,其内容同样适用于EXT3。 在EXT2...
Linux 磁盘配额可以对用户和组来做磁盘配额,可以针对文件的大小和数量做磁盘配置,还可以对用户进行软限制和硬限制。 四、配置磁盘配额 1. 在分区挂载选项上添加参数 在需要做磁盘配额的分区上添加两个参数,...
### Linux磁盘碎片问题 ...通过采用智能的分配策略和高效的数据结构,Linux能够在保证高性能的同时降低磁盘碎片的影响。对于特定的应用场景和工作负载,还可以通过适当的优化措施进一步提高文件系统的性能和稳定性。
- **文件数据block的位置**:存储文件实际数据的磁盘块位置。 例如,使用`stat`命令可以查看特定文件的inode信息: ```bash stat example.txt ``` 这会显示文件的详细信息,包括inode号码、权限、所有者、组、...
对于小文件,选择较小的block大小可以更有效地利用空间,但可能导致大型文件的inode记录过多的block号码,影响读写性能。EXT2使用直接映射和间接映射的方式来存储block号码,以适应不同大小的文件需求。 EXT2的...
调整inodesize(inode大小)可以减少磁盘寻址和元数据操作时间,从而提升性能。对于那些对数据一致性要求不高的应用,比如Web缓存,可以通过tune2fs命令关闭日志功能以提高性能。此外,还可以为文件系统预留特定数量...
不同的文件系统类型(如ext3和ext4)可能有不同的block大小限制,选择合适的block大小和合理分配inode资源,能够提升系统的性能和效率。对于特定的应用场景,如视频服务器,可能需要选择更适应大文件读取的文件系统...
磁盘配额还可以对inode和block进行限制。block限制的是用户在分区中可以使用的实际磁盘空间,而inode限制则关乎文件数量。每个文件在Linux系统中都有一个唯一的inode,用来存储文件的元数据,如所有权、权限、修改...
超级块(super_block)是文件系统的重要组件,它包含了整个文件系统的全局信息,如根目录的inode号、inode与磁盘块的映射关系、块分配状态等。超级块在文件系统挂载时被加载,提供了访问文件系统的起点。通过超级块...
文件系统的基本组件包括超级块(superblock)、索引节点(inode)、数据块(datablock)和目录块(directoryblock)。 挂载是将分区映射到某个目录的过程,使得我们可以通过该目录访问和使用分区。挂载点通常是`/...
Block是磁盘存储的基本单位,而inode则存储文件的元数据,如权限、所有权、修改时间等。解决这个问题需要一些技巧。 首先,你可以通过`df -h`命令查看磁盘使用情况,以了解哪个分区空间不足。例如,如果`/dev/vda1`...
2. **数据块(Data Block)**:Linux系统用于存储和读取数据的基本单位。 3. **主引导记录(MBR)**:磁盘的第一个扇区,包含446字节的主引导程序代码、64字节的分区表等重要信息。 4. **分区表**:位于MBR中,每条...
- **SuperBlock**:记录文件系统的总体信息,如inode和block的数量、使用情况等。每个块组都会保留一份副本。 - **GDT (Group Descriptor Table)**:由多个块组描述符组成,每个块组描述符记录该块组的相关信息。 - ...