查找海量数据库(5 PB)的磁盘使用情况

查找海量数据库(5 PB)的磁盘使用情况

我正在寻找最有效的方法来确定 5 PB 磁盘上目录的磁盘空间使用情况。

我尝试分析的目录位置如下:

/disk/user1/task1/ /disk/user1/task2/ /disk/user2/task3/ /disk/user100/task1/ETC

我需要找到每个的大小任务并想知道最有效的命令是什么。

目前我已经尝试过ncdu -rx(这看起来需要几天时间)。

有人知道更好的方法吗?

我不是最擅长这些命令,所以如果能详细说明答案,我将不胜感激。

答案1

我会使用一个变体如何在命令行上获取目录的大小?-

du -sm /disk/user*/task* | sort -n | tee /tmp/disk-usage.rpt

它做了三件事:

  • -s收集所有用户目录下每个任务目录的磁盘使用量总和 ( ),以兆字节为单位 ( -m)
  • 按第一列对输出进行数字排序;这会将最大的任务目录放在底部;通过反转排序将它们放在顶部sort -rn
  • 将该输出的副本发送到您的屏幕和 /tmp/disk-usage.rpt 中的文件

保存的文件副本使您不必重新运行命令du(除非您愿意)来重新调查下一个最大的任务目录。

答案2

在这种情况下,缓慢的部分不是文件的大小,而是文件的数量。ncdudu、 和它们的同类需要stat()ing 每个文件,所以如果有很多文件,您将会遇到麻烦。

如果文件大小与文件数量相关(例如,如果每个文件的文件大小受到限制),您可能会幸运地计算它们并首先按目录分组以缩小列表范围。在基本情况下,这stat()根本不涉及发行,大部分只是readdir().

fstat()不幸的是,无论如何,至少在我的系统上,GNU find 等常见工具会为每个文件发出问题。您可以相当轻松地编写一个小型 C 程序来解决这个问题,只需使用opendirreaddir和计算返回的对象数量。

如果文件大小与文件数量无关,那么你就不走运了。考虑将来以允许 O(1) 或使用较小分区的类似方式计算磁盘大小的方式设置文件系统,或者使用 btrfs 子卷(也具有 O(1) 计算)之类的东西。

相关内容