Como ver o uso do disco com menos sobrecarga no bash?

8
du -csh /

O que precede demora muito tempo para calcular, existe uma maneira de ver o resultado menos preciso com menos sobrecarga?

UPDATE

O que eu quero saber é o tamanho total em um diretório específico.

    
por apache 11.04.2010 / 18:00

13 respostas

9

No que diz respeito a uma versão mais otimizada du , não estou ciente de uma. As coisas que vêm à mente são:

  1. Armazene esses arquivos em um disco RAM ou algo parecido.
  2. Se apenas um aplicativo gravar nessa pasta e em sua subpasta, faça o aplicativo acompanhar.
  3. Se todos esses arquivos forem aproximadamente do mesmo tamanho e distribuídos de maneira uniforme entre os diretórios, você poderá contar apenas o número de subdiretórios e multiplicá-los por arquivo por diretório e depois por tamanho. Você pode fazer isso rapidamente usando apenas a contagem de link físico para o diretório, se você tiver apenas uma estrutura profunda de diretório ( stat -c '%h' ) - 2.
  4. Crie todos esses arquivos pertencentes a um usuário específico e use o mecanismo de cota.
  5. Use uma partição dedicada e use apenas df. Um sistema de arquivos virtual (um arquivo em um sistema de arquivos que é montado via loopback) também poderia fazer isso.

De todas essas opções, a cota e a partição dedicada são provavelmente as mais fáceis e eficientes.

    
por 11.04.2010 / 20:47
6

O problema é que 'du' tem que enumerar todos os objetos na sub-árvore. Essa é uma operação intensiva de metadados e leva um tempo para a maioria dos sistemas de arquivos Linux. Alguns sistemas de arquivos, NTFS e NSS da Novell, lembram o tamanho dos diretórios como este nos metadados , o que torna essa operação muito mais rápida. Geralmente, se o seu sistema de arquivos suportar algum tipo de diretório, ele deve controlar esses dados internamente para aplicação, cada alteração de tamanho é replicada na árvore de diretórios para o ponto de cota (NTFS) ou em todos os diretórios (NSS). ) quando isso acontece, obter um tamanho de árvore de diretórios é muito rápido.

Infelizmente, não há como fazer uma corrida mais rápida, apenas para contornar o problema.

  • Execute "du" no modo em lote e viva com resultados que não sejam ao vivo
  • Crie um novo sistema de arquivos e use 'df' em vez
  • Crie um arquivo grande que mantenha seu diretório, monte-o em loopback, formate-o e use 'df' em vez desse novo ponto de montagem. Se você precisar de mais espaço, desmonte a montagem de loopback, estenda o arquivo e remonte.
por 12.04.2010 / 20:28
4
du -h --max-depth=1

Fornece os tamanhos em formato humano KB / MB / GB do diretório de trabalho atual.

    
por 11.04.2010 / 19:56
3

Com as ferramentas padrão, você precisa obter o tamanho de cada arquivo no diretório sempre que quiser saber o tamanho total. Uma maneira possivelmente mais eficiente de fazer isso seria ter um "monitor de tamanho de diretório", que monitora o tamanho atual do diretório. Não existe tal coisa (que eu saiba), mas você poderia implementar uma com inotify . Possivelmente não com bash (e inotify-tools ), mas você provavelmente poderia usar python e pyinotify, por exemplo.

    
por 12.04.2010 / 10:59
2

Você pode achar gt5 útil. Ele armazena as informações mais recentes de du e faz uma comparação com isso na próxima vez que for executado. Ele exibe sua saída usando um navegador em modo de texto, como links .

    
por 11.04.2010 / 22:21
2

Além disso, considere a opção -x em du - "um sistema de arquivos" se você estiver fazendo

du -xh / --max-depth=1 

Você só verá o resumo do uso do disco na sua partição raiz e não tentará adicionar / proc, / sys, / dev e assim por diante ...

    
por 12.04.2010 / 18:58
1

Não. Você poderia periodicamente fazer um du pipe em um arquivo de texto, em um cron job definido para ser executado durante a noite, então você não tem dados atuais disponíveis imediatamente?

Observe que medir o espaço em disco usado por uma pasta que contém um grande número de arquivos no Windows leva algum tempo.

    
por 11.04.2010 / 20:05
1

se você quiser apenas o uso de disco para o sistema de arquivos raiz, então

df -h /

    
por 12.04.2010 / 20:35
0

df -h fará o truque

    
por 11.04.2010 / 18:09
0

df -kh /

isso mostrará a quantidade de espaço em disco usada e disponível.

    
por 11.04.2010 / 18:09
0

Talvez

df -h

texto extra, já que uma resposta curta e concisa não é suficiente para o serverfault pensar que sou humano.

    
por 11.04.2010 / 18:09
0

Para encontrar o espaço apenas nesse diretório, liste-o em vez de / . Para encontrar o espaço nos diretórios foo e bar , liste ambos:

du -csh foo bar
    
por 11.04.2010 / 19:02
0

Você deve usar dnotify para calcular o uso do disco se o sistema de arquivos não for alterado com freqüência.

    
por 12.04.2010 / 19:31