浅谈inode和block与磁盘性能的初级优化

什么是inode和block?

所谓的inode就是索引节点(index node)的意思,在每一个存储设备被格式化创建文件系统后,所有的文件大致被分为了两部分,分别是inode和block。

其中inode用来存储文件属性信息,其中包括了文件大小,文件的归属者,文件的归属组,权限,类型,修改时间,以及指向文件实体数据(block)的指针。

block中存储的就是文件的实际数据,比如说,照片,视频,音频等等,但是有一点需要注意!就是inode当中不包含文件名!一个文件的文件名,存储在上级目录的block中!

其实inode和block之间的关系就像是一本书一样,inode是一本书的目录,一本书会有很多内容,一个知识点或者一个故事会占很多页,一个block就相当于书中的一页内容。

所以说一般情况下一个inode会对应一个或多个block。

inode和block的大小是可以手动去指定的,并且在不同的操作系统和文件系统下inode和block的大小是不一样的,下面就以centos6为例,如果想查看指定分区的inode大小和block大小可以使用dumpe2fs命令去查看。

例如:

dumpe2fs /dev/sda1 | grep -i "Inode size"

查看inode大小。

dumpe2fs /dev/sda1| grep -i "block size"

查看block大小。

如果,在centos6系统下查看本机磁盘的inode使用情况可以使用df -i 命令去查看。

df命令的-i参数可以查看本机分区中一共生成了多少inode,以及使用了多少inode,还剩余多少inode可用。

简单了解了inode和block后,下面说一个关于block与磁盘I/O性能的基础调优。

磁盘在读取数据的时候,是按照block为单位来读取的。

其实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做一些调整,可以提高磁盘的利用率和读取性能。

inode和block的大小在创建文件系统(格式化分区)时就可以指定了。下面是示例~

mkfs.ext4 -b 4096 -I 1024 /dev/sdb1

(-b参数用来指定这个分区每个block的大小,单位为byte)

(-i 参数用来指定每个inode的大小,单位同样为byte)

最后做几点补充:

一个文件的文件名,存放于上级目录的block中。

多个文件可以占用同一个inode(linux的硬链接就是这个原理)

但是一个block只能属于一个文件。

时间: 2024-10-08 21:41:52

浅谈inode和block与磁盘性能的初级优化的相关文章

浅谈C++ 异常处理的语义和性能

异常处理是个十分深奥的主题,这里只是浅论其对C++性能的影响. 在VC++中,有多个异常处理模式,三个最重要: No exception handling (无异常处理) C++ only (C++语言异常处理) C++ 加SEH (C++语言加windows 结构异常处理机制) 异常处理每增加一个级别,都要付出时空上的代价.我们从下面简单的C++例子着手,分析异常处理的原理及其性能: // simple class class MyAppObject { public: MyAppObject

浅谈inode

1.初识inode: 文件存于硬盘上(硬盘最小存储单元是"扇区"(sector),每个扇区储存512字节) 操作系统读硬盘时,一次性读取一个"块"(block)(8个sector组成) 由多个扇区组成的块-->文件存取的最小单位 文件数据存储在"块"中 储存文件元信息-->inode(索引节点) 2.inode包含文件的元信息,其内容: 文件字节数.文件拥有者的User ID.文件的Group ID.文件的读.写.执行权限.文件的时间

ext2 的inode 为什么在格式化磁盘时候,就确定有多少个

ext2.不是使用inode来作为文件信息的管理么,那么为什么说 inode和 block在磁盘格式化的时候,就知道有多少个 block 还好说,block 是用来存储实际的文件内容的,根据磁盘就可以得到可以分配出多少个block,但是inode是记录文件 的属性内容,难道inode 的数量,是在初始化的时候,就固定了,还是也是基于磁盘得到一个inode的大致数量, 百思不得其姐 原文地址:https://www.cnblogs.com/wangchaodong/p/11965602.html

Linux文件访问流程及磁盘inode和block总结

Linux文件访问流程 inode是文件的唯一标识,文件名和inode的对应关系存放在上一级目录的block中:inode里有指向文件block的指针和文件的属性,从而通过block获得文件数据. 磁盘的容量由inode和block共同决定 磁盘空间是否满了,是由两项参数决定的: 第一个是inode是否满了,第二是block是否满了,任何一个满了都不能存数据. 有关inode的总结 磁盘格式化创建文件系统时会生成一定数量的inode和block: inode称为索引节点,作用是存放文件的属性信息

浅谈Linux磁盘与文件系统管理

在探讨磁盘与文件系统管理前,我们先简单了解下磁盘结构:1)盘片,即记录数据的部分,数量与磁头数相同:2)磁头, 读写盘片上的数据:3)主轴马达,带动盘片旋转,家用级转速在5400rpm-7200rpm,企业级可达15000rpm:4)扇区,最小的物理存储单元,大小为512字节:5)磁道,磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道(Track):6)柱面,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面(Cylinder). 接下

浅谈 js 下 with 对性能的影响

这几天多次看到有博主们在写 with 的文章,这货确实非常方便,但是却是个性能杀手,所以一直都是上不得台面的.那么他究竟会让效率低下到什么程度呢?先来看下 with 是如何的便捷吧.. // 正常调用 console.log(location.host); console.log(location.pathname); // 在 with 下 with (location) { console.log(host); console.log(pathname); } 如果不影响性能,确实是非常霸气

浅谈前端性能优化(移动端)

上一篇讲了PC端的部分:前端性能优化(PC端),这次继续说移动端的.相对于PC端的,移动web浏览器上有一些明显的特点:设备的屏幕小.新特性兼容性较好.支持一些比较新的HTML5和CSS3.需要与Native应用交互等.但移动端可用的CPU资源和网络资源极为有限,因此要做好移动端web上的优化往往需要考虑做更多的事情.首先在移动web的前端页面渲染中,PC的优化规则同样适用,此外针对浏览器也要做一些更细节的优化达到更好的效果.需要注意的是,并不是移动端的优化在PC端不适用,而是由于兼容性的原因,

BizTalk开发系列(三十二)浅谈BizTalk主机性能优化

很多BizTalk的项目都要考虑到性能优化的问题,虽然BizTalk采用多线程处理消息的,大大提高了程序效率.但默认情况下 BizTalk的主机有很多阻止参数会控制BizTalk对服务器的资源使用率,从而约束了BizTalk的效率.之前做了一个200万条CSV数据通过 BizTalk传到数据库的程序.在不改变程序的情况下对主机性能做了一下简单优化,处理效率发生了成倍的增长. 程序逻辑 先简单的介绍一下程序的处理逻辑,CSV原文件大概有200多万条数据,文件大小50多M.每条只有两个字段总长度大概

浅谈优化程序性能(下)

前言 在上一篇随笔中,我们谈到最小化一个计算中的操作数量不一定会提高它的性能.现在,就让我们来解开为什么会出现这种情况的原因吧. 处理器体系结构 在计算机的处理器中,处理一条指令包括很多操作,可以分为取指(fetch).译码(decode).执行(execute).访存(memory).写回(write back)和更新程序计数器(PC update)等几个阶段.这些阶段可以在流水线上同时进行,如下图所示: 上图中,F.D.E.M 和 W 分别代表上述五个阶段.当然,现代的处理器比这个示例要复杂