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

【Linux】磁盘空间莫名消失,找不到具体原因的思路

磁盘空间莫名消失,找不到具体原因的思路

先说下常见的几种原因:

1、删除的文件未释放空间

2、日志或过期文件未及时清理

3、inode导致

4、隐藏文件夹或者目录

6、磁盘碎片

最后一种单独介绍。

环境:情况是根分区(/)的总容量为44GB,已使用了9.9GB,但实际文件内容查询显示只有7GB的文件,剩余的2GB似乎没有直接可见的文件。这种情况可能是由于以下几种原因导致的:

可能原因及排查方法:

1. 删除文件未释放空间(缓存和懒加载):
  • 在Linux系统中,当你删除一个文件时,系统并不会立刻释放磁盘空间,尤其是在文件被某些进程占用的情况下。即使文件已经被删除,它的空间也不会立即释放,直到该文件不再被任何进程使用。

  • 解决办法:可以使用lsof命令查看哪些文件被进程占用。若发现已删除的文件仍被某个进程占用,可以通过重启进程或重启系统来释放空间。

    lsof | grep deleted
    
  • 该命令会列出所有已删除但仍被进程占用的文件。

    kill -9  <上述命令找到的pid> 
    # 上述命令会杀掉进程,生产慎重操作!
    
2. 日志文件或临时文件未清理:
  • 系统中有很多临时文件或者日志文件,这些文件可能不会出现在常规目录(如 /home/var)下,但它们依然占用空间。例如,/var/log 下的日志文件可能非常大。

  • 解决办法:检查 /var/log 等目录是否有过大的日志文件。你可以使用 du -sh 来查找占用空间最多的目录:

    du -sh /* | sort -h
    
3. 文件系统占用空间:
  • 文件系统可能被其他非文件数据(如 inode 或文件系统缓存)占用了空间。即使文件已经删除,文件系统中仍可能存在未释放的空间。

  • 解决办法:可以运行 dfdu 命令检查文件系统和磁盘使用情况:

    df -h  # 查看分区使用情况
    df -ih # 查看inode占用情况
    du -sh /  # 查看根分区的空间占用情况
    rm -f /tmp/*  # 删除临时文件,将inode释放
    
4. 隐藏文件或目录:
  • 在Linux系统中,所有以“.”开头的文件和目录是隐藏的。你可能未能查找这些隐藏的文件或目录。

  • 解决办法:使用 duls 命令查看隐藏文件:

    ls -la # 使用ls -la 命令可以看到全部文件,包括隐藏文件
    du -sh .cache   # 查看隐藏文件
    
5. 磁盘碎片:
  • 在某些情况下,尤其是在较老的文件系统中,磁盘碎片可能会导致空间不一致的问题,尽管现代的文件系统(如 ext4、XFS)通常能够有效管理碎片。

    检查并优化文件系统碎片:

    • 对于 ext4 文件系统,你可以尝试使用 e4defrag 工具对文件系统进行碎片整理:

      sudo e4defrag /dev/sda1   ## 这里需要注意,/dev/sda1 分区为ext4
      
    • 这个过程可能需要一些时间,尤其是当文件系统中存在大量小文件时。整理碎片后,执行 df -h 查看空间是否得到释放。

6. 磁盘空间占用:
  • 这个问题之前没有考虑,后续发现确实可能存在这个问题

做一个实验

准备:1个虚拟机,2块盘,一个正常使用,另一个给20G,测试用

1、创建一个/data路径

mkdir /data  # 这里路径名称无所谓,但必须要在根分区

2、在/data下面,手动dd一个文件,比较大的

dd if=/dev/zero of=/data/test.dmp count=1 bs=5G

3、执行df -h 查看分区大小
在这里插入图片描述

4、格式化第二个盘

mkfs.ext4 /dev/sdb  ## 不需要分区,直接格式化就行

5、挂载到/data路径下

mount /dev/sdb /data

6、再次查看分区大小
在这里插入图片描述

发现一个问题,之前生成的2G的测试文件,并没有在新分区挂载后显示。应该是被覆盖了,但/的大小却没有释放。

7、卸载/dev/sdb在看后,test.dmp文件还在。
在这里插入图片描述

总结,如果磁盘空间占用太多,可能用这个方法看看是否是挂载新盘之前,有数据落在了之前的文件夹没有及时清理

http://www.lryc.cn/news/506816.html

相关文章:

  • 智能体实战(需求分析助手)一、需求概述及迭代规划
  • idea | maven项目标红解决方案 | 强制刷新所有依赖
  • *【每日一题 基础题】 [蓝桥杯 2023 省 B] 飞机降落
  • 在Windows本地用网页查看编辑服务器上的 jupyter notebook
  • OpenCV圆形标定板检测算法findGrid原理详解
  • 自动图像标注可体验
  • 武汉市电子信息与通信工程职称公示了
  • Ansible基本用法
  • MFC 应用程序语言切换
  • Swift 的动态性
  • 用.Net Core框架创建一个Web API接口服务器
  • lua dofile 传参数
  • HTML 有效 DOCTYPES
  • 岁末回望,追梦远方
  • 通过阿里云 Milvus 和 LangChain 快速构建 LLM 问答系统
  • 语音识别失败 chrome下获取浏览器录音功能,因为安全性问题,需要在localhost或127.0.0.1或https下才能获取权限
  • 全域数据集成平台ETL
  • 海外储能电站双向计量表功能参数介绍
  • javase-15、正则表达式
  • 【SpringSecurity】SpringSecurity+JWT实现登录
  • jmeter连接mysql
  • 图书馆管理系统(三)基于jquery、ajax
  • Nginx Location 配置块全解析与示例
  • javalock(八)ReentrantReadWriteLock
  • 反射和设计模式
  • 双指针---和为s的两个数字
  • LLaMA-Factory 单卡3080*2 deepspeed zero3 微调Qwen2.5-7B-Instruct
  • 智慧农业云平台与水肥一体化:道品科技引领农业现代化新潮流
  • 241207_MindNLP中的大模型微调
  • MongoDB、Mongoose使用教程