【Linux】Linux 文件系统——有关 inode 不足的案例

ℹ️大家好,我是练小杰,今天周二了,明天星期三,还有三天就是星期五了,坚持住啊各位!!!😆


本文是对之前Linux文件权限中的inode号进行实例讨论,看到博客有错误欢迎指正,谢谢各位的支持🙏

前情回顾: 【剖析Linux文件权限概念,文件类型和inode号】
Linux专栏:🔝 【Linux零基础开始】【Shell 脚本编程】 【文件权限专栏】

主页:👉【练小杰的CSDN】

在这里插入图片描述

inode案例

    • 主页:👉【[练小杰的CSDN](https://blog.csdn.net/weixin_55767624?spm=1011.2415.3001.5343)】
  • 前言
  • 案例1
    • 主要问题
    • 查找原因
    • 解决方案:
      • 步骤1
      • 步骤2
      • 步骤3
  • 案例2
    • 初步排查
    • 详细排查命令
      • 使用 `df -h` 查看磁盘使用情况:
      • 使用 `df -i` 查看inode使用情况:
      • 再查找根分区中占用inode较多的目录:
      • 分析 `/var/spool/postfix/maildrop` 目录
    • 解决方案
      • 1.清理 /var/spool/postfix/maildrop 目录中的临时文件
      • 2. 优化Postfix配置
      • 3.使用软链接(可选)
  • 预防措施

在这里插入图片描述

前言

前两天我们详细分析了Linux系统的基本权限,文件类型和inode号,首先回顾一些必备的概念及其命令!!!再通过一些案例,解决关于 Linux 文件系统中 inode 不足的问题。

  • inode: inode(索引节点)是文件系统中的一个数据结构,用于存储文件或目录的基本信息。每个文件和目录都有一个唯一的 inode 号。 inode 存储的信息包括文件大小、权限、所有者、时间戳等,但不包含文件名。

  • df -h:用于显示文件系统的磁盘使用情况,以可读的格式(例如 GB、MB)显示。比如,df -h 的输出可能如下:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        20G   10G   9.5G  50% /
/dev/sdb1        50G   30G   18G  65% /data
  • df -i :用于显示文件系统的 inode 使用情况,df -i 的输出可能如下:
Filesystem      Inodes  IUsed  IFree IUse% Mounted on
/dev/sda1       1310720 655360 655360  50% /
/dev/sdb1       3276800 3276800      0 100% /data
  • 软链接:软链接(Symbolic Link)是一种特殊类型的文件,它指向另一个文件或目录的路径。 创建软链接的命令是 ln -s 目标路径 链接路径

案例1

主要问题

在一台配置较低的 Linux 服务器上,由于 /data 分区的 inode 已满,导致无法创建新文件和目录。通过 df -h 命令发现 /data 分区还有 12G 的剩余空间,但 df -i 命令显示 inode 已满(IUsed=100%)。

查找原因

/data/cache 目录中存在大量的小字节缓存文件,这些文件占用的 Block 不多,但占用了大量的 inode

解决方案:

步骤1

删除 /data/cache 目录中的部分文件,释放出 /data 分区的一部分 inode

  • 首先,检查 /data/cache 目录中的文件数量和大小
# 查看 /data/cache 目录中的文件数量
ls -l /data/cache | wc -l

# 查看 /data/cache 目录中的文件大小
du -sh /data/cache
  • 选择性地删除部分缓存文件
rm /data/cache/部分文件

步骤2

用软链接将空闲分区 /opt 中的 newcache 目录连接到 /data/cache,使用 /opt 分区的
inode 来缓解 /data 分区 inode 不足的问题。

  • 创建软链接,将 /opt/newcache 目录链接到 /data/cache
# 创建软链接
ln -s /opt/newcache /data/cache

步骤3

验证结果,验证 inode 使用情况是否恢复正常。

  • 查看 inode 使用情况

    df -i 
    

案例2

在一个运行多个Web应用程序的Linux服务器上,管理员发现其中一个应用程序无法生成新的日志文件。尽管服务器的磁盘空间看起来还很充裕,但应用程序持续报错,提示“磁盘空间不足”。经过初步排查,管理员怀疑可能是inode耗尽的问题。

初步排查

  • 使用 df -h 命令查看磁盘使用情况,发现根分区 / 还有50GB的剩余空间。
  • 使用 df -i 命令查看inode使用情况,发现根分区的inode已经用满(IUsed=100%)。

详细排查命令

使用 df -h 查看磁盘使用情况:

[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        100G   50G   45G  52% /
/dev/sdb1        200G  150G   45G  78% /data

由输出可以看出,根分区 / 还有45GB的可用空间,磁盘空间看起来充足。

使用 df -i 查看inode使用情况:

[root@localhost ~]# df -i
Filesystem      Inodes  IUsed  IFree IUse% Mounted on
/dev/sda1      6553600 6553600      0 100% /
/dev/sdb1     13107200  500000 12607200   4% /data

由输出可知,根分区的inode已经用满(IUsed=100%),而 /data 分区的inode使用率仅为4%

再查找根分区中占用inode较多的目录:

通过以下管道查询命令查找根分区中占用inode较多的目录。

[root@localhost ~]# for i in /*; do echo $(ls -1 $i | wc -l) $i; done | sort -nr | head -n 20

该命令会列出根分区下每个子目录中的文件数量,并按数量排序。通过分析输出,发现 /var/spool/postfix/maildrop 目录中包含了大量的零碎小文件。

分析 /var/spool/postfix/maildrop 目录

  • 利用cd 命令进入该目录并查看文件数量。

[root@localhost ~]# cd /var/spool/postfix/maildrop
[root@localhost maildrop]# ls -l | wc -l
6000000

该目录中包含了600万个文件。这些文件是Postfix邮件队列中的临时文件,由于某种原因,这些文件没有被及时清理,导致inode耗尽。

解决方案

1.清理 /var/spool/postfix/maildrop 目录中的临时文件

  • 使用以下命令清理邮件队列中的临时文件:
[root@localhost maildrop]# postsuper -d ALL

或者使用 find 命令删除特定时间段之前的文件:

[root@localhost maildrop]# find /var/spool/postfix/maildrop -type f -mtime +7 -exec rm {} \;

⚠️注意:在删除文件之前,建议先备份重要数据,并确认这些文件确实不需要。

2. 优化Postfix配置

为了防止未来再次出现类似问题,可以优化Postfix的配置。

  • 调整邮件队列的保留时间:通过修改 maximal_queue_lifetime 参数,缩短邮件在队列中的保留时间。
  • 启用自动清理机制:配置Postfix的自动清理功能,定期删除过期的邮件队列文件。

3.使用软链接(可选)

若根分区的inode已经耗尽,且无法通过清理文件来释放,可以考虑将某些目录移动到inode充足的分区,并使用软链接进行连接。如下命令所示,可以利用 /opt 分区的inode资源,缓解根分区inode不足的问题。

[root@localhost ~]# mv /var/spool/postfix/maildrop /opt/maildrop
[root@localhost ~]# ln -s /opt/maildrop /var/spool/postfix/maildrop

预防措施

  1. 定期监控inode使用情况:
    使用 df -i 命令定期检查inode使用情况,及时发现和解决潜在问题。

  2. 配置日志轮转:
    配置日志轮转工具(如 logrotate),定期清理和压缩日志文件,防止日志文件占用大量inode。

  3. 优化应用程序:
    检查和优化应用程序的日志记录机制,避免生成过多的零碎小文件。

  4. 使用更高效的文件系统:
    考虑使用支持更大inode数量的文件系统(如 XFS),以减少inode耗尽的风险。


今天的Linux系统中有关文件权限内容到这里就结束了,感谢各位朋友的陪伴👋
ℹ️了解更多,主页【练小杰的CSDN】
⚠️若博客里的内容有问题,欢迎指正,我会及时修改!!!
下周同一时间再见,各位伙伴们🚴🏻‍♀️~~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/973274.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot整合Redis和Redision锁

参考文章 1.Redis 1.导入依赖 <!--Redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.apache.c…

亲测可用,IDEA中使用满血版DeepSeek R1!支持深度思考!免费!免配置!

作者&#xff1a;程序员 Hollis 之前介绍过在IDEA中使用DeepSeek的方案&#xff0c;但是很多人表示还是用的不够爽&#xff0c;比如用CodeChat的方案&#xff0c;只支持V3版本&#xff0c;不支持带推理的R1。想要配置R1的话有特别的麻烦。 那么&#xff0c;今天&#xff0c;给…

一周学会Flask3 Python Web开发-Debug模式开启

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 默认情况&#xff0c;项目开发是普通模式&#xff0c;也就是你修改了代码&#xff0c;必须重启项目&#xff0c;新代码才生效&…

某手sig3-ios算法 Chomper黑盒调用

Chomper-iOS界的Unidbg 最近在学习中发现一个Chomper框架&#xff0c;Chomper 是一个模拟执行iOS可执行文件的框架&#xff0c;类似于安卓端大名鼎鼎的Unidbg。 这篇文章使用Chomper模拟执行某手的sig3算法&#xff0c;初步熟悉该框架。这里只熟悉模拟执行步骤以及一些常见的…

PyTorch 深度学习框架中 torch.cuda.empty_cache() 的妙用与注意事项

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 在使用 PyTorch 进行深度学习模型训练与调优过程中&#xff0c;torch.cuda.empty_cache() 方法作为一种高效工具被广泛采用&#xff1b;但其正确应用要求充分理解该方法的功能及最佳实践。下文将对该方…

巧用GitHub的CICD功能免费打包部署前端项目

近年来&#xff0c;随着前端技术的发展&#xff0c;前端项目的构建和打包过程变得越来越复杂&#xff0c;占用的资源也越来越多。我有一台云服务器&#xff0c;原本打算使用Docker进行部署&#xff0c;以简化操作流程。然而&#xff0c;只要执行sudo docker-compose -f deploy/…

配置Api自动生成

我的飞书:https://rvg7rs2jk1g.feishu.cn/docx/TVlJdMgYLoDJrsxAwMgcCE14nxt 使用Springfox Swagger生成API&#xff0c;并导入Postman&#xff0c;完成API单元测试 Swagger: 是一套API定义的规范&#xff0c;按照这套规范的要求去定义接口及接口相关信息&#xff0c;再通过可…

【JMeter使用-2】JMeter中Java Request采样器的使用指南

Apache JMeter 是一款功能强大的性能测试工具&#xff0c;支持多种协议和测试场景。除了内置的采样器&#xff08;如HTTP请求、FTP请求等&#xff09;&#xff0c;JMeter还允许通过 Java Request采样器 调用自定义的Java代码&#xff0c;从而实现更复杂的测试逻辑。本文将详细介…

将Google文档导入WordPress:简单实用的几种方法

Google文档是内容创作者非常实用的写作工具。它支持在线编辑、多人协作&#xff0c;并能够自动保存内容。但当我们想把Google文档中的内容导入WordPress网站时&#xff0c;可能会遇到一些小麻烦&#xff0c;比如格式错乱、图片丢失等问题。本文将为大家介绍几种简单实用的方法&…

Android开发-深入解析Android中的AIDL及其应用场景

深入解析 Android 中的 AIDL 及其应用场景 1. 前言2. AIDL 的核心概念3. AIDL 的实现步骤3.1. 定义 AIDL 接口文件3.2. 实现服务端&#xff08;Service&#xff09;3.3. 客户端绑定与调用 4. AIDL 的典型应用场景4.1. 多进程应用4.2. 与系统服务交互4.3. 高性能 IPC4.4. 跨应用…

PWM(脉宽调制)技术详解:从基础到应用实践示例

PWM&#xff08;脉宽调制&#xff09;技术详解&#xff1a;从基础到应用实践示例 目录 PWM&#xff08;脉宽调制&#xff09;技术详解&#xff1a;从基础到应用实践示例学前思考&#xff1a;一、PWM概述二、PWM的基本原理三、PWM的应用场景四、PWM的硬件配置与使用五、PWM的编程…

谷粒商城—分布式高级②.md

认证服务 1. 环境搭建 创建gulimall-auth-server模块,导依赖,引入login.html和reg.html,并把静态资源放到nginx的static目录下 2. 注册功能 (1) 验证码倒计时 //点击发送验证码按钮触发下面函数 $("#sendCode").click(function () {//如果有disabled,说明最近…

Nginx(详解以及如何使用)

目录 1. 什么是Nginx&#xff1f; 2. 为什么使用nginx? 3. 安装nginx 3.1?安装nginx的依赖插件 3.2 下载nginx ?3.3?创建一个目录作为nginx的安装路径 ?3.4?解压 ?3.5?进入解压后的目录 3.6?指定nginx的安装路径 ?3.7?编译和安装nginx 3.8 启动nginx ?…

STM32 HAL库标准库+ESP8266+机智云

前言 最近在项目中需要云平台对接&#xff0c;前面使用的是阿里云物理平台&#xff0c;具体开发可以看看我的这个文章&#xff1a;手把手教会使用阿里云平台&#xff0c;不过好像没有可以在手机很方便打开连接的&#xff0c;所以我在网上找到一些资料&#xff0c;发现机智云是…

【前端框架】Vue3 面试题深度解析

本文详细讲解了VUE3相关的面试题&#xff0c;从基础到进阶到高级&#xff0c;分别都有涉及&#xff0c;希望对你有所帮助&#xff01; 基础题目 1. 简述 Vue3 与 Vue2 相比有哪些主要变化&#xff1f; 答案&#xff1a; 响应式系统&#xff1a;Vue2 使用 Object.definePrope…

DarkLabel 2.4使用指南:高效标注视频数据目标检测标签

工具概述 DarkLabel 2.4 是一款强大的多功能标注工具&#xff0c;专为计算机视觉开发者设计&#xff0c;旨在提升标注工作的效率和精确度。其智能标注引擎支持两项核心功能&#xff1a;线性插值标注与多目标跟踪&#xff0c;极大地优化了视频标注过程。 &#xff08;1&#x…

js解析后端传来的如图示的list集合,怎么获取每个map的key和value

如图示&#xff0c;后端传到前端的questTypeList是一个HashMap的list集合 使用c标签将传来的集合放到下拉单选框中&#xff0c; <% taglib prefix"c" uri"http://java.sun.com/jsp/jstl/core" %><html> <body><form action"yo…

SpringSecurity请求流转的本质

1. SpringSecurity核心源码分析 分析SpringSecurity的核心原理,那么我们从哪开始分析?以及我们要分析哪些内容? 系统启动的时候SpringSecurity做了哪些事情?第一次请求执行的流程是什么?SpringSecurity中的认证流程是怎么样的?1.1 系统启动 当我们的Web服务启动的时候,…

[论文阅读] SeeSR: Towards Semantics-Aware Real-World Image Super-Resolution

文章目录 一、前言二、主要贡献三、Introduction四、Methodology4.1 Motivation &#xff1a;4.2Framework Overview.** 一、前言 通信作者是香港理工大学 & OPPO研究所的张磊教授&#xff0c;也是图像超分ISR的一个大牛了。 论文如下 SeeSR: Towards Semantics-Aware Rea…

在VS中通过vcpkg包管理器来安装使用qt5

常用指令 .\vcpkg install 库名 .\vcpkg install 库名版本号.\vcpkg install 库名 --trip x86-windows.\vcpkg list.\vcpkg search 库名 .\vcpkg x-all-installed --7zip PS G:\vcpkg> .\vcpkg help usage: vcpkg <command> [--switches] [--optionsvalues] [argume…