zoukankan      html  css  js  c++  java
  • 【Linux文件系统】inode(索引节点)和 block(块)

    什么是inode和block?

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

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

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

    另外,还有一个超级区块(superblock)会记录整个档案系统的整体信息,包括inode与block的总量、使用量、剩余量等。

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

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

    inode总结:

    磁盘分区后格式化为etx4文件系统后,产生一定数量的inode和block

    inode存放文件属性信息以及指向文件实体的指针

    ext3/ext4文件系统block存放文件的实际数据

    inode表现形式为一串数字,不同文件对应的inode在os中是唯一的

    ext3/ext4文件系统下,正常情况一个文件创建有且只能占用一个inode和至少占用一个block,大文件占用多个block,如果一个block未占完,剩余空间也无法使用

    简单了解了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 的大小一般有1k,2k,4k,除引导分区1k外,其他分区为4k。

    block总结:

    磁盘读取数据是按block为单位读取

    一个文件可能占有多个block,每读取一个block就会消耗一次磁盘IO,想提升IO性能,尽可以一次读取尽量多。

    一个block只能存放一个文件,也就是无论文件多小,这个block剩余空间浪费掉了,假如一个文件大小为4k,但是一个小文件1k,3k剩余空间被浪费了,磁盘IO是衡量磁盘性能重要指标。

    性能

    简单了解了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(linux的硬链接就是这个原理)

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

    参考:

    https://blog.csdn.net/qq_20817327/article/details/107585371

    https://blog.csdn.net/Ohmyberry/article/details/80427492?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

  • 相关阅读:
    问题:oracle if;结果:Oracle IF语句的使用
    问题:PLS-00204: 函数或伪列 'EXISTS' 只能在 SQL 语句中使用;结果:PL/SQL中不能用exists函数?
    问题:oracle decode;结果:oracle中的decode的使用
    问题:只能在执行 Render() 的过程中调用 RegisterForEventValidation;结果:只能在执行 Render() 的过程中调用 RegisterForEventValidation
    问题:oracle long 与 clob;结果:long类型比clob到底差在什么地方?
    问题:oracle 字符串转换成日期;结果:[oracle] to_date() 与 to_char() 日期和字符串转换
    问题:oracle CLOB类型;结果:oracle中Blob和Clob类型的区别
    问题:C#根据生日计算属相;结果:C#实现根据年份计算生肖属相的方法
    po dto vo bo
    eclipse中自动加载源码的方法
  • 原文地址:https://www.cnblogs.com/SchrodingerDoggy/p/14275524.html
Copyright © 2011-2022 走看看