确定超大数据集的磁盘空间使用情况和文件数(有什么技巧吗?)

use*_*791 7 hard-drive nfs disk-space-utilization

长期读者,第一次提问:

我是一名初级 Linux 管理员,他越来越多地支持本地和 NFS 存储上的超大数据集/存储。数据通常以任意名称的海量文件夹和文件树的形式存在。举一个挑战的例子,我正在处理 20 多个 TB 分区,其中包含数十万个嵌套目录和数千万个文件。

由于这些分区/导出是共享资源,当它们开始耗尽空间或 inode 时,我通常必须扮演侦探,以确定哪些文件夹是最大的违规者。

我发现 'du -s' 太慢而且手动完成这项工作,并希望看到其他人使用什么技巧来确定最大或最多的文件计数目录在非常大的分区中。

我唯一关注的操作系统是 RHEL 5/6,因此标准 CLI Linux 工具的任何组合都可以。

谢谢!

eww*_*ite 5

我经常提出这个建议来增加通常的df -idu -skh解决方案......

查看ncdu 实用程序。它是一个基于 ncurses 的磁盘利用率绘图工具。您将获得类似于下面的输出,其中包含文件计数和目录大小摘要。它适用于 CentOS/RHEL。

另请参阅:https : //serverfault.com/questions/412651/console-utility-to-know-how-disk-space-is-distributed/412655#412655

ncdu 1.7 ~ Use the arrow keys to navigate, press ? for help                                                         
--- /data ----------------------------------------------------------------------------------------------------------
  163.3GiB [##########] /docimages                                                                                  
   84.4GiB [#####     ] /data
   82.0GiB [#####     ] /sldata
   56.2GiB [###       ] /prt
   40.1GiB [##        ] /slisam
   30.8GiB [#         ] /isam
   18.3GiB [#         ] /mail
   10.2GiB [          ] /export
    3.9GiB [          ] /edi   
    1.7GiB [          ] /io     
Run Code Online (Sandbox Code Playgroud)


Gra*_*ant 2

如果可行的话,我建议将数据分成多个分区。无论您使用什么工具,扫描这么多文件都需要时间。如果它位于单独的分区上,您至少可以首先将问题缩小到单个分区。但这可能不是您正在做的事情的选择。

du 可能是满足您需求的最佳工具。我的使用方法如下:

如果您的目录结构如下所示:

/mount/1/abc/123/456/789, 
/mount/1/def/stuff/morestuff/evenmorestuff
/mount/2/qwer/wer/erty
Run Code Online (Sandbox Code Playgroud)

我会跑:

du -s /mount/*/* | sort -n
Run Code Online (Sandbox Code Playgroud)

这将为您提供每个二级目录的总使用量,按大小排序。如果运行时间较长,则将其定向到一个文件并运行过夜。

你的输出将如下所示:

10000 /mount/1/abc
20000 /mount/1/def
23452 /mount/2/qwer
Run Code Online (Sandbox Code Playgroud)

然后你只希望能够将其分解得足够多,以找出问题所在。

如果这是一个常见问题,您可以让它在每晚系统不那么繁忙的时候运行该命令,并将输出保存到文件中。然后,当您发现问题时,您可以立即查看一些最新数据。

您可能希望查看的另一个选项是配额 - 如果这是共享存储并且它们都使用不同的用户帐户,则设置非常高的配额可能有助于防止失控进程使用大量存储空间。