zoukankan      html  css  js  c++  java
  • i节点,容易被人遗忘的节点

    部分内容转自点击打开链接 点击打开链接


    前段时间做了RHCE的一道题,是iSCSi的,后来在挂载的时候说是磁盘被占用。当时资料找了很多结果还是没有找到解决方法。反倒是发现了这个inode,也是关于被占用的,只不过这个是空间被占用。

    可能有人会碰到一种情况就是明明磁盘还有很大的空间,但是不能创建文件了。这其实是inode搞得鬼。讲到inode就不得不先讲文件系统。

    文件系统创建结束,分区分为超级块、inode表和数据区三个部分。超级块存放文件系统本身的结构信息. 比如, 超级块记录了每个区域的大小, 超级块也存放未被使用的磁盘块的信息.  inode表存放着文件的一些属性,如文件的大小, 文件所有者, 和创建时间等, 所有i节点都有相同的大小, 并且inode表是这些结构的一个列表, 文件系统中每个文件在该表中都有一个inode, 需要注意的是, inode并不存放文件的名字. 数据区保存了文件的实际的内容. 磁盘上所有块的大小都一样, 这个跟文件系统的块大小是可以不一样的, 文件系统的块大小可以在格式化的时候指定, 这也就是为什么众多SSD玩家买了SSD硬盘之后要4K对齐的最终原因了, 因为传统的格式化的默认的文件系统的块大小跟SSD这种新型的存储设备的块大小是不一样的(传统的是512字节, 而SSD是4096字节), 如果文件系统的块是512而SSD的默认块是4096, 那么读取文件的时候效率就是个问题了, 因为本来读取一次就可以的数据需要读取多次.  如果如果文件包含了超过一个块的内容, 则文件内容会存放在多个数据区的块中. 

    我们知道在linux下一切都是文件:文件是文件,目录是文件,甚至设置也是文件。那么目录就没有inode了吗?其实目录可以看成是一群inode 的集合。目录里面并没有存储文件本身,而是文件名和文件的inode号。

    那么回到我们的主题。当你创建一个文件的时候,系统就自动为你的文件申请了inode。inode是会消耗磁盘空间的。每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode表的大小就会达到128MB,占整块硬盘的12.8%。当你创建了N多个文件并且每个文件很小的时候,可能你的inode已经用光了,但是磁盘仍有剩余。这就是为什么有人遇到磁盘有剩余但创建文件仍然提示磁盘空间不足的原因


    提供一些查看inode的命令:

    查看文件系统的inode总数和使用情况

    df -i

    查看文件的inode号

    ls -i ×××

    查看文件的详细信息

    stat ×××

  • 相关阅读:
    Windows开发,关于通过写代码加载PDB的那些事
    从FreeBSD里面看到的网络协议列表,感觉可以保存一下
    听了几段《双投唐》
    ReactOS 无法显示中文的问题
    ReactOS 代码更新后的编译安装
    都什么年代了,怎么还那种德行
    假冒不伪劣
    ollvm 使用——“Cannot open /dev/random”错误的解决方法
    ollvm 编译
    C/C++ 吐槽第一期:你最讨厌的C/C++里面的数据类型是什么
  • 原文地址:https://www.cnblogs.com/weijing24/p/4746393.html
Copyright © 2011-2022 走看看