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

服务器磁盘高占用排查

本博客用来记录在服务器上发现 /home 存储空间异常占用后,如何排查每个用户的空间使用情况,以及如何快速找出当前目录(包含隐藏文件夹)下最大的前 10 个文件。


服务器 /home 目录高占用,如何排查?

最近在一台多用户服务器上发现 /home 目录几乎被占满,一查竟然使用了 915G!由于我们已经把大部分大型数据集额外存放到其他挂载点,按理说 /home 目录不应该有如此大的占用。服务器上有多个用户共同使用,因此需要先统计各个用户的主目录所占用的空间,确认究竟是谁的文件占据了硬盘。

1. 查看各个用户在 /home 目录下占用的空间

如果每位用户在 /home 下都有各自的独立目录(如 /home/alice, /home/bob, 等),可以使用 du -sh 命令来查看每个子目录的总大小。示例命令如下:

需要使用管理员root权限

du -sh /home/*
  • du:显示文件或目录占用的磁盘空间。
  • -s:只显示汇总(summary)而不是详细列出所有子文件。
  • -h:以人类可读的方式显示,如 K、M、G 等。

image-20250207184004995

执行后,会得到类似下面的输出:

47G     /home/AAA
579G    /home/BBB
19G     /home/CCC
...

一眼就能看到 /home/BBB 目录下使用了 579G,这显然非常异常,也就找到了我们要重点排查的用户。

注意:如果 /home 下的用户目录并不是直接 /home/用户名,而是有其他命名方式或层级,需要根据实际目录结构修改 du 命令的路径和匹配方式。

2. 在大目录下进一步排查:找出最大的文件与最大的文件夹

2.1 找到当前目录(含子目录)下「最大的 10 个文件」

进入要排查的目录,比如 /home/zhanyong

cd /home/zhanyong
find . -type f -exec du -h {} + 2>/dev/null | sort -hr | head -n 10
  • find . -type f:递归查找当前目录及子目录的所有普通文件,包括隐藏文件、隐藏文件夹中的文件。
  • -exec du -h {} +:对找到的文件执行 du -h 获取大小并以可读形式显示。
  • 2>/dev/null:忽略无权限访问等报错信息。
  • sort -hr:将结果按照数值降序(-r)排列,并以人类可读形式(-h)进行比较。
  • head -n 10:只列出最大的 10 个文件。

输出示例:

root@532lab:/home/zhanyong# find . -type f -exec du -h {} + 2>/dev/null | sort -hr | head -n 10
12G     ./.local/share/Trash/files/split_radioML2018_tools/data/Constellation_k2000_dim64.npy
5.9G    ./.local/share/Trash/files/split_radioML2018_tools/data/Constellation_k2000_dim32.npy
3.3G    ./.local/share/Trash/files/split_radioML2018_tools/data/Mutil_SNR_6_k1000_dev.npy
2.2G    ./.local/share/Trash/files/split_radioML2018_tools/data/Mutil_SNR_6_k2000.npy
2.2G    ./.local/share/Trash/files/split_radioML2018_tools/data/Mutil_SNR_12_k2000.npy
1.5G    ./.local/share/Trash/files/split_radioML2018_tools/data/Constellation_k1000_dim64_64_4.npy
1.2G    ./.local/share/Trash/files/split_radioML2018_tools/data/Constellation_k200_dim64_64_16.npy
1.2G    ./anaconda3/pkgs/pytorch-1.11.0-py3.8_cuda11.3_cudnn8.2.0_0/lib/python3.8/site-packages/torch/lib/libtorch_cuda_cpp.so
1.2G    ./anaconda3/envs/tensorflow_zhanyong/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so
1.1G    ./.local/share/Trash/files/split_radioML2018_tools/data/Mutil_SNR_6_k1000.npy

借此,你可以快速定位哪些文件最占空间,从而决定是否清理、迁移或做其他处理。


2.2 找出当前目录下「最大的 10 个文件夹」(含隐藏文件夹)

如果想按目录来排查,看哪些文件夹才是“元凶”,可以在同一目录下使用:

find . -mindepth 1 -type d -exec du -sh {} + 2>/dev/null | sort -hr | head -n 10
  • -mindepth 1:避免把 . 当前目录本身也列进去(如果你不介意,可去掉该选项)。
  • -type d:只关注目录(包括隐藏目录)。
  • -exec du -sh {} +:对每个目录做汇总,-s 参数会递归统计子目录的大小总和,并以可读形式显示。
  • 2>/dev/null:同样忽略无权限的报错。
  • sort -hr | head -n 10:按照大小降序列出前 10 个“最重”的目录。

这样就能快速看到哪几个目录是最大的,例如:

root@532lab:/home/zhanyong# find . -mindepth 1 -type d -exec du -sh {} + 2>/dev/null | sort -hr | head -n 10
43G     ./.local
37G     ./anaconda3
24G     ./anaconda3/envs
18G     ./anaconda3/pkgs
11G     ./anaconda3/envs/pytorch_zhanyong
8.2G    ./anaconda3/envs/meta-tts/lib/python3.8
7.4G    ./anaconda3/envs/pytorch_zhanyong/lib/python3.8
4.7G    ./anaconda3/envs/tensorflow_zhanyong
4.0G    ./anaconda3/envs/tensorflow_zhanyong/lib
3.9G    ./.cache
root@532lab:/home/zhanyong# 

然后就可以进一步深入清理、删减或迁移这些大体量的目录。


2.3 如果只想查看当前目录单层(不递归)的目录大小

有时我们只想看第一层子目录的大小,而不必深入子目录统计,可以使用:

du -h --max-depth=1 2>/dev/null | sort -hr | head -n 10
  • --max-depth=1:只统计第一层目录的空间占用(包含隐藏目录,但要注意 du 默认不会匹配 . 开头的名称;想要一并显示隐藏目录,可以改用 du -h --max-depth=1 .* * 等,但可能出现“找不到文件”的警告,可以用 2>/dev/null 过滤)。
  • sort -hrhead -n 10:依然是从大到小只显示前 10 行。
root@532lab:/home/zhanyong# du -h --max-depth=1 2>/dev/null | sort -hr | head -n 10
87G     .
43G     ./.local
37G     ./anaconda3
3.9G    ./.cache
1.1G    ./.nv
857M    ./RadioML
168M    ./node-v20.17.0-linux-x64
36M     ./.linuxmint
15M     ./.ipython
6.8M    ./.deepface


3. 小结

  1. 定位大用户目录

    • /home 目录下使用 du -sh /home/* 来确定哪个用户占用最多空间。
  2. 深入到用户目录排查

    • 找最大文件

      find . -type f -exec du -h {} + 2>/dev/null | sort -hr | head -n 10
      
    • 找最大文件夹

      find . -mindepth 1 -type d -exec du -sh {} + 2>/dev/null | sort -hr | head -n 10
      
  3. 针对性清理

    • 根据实际业务需求,清理无用的大文件或目录,以腾出空间。

通过以上方法,就能快速找到 /home 中最大的“空间吞噬者”,避免磁盘被塞满导致系统或科研任务无法正常进行。尤其在科研或开发环境中,定期查看和清理不需要的历史文件是维护服务器健康的好习惯。希望这篇记录能帮你高效管理和优化磁盘空间!


http://www.kler.cn/a/537080.html

相关文章:

  • .Net Core笔记知识点(跨域、缓存)
  • Mybatis篇
  • 【远程控制】安装虚拟显示器
  • 《Node.js Express 框架》
  • Nginx进阶篇 - nginx多进程架构详解
  • ASP.NET Core中间件Markdown转换器
  • Qt 数据库SQLite 使用【01】基本功能
  • Lua中文语言编程源码-第十一节,其它小改动汉化过程
  • Android studio 创建aar包给Unity使用
  • 使用 Axios ——个人信息修改
  • ES6 Set 数据结构用法总结
  • Flutter List 的 every 如果回调函数抛出异常 应该如何处理
  • 尚硅谷 vue3+TS 课程笔记
  • Flutter Isolate解决耗时任务导致卡死
  • 工业以太网profinet网关:解锁生产效率提升的“超级钥匙”
  • 【DeepSeek-R1训练笔记】随手记录一些训练log
  • 【leetcode100】岛屿的最大面积
  • Rust语言进阶之标准输入: stdin用法实例(一百零五)
  • CRM系统中的数据分析和报表功能如何帮助企业?
  • 58页PPT学习华为面向业务价值的数据治理实践
  • windows版的docker如何使用宿主机的GPU
  • nas-群晖docker查询注册表失败解决办法(平替:使用SSH命令拉取ddns-go)
  • opentelemetry-collector 配置elasticsearch
  • 设计高效的测试用例:从需求到验证
  • 协议桥梁~Profinet与Ethernet IP的智慧连接完美应用在汽车制造业
  • 【DeepSeek:国产大模型的崛起与ChatGPT的全面对比】