Forma rápida de saber o tamanho real do diretório no linux / bsd

6

Qual é o modo mais rápido de calcular o tamanho real do diretório? Eu de alguma forma me pego precisando muito disso.

Simplesmente fazendo:

# du -hs /dir

É muito lento. Existe algum serviço que eu possa executar, que periodicamente calcularia os tamanhos de diretório e os armazenaria em cache para referência posterior? (algo como um banco de dados de localização)

    
por Karolis T. 14.06.2009 / 11:51

3 respostas

6

Infelizmente eu não sei de nenhum, mas não deve ser muito difícil escrever um. Uma vez por noite, corra

# du -a / > /var/lib/filesizes.txt. 

Então você só precisa de um pequeno script para resumir isso. Algo como:

# perl -ne 'BEGIN { $total = 0 } if ($_ =~ m/(\d+)\s+\/var\/www\//) { $total+=$1;} END {print "$total\n";}' /var/lib/filesizes.txt

Se você quiser algo um pouco mais sincronizado, então você terá que começar a escrever algo que use inotify, para descobrir quando o sistema de arquivos muda e atualiza um banco de dados, que provavelmente seria algo como bdb.

    
por 14.06.2009 / 12:42
2

Eu costumava ter uma tarefa cron que redirecionava a saída de 'du -htX --max-depth = 3' ( ou algo similar, há alguns anos ) para um arquivo de texto. Então eu tinha munin criar um gráfico rrdtool usando o arquivo como entrada. Era hacky, mas me deu uma idéia geral de quanto espaço nossos backups estavam usando e as tendências de armazenamento para uma hierarquia de diretórios algo granular.

Se você tem um ambiente de trabalho na caixa em questão, FileLight é incrível. É bastante rápido e permite que você faça uma pesquisa detalhada em uma árvore de diretórios e, em seguida, verifique novamente a subárvore quando quiser obter uma visualização atualizada. Você pode muito bem fazer uma varredura completa uma vez por dia e depois deixar o programa aberto o dia todo sem fazer uma atualização.

    
por 14.06.2009 / 12:41
1

se isso for usar uma verificação de estilo nagios para um tamanho de diretórios, você pode fazer algo parecido com o seguinte

Você pode ter esta entrada cron:

* / 5 * * * * root du -s / caminho / para / algum / dir > /tmp/directory_usage.tmp & & / bin / mv /tmp/directory_usage.tmp / tmp / directory_usage

Então você pode simplesmente usar um script para obter o conteúdo de / tmp / directory_usage instantaneamente.

Obviamente, haverá uma condição de corrida se o diretório começar a ficar muito grande. (isto é, du -s começa a se aproximar da marca de 5 minutos).

Outra rota é usar find para construir uma lista de tamanhos de arquivo em um diretório e armazená-la em um arquivo simples ou em um banco de dados de arquivos (se você planeja fazer vários diretórios simultaneamente)

e uma última maneira é usar find para obter uma lista de arquivos periodicamente, o tempo modificado é mais recente que a última execução e essencialmente 'sincroniza' os tamanhos dos arquivos para uma estrutura db ... Obviamente, tudo isso depende do que você está tentando alcançar com a sua pergunta

    
por 14.06.2009 / 12:31