linux 中使用 du 排查文件数量过大的目录
这一段时间对服务器进行备份时发现有些目录的扫描速度非常慢,经调查这些目录大多都是某些 pipeline 在运行时产生的中间文件,虽然其存储占用并不大但由于文件小且多导致在处理这一部分目录时不必要地产生了过大的时间开销,遂在网上寻找定位这些目录的方法并觉得可以水篇博客,固有此文。
这篇文章将介绍如何使用 du 识别出那些包含文件数量过大的目录。
基础介绍
每个文件/目录在 Linux 中都有一个 Inode(Index Node),文件系统创建时有固定的 Inode 总数,用尽会导致无法新建文件,而过大的 Inode 数量也会导致一些困扰(在我的应用场景中即部分命令的运行时间开销大幅增加),可以使用 df -ih
查看当前各个文件系统的的 Inode 情况:
1 | df -ih |
du
(Disk Usage)是 Linux 中用于分析文件和目录占用磁盘空间的核心工具。虽然该工具最常被用来分析存储占用情况,但是其也具有 Inode 统计的功能。
文件数量统计
使用 du 统计包含文件数量过大目录的方法:
1 | du --inodes --threshold=100000 [path] |
参数介绍:
--inodes
:列出 Inode 使用情况而非存储使用情况。--threshold
:打印的最低阈值,该情景下即至少 10w 个 Inode 才打印。[path]
:扫描的路径。
需注意,每个目录(或者说文件夹)本身就占用 1 个 Inode。根据自身需求,你可以考虑使用以下参数进行灵活调整:
-S
/--separate-dirs
:指定后,对每个目录的统计将不包含其子目录信息,即子目录的值不会被累加到其父目录中。-d
/--max-depth
:最大的扫描深度,例如-d 6
表示只统计到 6 级子目录,深度更高的子目录则不会被打印,但其包含的 Inode 依然会被累加父目录中(不使用-S
参数的情况下)。
参考资料
Stack Exchange askubuntu "Find directories with lots of files in"
https://askubuntu.com/questions/316027/find-directories-with-lots-of-files-in
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Juse's Blog!
评论