是否有一种标准的方法来区分输出以检测磁盘空间使用量增长最多的位置

时间:2009-10-07 19:14:12

标签: unix quotas du

我与一小组开发人员合作,我们共享一个unix文件系统来存储一些大型数据集。这个文件系统的配额有点过高,因此大约每个月我们必须弄清楚我们的可用空间在哪里,看看我们能够恢复什么。

显然我们使用的数量相当,但这仍然是一个繁琐的过程。我认为我们可以保持上个月的产量并将其与本月相比较,看看我们的增长最快的地方。我猜这个计划不是很原始。

考虑到这一点,我在问是否有任何已经完成此操作的脚本。

感谢。

4 个答案:

答案 0 :(得分:2)

我写了一个名为diff-du的程序。我简直不敢相信没有人这样做过!无论如何,我发现它很有用,我希望你也会这样。

答案 1 :(得分:1)

你真正想要的是真棒kdirstat

答案 2 :(得分:1)

我真的不知道是否有标准的方法,但是我之前需要它,我写了一个小的perl脚本来处理它。这是我的代码的一部分:

#!/usr/bin/perl

$FileName = "du-previous";
$Location = ">";
$Sizes;

# Current +++++++++++++++++++++++++++++
$Current = `du "$Location"`;
open my $CurrentFile, '<', \$Current;
while (<$CurrentFile>) {
    chomp;
    if (/^([0-9]+)[ \t]+(.*)$/) {
        $Sizes{$2} = $1;
    }
}
close($CurrentFile);

# Previous ++++++++++++++++++++++++++++
open(FILE, $FileName);
while (<FILE>) {
    chomp;
    if (/^([0-9]+)[ \t]+(.*)$/) {
        my $Size = $Sizes{$2};
        $Sizes{$2} = $Size - $1;
    }
}
close(FILE);

# Show result +++++++++++++++++++++++++
SHOW: while (($key, $value) = each(%Sizes)) {
    if ($value == 0) {
        next SHOW;
    }

    printf("%-10d %s\n", $value, $key);
}
close(FILE);

#Save Current +++++++++++++++++++++++++
open my $CurrentFile, '<', \$Current;
open(FILE, ">$FileName");
while (<$CurrentFile>) {
    chomp;
    print FILE $_."\n";
}
close($CurrentFile);
close(FILE);

代码不是非常容错的,所以你可以调整它。

基本上是代码,获取当前的磁盘使用信息,将大小与运行的最新时间进行比较(保存在'du-previous'中),打印不同的并保存当前的使用信息。

如果您喜欢,请接受它。

希望这有帮助。

答案 3 :(得分:0)

为了完整起见,我还发现了du-diff,并且在其他任何答案中都没有提到它。安德鲁的差异(在另一个答案中提到)似乎比这个更先进。