Существует ли стандартный способ различать выходные данные, чтобы определить, где объем дискового пространства вырос больше всего? - PullRequest
2 голосов
/ 07 октября 2009

Я работаю с небольшой командой разработчиков, где у нас общая файловая система Unix для хранения довольно больших наборов данных. Эта файловая система имеет несколько запретительную квоту, поэтому примерно раз в месяц мы должны выяснять, куда ушло наше свободное пространство, и смотреть, что мы можем восстановить.

Очевидно, что мы используем изрядное количество, но это все еще утомительный процесс. У меня была мысль, что мы сможем сохранить результаты последних месяцев и сравнить их с этими месяцами, чтобы увидеть, где мы добились наибольшего роста. Полагаю, этот план не очень оригинальный.

Имея это в виду, я спрашиваю, существуют ли какие-либо сценарии, которые уже делают это.

Спасибо.

Ответы [ 4 ]

2 голосов
/ 23 апреля 2013

Я написал для этого программу под названием diff-du . Я не могу поверить, что никто не сделал этого! Во всяком случае, я считаю это полезным, и я надеюсь, что вы тоже.

1 голос
/ 17 октября 2009

Я действительно не знаю, существует ли стандартный способ, но он мне нужен когда-то, и я написал небольшой 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'), распечатать другой и сохранить информацию о текущем использовании.

Если тебе нравится, возьми.

Надеюсь, это поможет.

1 голос
/ 07 октября 2009

Что вы действительно хотите, так это потрясающий kdirstat .

0 голосов
/ 01 июня 2014

Для полноты я также нашел du-diff и не вижу упоминания в других ответах. Диффузия Эндрю (упомянутая в другом ответе) кажется более продвинутой, чем эта.

...