zoukankan      html  css  js  c++  java
  • inode 详解

    1.inode 解析:

    存储文件元信息(文件创建者,创建日期,大小等)的区域叫做inode即 索引节点。

    2.inode 内容:
    文件字节数、拥有者UserID,GroupID,读写执行权限,时间戳,链接数,block位置
    3.inode 大小
    inode 也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成连个区域, 一个是数据区,存放文件数据;另一个是inode区,存放inode所包含的信息。每个inode节点的大小,一般是128 字节或256字节。inode节点的总数,在格式化时就给定,一般是每1kb 或2kb 就设置一个inode, 假定在一块1GB的硬盘中,每个inode节点的大小为128字节, 每1KB就设置一个inode,那么inode table 的大小就会达到128MB, 占整个硬盘的12.8%
    查看每个硬盘分区的inode总数和已经使用的数量,可以使用df 命令;
    df -i 
    查看每个inode节点的大小,可以用如下命令
    sudo dumpe2fs -h /dev/hda |grep "Inode size"
    (由于每个文件都必须有一个inode,因此有可能发生inode 已经用光,但是应胖还未存满的情况, 这时,就无法再硬盘上创建为新文件。)

    4.inode号码

    每个inode 都有一个号码,操作系统用inode号码来识别不同的文件。

    Unix、Linux系统内部都不使用文件名,而通过inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的名称或绰号。 表面上,用户通过文件名打开文件。实际上,系统内部这个过程分为三步:首先,系统找到这个文件名对应的inode号码, 其次,通过inode号码,获取inode信息, 最后,根据inode信息,找到文件数据所在的block,读取数据。

    5.目录文件
    Unlx/Linux 系统中,目录也是一种文件。打开目录,就是打开目录文件。
    目录文件的结构非常简单,就是一系列目录项的列表,每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码
    6.硬链接
    一般情况下,文件名和inode号码是一一对应的关系,每个inode号码对应一个文件名。 但是,Unix、Linux 系统允许对个文件名指向同一个inode号码,这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是删除一个文件名,不影响另一个文件名的访问。这种情况被称为“硬链接”
    任何一个目录的‘硬链接’总数总是等于2加上它的子目录总数。
    7.软链接
    文件A和文件B的inode号码不同,但是文件A的内容是文件B的路径,读取文件A时,系统工会自动将访问者导向文件B,因此,无论打开哪一个文件,最后读取的都是文件B,这时,文件A就称为文件B的软链接 或者符号链接。
    这意味着,文件A依赖文件B存在,如果删除文件B,打开文件A报错,没有相关文件或目录。 这时软硬链接的区别, 文件A指向文件B的文件名,而不是文件B的inode号码。 文件B的inode 链接数不会发生改变。
    8.inode 的特殊作用
    *有时文件名包含特殊字符,无法正常删除,这时,删除inode节点,就能祈祷删除文件的作用。
    *移动文件或重命名文件,只是改变文件名,不改变inode号码
    *打开文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。 因此,一般系统无法从inode号码得知文件名。
    9. 实际问题
    在一台配置较低的Linux服务器(内存,硬盘比较小)的/data 分区内创建文件时,系统提示磁盘空间不足,用df -h 命令查看一下磁盘使用情况, 发现/data 分区只使用66% , 还有12G的剩余空间。  之后df -i查看 /data 分区的索引节点,发现已经用满了。导致系统无法创建新目录和文件。
    查找原因: /data/cache 目录中存在数量非常多的小字节缓存文件, 占用的blcok不多, 但是占用了大量的inode空间。
    解决方案: 1.删除/data/cache 目录中的部分文件,释放/data分区的一部分inode
               2.用软链接将空闲分区/opt 中的newcache 目录链接到/data/cache ,使用/opt分区的inode来缓解 /data 分区inode不足的问题
     ln -s /opt/newcache /data/cache

     

  • 相关阅读:
    从尾到头打印链表
    在链表结尾插入一个结点 以及在 在链表中找到第一个含有某值的结点并删除该结点
    替换空格
    二维数组中的查找
    简单选择排序
    冒泡排序
    Hash表的实现
    二叉排序树
    ajax返回后台编译时都对,返回error
    sql删除重复的记录保留一条
  • 原文地址:https://www.cnblogs.com/LinuxSuDa/p/4360330.html
Copyright © 2011-2022 走看看