博客
关于我
文件inode
阅读量:615 次
发布时间:2019-03-12

本文共 2182 字,大约阅读时间需要 7 分钟。

文件空洞与文件inode的关系

文件空洞是 Unix/Linux 系统中一个独特的概念,它涉及到文件写入逻辑位置超过物理末尾的情况。在这种情况下,文件系统并不立即将新数据写入磁盘上的空闲空间,而是记录空洞的存在。当数据最终被写入时,文件系统会为新写入的数据分配磁盘块。空洞的一些特点值得注意:

  • 文件空洞不会占用磁盘块:只有在实际写入数据时,文件系统才会为空洞中的数据分配磁盘存储空间。这使得文件名义的大小(即文件所属的inode中的size字段)可能大于实际占用的磁盘空间。

  • 空洞文件与磁盘使用的影响:空洞文件不会占用磁盘空间,但系统会为了向空洞中写入数据而分配磁盘块。因此,文件名义的大小可能远大于实际占用的磁盘空间。这意味着 ls -l 命令显示的大小与实际磁盘占用可能会有很大差别,而 du -c 命令则可以准确地反映实际占用的磁盘区域。

  • 常用工具:使用 du -h --max-depth=1 /home/admin 可以查看文件夹中文件占用的磁盘空间,而 du -c aaa.txt 则可以显示单个文件占用的磁盘块数量。od -c aaa.txt 是查看文件内容的好选择。

  • inode 的作用

    在 Unix/Linux 系统中,文件的元数据(如创建者、修改时间、文件大小等)都存储在inode(索引节点)中。每个文件和目录都有一个唯一的inode。inode 的主要作用是存储文件的元数据,而不是文件内容本身。以下是关于inode 的几个关键点:

  • 硬链接与软连接

    • 硬链接:多个文件名可以指向同一个inode。例如,文件名1、文件名2和文件名3都可以是同一个inode的硬链接。如果删除其中一个文件名,其他文件名仍然可以访问该文件。硬链接的_inode_号码决定文件的身份,而文件名是访问的方式。
    • 软连接(符号链接):软连接的目标文件存储在软连接的inode中。软连接文件本身并不直接指向目标文件的inode,而是记录了访问目标文件的路径。如果目标文件被删除,软连接文件仍然会保留其记录。
  • inode 的使用特性

    • 软连接会导致inode 的引用次数增加,这可能引发文件占用空间的问题。
    • 移动文件或重命名文件不会改变文件的inode号码,这使得系统无法通过inode号直接确定文件的位置。
    • 系统通过inode号识别文件,而不是文件名。因此,常常需要使用 statls -i 命令来查看具体的inode信息。
  • 应用场景

    • 硬链接可以用于共享文件或实现文件的热部署。
    • 软连接常用于构建配置文件或脚本时的链接指向。
  • df 与 du 的区别

    dfdu 是两种常用的磁盘空间查看工具,它们的主要区别如下:

  • 实时更新与不实时更新

    • df 命令对磁盘空间的报告通常是实时的,可以显示系统当前磁盘的使用情况。
    • du 命令在大文件情况下可能会缓存统计结果,更新可能有延迟。
  • 文件系统的 inode 情况

    • df -i 命令可以展示文件分区的inode使用情况,包括各个分区已使用的inode数和剩余的inode数量。
    • du -c 命令显示出文件或文件夹占用的磁盘块数量。
  • 处理大文件删除的问题

    • 如果有进程正在打开一个大文件,而文件被 rmmv 删除,du 会立即更新报告显示磁盘空间的释放。
    • df 命令则不会立即更新报表,仍显示磁盘空间未释放,只有当进程终止后,df 才能正确反映磁盘空间的变化。
  • возможности导致 dfdu报告不一致的原因

  • 元数据不一致:文件元数据的更新可能导致 dfdu 的报告不一致,通常影响较小。

  • 被删除的还在运行:在一些错误操作中,如果文件被删除但进程仍在打开文件,dfdu 可能不会及时反映磁盘空间的释放。这也是 lsof(列表打开文件)命令显示被删除的文件占用磁盘空间的主要原因。

  • 文件系统缓存问题:文件系统的缓存可能会导致 du 的统计结果与实际不一致,尤其是在频繁读取或写入大文件的情况下。

  • 磁盘空间问题的解决思路

    面对磁盘空间不足的问题,可以采取以下步骤进行排查和解决:

  • 使用 dfdu 检查磁盘空间占用情况

    • 使用 df -h 查看各文件系统的磁盘使用情况。
    • 使用 du -h --max-depth=1 /home/admin 查看指定目录下的文件占用情况。合理简化使用的 --max-depth 值,以减少计算量。
  • 查找被删除的文件占用磁盘空间的可能性

    • 使用 lsof /home/admin | grep deleted 检查是否有被删除的文件仍然占用磁盘空间。这个命令可以帮助快速定位问题文件。
  • 检查inode 的使用情况

    • 使用 df -i 查看各个文件系统的inode使用情况。如果发现inode占用比例过高,可能需要检查是否有不必要的软链接或大文件引用问题。
  • 重启进程或服务

    • 确认是否有长时间运行但被删除的进程或服务。例如,在清理日志的过程中,如果误删了重要日志文件,重启相关服务可能是一个有效的解决办法。
  • 定期维护文件系统

    • 定期使用 dudf 查看磁盘空间使用情况, 及时清理不必要的文件或优化文件夹结构。
    • 考虑使用 eagainloopback 装载器优化磁盘使用方式。
  • 通过以上步骤可以系统性地排查和解决磁盘空间不足的问题,避免影响系统性能。

    转载地址:http://wvwaz.baihongyu.com/

    你可能感兴趣的文章
    Myeclipse常用快捷键
    查看>>
    MyEclipse更改项目名web发布名字不改问题
    查看>>
    MyEclipse用(JDBC)连接SQL出现的问题~
    查看>>
    mt-datetime-picker type="date" 时间格式 bug
    查看>>
    myeclipse的新建severlet不见解决方法
    查看>>
    MyEclipse设置当前行背景颜色、选中单词前景色、背景色
    查看>>
    Mtab书签导航程序 LinkStore/getIcon SQL注入漏洞复现
    查看>>
    myeclipse配置springmvc教程
    查看>>
    MyEclipse配置SVN
    查看>>
    MTCNN 人脸检测
    查看>>
    MyEcplise中SpringBoot怎样定制启动banner?
    查看>>
    MyPython
    查看>>
    MTD技术介绍
    查看>>
    MySQL
    查看>>
    MySQL
    查看>>
    mysql
    查看>>
    MTK Android 如何获取系统权限
    查看>>
    MySQL - 4种基本索引、聚簇索引和非聚索引、索引失效情况、SQL 优化
    查看>>
    MySQL - ERROR 1406
    查看>>
    mysql - 视图
    查看>>