当前位置: 首页 > news >正文

【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】
⚠️若博客里的内容有问题,欢迎指正,我会及时修改!!!
下周同一时间再见,各位伙伴们🚴🏻‍♀️~~

在这里插入图片描述

相关文章:

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

ℹ️大家好,我是练小杰,今天周二了,明天星期三,还有三天就是星期五了,坚持住啊各位!!!😆 本文是对之前Linux文件权限中的inode号进行实例讨论,看到博客有错误…...

计算机视觉:卷积神经网络(CNN)基本概念(二)

第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络(附代码) 第五章&#xff1…...

【第7章:注意力机制与Transformer模型—7.4 NLP领域的BERT、GPT系列模型】

当你在2017年第一次听说Transformer时,可能不会想到这个模型会在短短三年内彻底改变NLP领域。想象一下,原本需要数周训练的翻译模型,现在用Transformer架构几天就能达到更好的效果;那些让程序员们头疼的梯度消失问题,突然变得不再重要。这一切的魔法钥匙,都藏在一个叫做&…...

[代码调试]安装Text2Image(stable diffusion)模型环境的踩坑记录

文章目录 一、xFormers版本问题1、先确认下自己torch版本所对应的cuda版本2.安装对应版本(1) 到对应官网下载包本地安装(2)代码安装 二、attn_mask尺寸错误三、diffusers四、Huggingface 配置基于stable diffusion预训练模型的环境,记录踩坑记录 一、xFormers版本问…...

大数据SQL调优专题——Flink执行原理

引入 上一篇我们了解了Spark,相比起MapReduce来说,它确实已经快了超级多了,但是人类的欲望是没有止境的,这也是推动人类进步的动力。 Flink就是为了满足实时响应的场景需求诞生的。 其实在Flink之前,实时处理其实已…...

Oracle 12c中在同一组列上创建多个索引

在数据库管理与优化领域,索引是提高查询性能的关键工具之一。然而,在某些情况下,单一类型的索引可能不足以满足所有查询的需求。Oracle 12c引入了一个强大的新特性:允许在同一组列上创建多个索引,但仅一个可见&#xf…...

线程安全的集合类

文章目录 多线程环境使⽤`ArrayList`线程不安全线程安全可以使用 `ReentrantLock` 或 `synchronized`来保护 `ArrayList` 的访问。使用同步包装器使用 `CopyOnWriteArrayList`**“写时复制”机制**多线程环境使⽤队列多线程环境使⽤哈希表HashtableConcurrentHashMapHashMap、H…...

【如何实现 JavaScript 的防抖和节流?】

如何实现 JavaScript 的防抖和节流? 前言 防抖(Debounce)和节流(Throttle)是 JavaScript 中优化高频事件处理的两种常用技术。它们可以有效减少事件处理函数的调用次数,提升性能并改善用户体验。本文将详…...

C#中File类的Copy()方法或FileInfo类的CopyTo()方法的参数overwrite取false和true的区别

当调用 System.IO.File.Copy 方法时,第三个参数 overwrite 控制着如果目标位置已经存在同名文件的情况下如何处理。 1、当 overwrite 设置为 true 在这种情况下,即使目标路径下已经有相同名称的文件,该方法也会无条件地覆盖现有的文件。这不…...

力扣 买卖股票的最佳时机

贪心算法典型例题。 题目 做过股票交易的都知道,想获取最大利润,就得从最低点买入,最高点卖出。这题刚好可以用暴力,一个数组中找到最大的数跟最小的数,然后注意一下最小的数在最大的数前面即可。从一个数组中选两个数…...

蚁剑(AutSword)的下载安装与报错解决

蚁剑(AutSword)的下载安装与报错解决 1.下载 唯一官方github下载地址 GitHub - AntSwordProject/AntSword-Loader: AntSword 加载器 2.安装 打开并且进入到下面的界面 下载需要的的版本 进行初始化 3.报错 出现下面的报错 4.解决方法 出现上面报错…...

【全栈开发】----Mysql基本配置与使用

本篇是在已下载Mysql的情况下进行的,若还未下载或未创建Mysql服务,请转到这篇: 2024 年 MySQL 8.0.40 安装配置、Workbench汉化教程最简易(保姆级)_mysql8.0.40下载安装教程-CSDN博客 本文对于mysql的操作均使用控制台sql原生代码…...

Spring Boot项目的基本设计步骤和相关要点介绍

以下是一个关于Spring Boot项目的基本设计步骤和相关要点介绍,我们以一个简单的示例应用——员工管理系统为例进行说明: 一、项目概述 员工管理系统旨在实现对公司员工信息的有效管理,包括员工基本信息录入、查询、更新以及删除等功能。通过Spring Boot框架来快速搭建后端…...

【Spring快速入门】不断更新...

一、Java基础 1、注解 1.3、自定义注解 springboot项目中自定义注解的使用总结、java自定义注解实战(常用注解DEMO)_springboot在类或者方法上加自定义注解-CSDN博客 同平台的新林。大佬就总结的很好,最近写得项目利用aop切面编程中的Aut…...

nodejs版本管理,使用 nvm 删除node版本,要删除 Node.js 的某个版本详细操作

要删除 Node.js 的某个版本并保持 Node Version Manager (nvm) 的管理整洁,可以按以下步骤操作: 步骤 1:查看已安装的 Node.js 版本 nvm ls这会列出你通过 nvm 安装的所有 Node.js 版本。输出类似于: -> v18.17.1v16.20…...

HTML之JavaScript DOM(document)编程处理事件

HTML之JavaScript DOM&#xff08;document&#xff09;编程处理事件 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…...

5.【线性代数】—— 转置,置换和向量空间

五 转置&#xff0c;置换和向量空间 1. 置换矩阵2. 转置矩阵3. 对称矩阵4. 向量空间4.1 向量空间4.2 子空间 1. 置换矩阵 定义&#xff1a; 用于行互换的矩阵P。 之前进行ALU分解时&#xff0c;可能存在该行主元为0&#xff0c;要进行行互换&#xff0c;即PALU 性质&#xff1…...

移动通信发展史

概念解释 第一代网络通信 1G 第二代网络通信 2G 第三代网络通信 3G 第四代网络通信 4G 4g网络有很高的速率和很低的延时——高到500M的上传和1G的下载 日常中的4G只是用到了4G技术 运营商 移动-从民企到国企 联通-南方教育口有人 电信 铁通&#xff1a;成立于 2000 年…...

Python MoviePy 视频处理全攻略:从入门到实战案例

第1章 环境安装与配置 # 案例1&#xff1a;安装MoviePy及FFmpeg !pip install moviepy # Windows安装FFmpeg&#xff1a;https://ffmpeg.org/download.html # Linux: sudo apt-get install ffmpeg# 验证安装 from moviepy.editor import * print("MoviePy版本:", __…...

uniapp webview嵌入外部h5网页后的消息通知

最近开发了个oa系统&#xff0c;pc端的表单使用form-create开发&#xff0c;form-create 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成组件。移动端使用uniapp开发&#xff0c;但是因为form-create移动端只支持vant&#xff0c;不支持uniapp。官…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...