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

8
du -csh /

O cálculo acima levará muito tempo para calcular. Existe uma maneira de ver o resultado menos preciso com menos sobrecarga?

ATUALIZAR

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

apache
fonte

Respostas:

9

Quanto a uma versão mais otimizada du, não conheço 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 nesta pasta e em sua subpasta, faça com que o aplicativo acompanhe.
  3. Se todos esses arquivos tiverem o mesmo tamanho e uma quantidade uniforme deles distribuídos entre diretórios, você poderá apenas contar o número de subdiretórios e multiplicá-lo por arquivo por diretório e, em seguida, tamanho por arquivo. Você pode fazer isso rapidamente usando apenas a contagem de links físicos para o diretório se você tiver apenas uma estrutura profunda de um diretório ( stat -c '%h') - 2.
  4. Torne todos esses arquivos pertencentes a um usuário específico e use o mecanismo de cota.
  5. Use uma partição dedicada e apenas use df. Um sistema de arquivos virtual (um arquivo em um sistema de arquivos montado via loopback) também pode fazer isso.

De tudo isso, as opções de cota e partição dedicada são provavelmente as mais fáceis e eficientes.

Kyle Brandt
fonte
6

O problema é que 'du' precisa enumerar todos os objetos na subárvore. Esta é 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, têm a capacidade de acompanhar tamanhos de diretório como esses nos metadados, o que torna essa operação muito mais rápida. Geralmente, se o seu sistema de arquivos suportar cotas de diretório de algum tipo, ele precisará acompanhar esses dados internamente para imposição, toda mudança de tamanho será replicada na árvore de diretórios para o NTFS (NTFS) ou para todos os diretórios (NSS). ) quando isso acontece, portanto, obter um tamanho de árvore de diretórios é muito rápido.

Infelizmente, não há como fazê-lo funcionar mais rápido, apenas soluções alternativas.

  • Execute 'du' no modo em lote e viva com resultados não ao vivo
  • Crie um novo sistema de arquivos e use 'df'
  • Crie um arquivo grande que mantenha seu diretório, monte-o em loopback, formate-o e use 'df' nesse novo ponto de montagem. Se precisar de mais espaço, desmonte a montagem de loopback, estenda o arquivo e remonte.
sysadmin1138
fonte
+1 Esta é uma resposta muito útil.
Richard Holloway
4
du -h --max-depth=1

Fornece os tamanhos no formato KB / MB / GB humano a partir do seu diretório de trabalho atual.

David Rickman
fonte
Eu acho que eles querem saber por que demora tanto para gerar e responder. Eu acho que o Windows também age da mesma maneira. Se você clicar com o botão direito do mouse em um diretório, precisará aguardar enquanto ele calcula o tamanho de cada subdiretório. É assim que o sistema de arquivos funciona.
The Janix Unix
Sim, a menos que eles executem um serviço de indexação ou algo assim.
21710 David Beckman
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 inotify. Possivelmente não com o bash (e inotify-tools), mas você provavelmente poderia usar python e pyinotify, por exemplo.

Dan Andreatta
fonte
2

Você pode achar gt5útil. Ele armazena as duinformações mais recentes e difere disso na próxima vez em que é executado. Ele exibe sua saída usando um navegador em modo de texto, como links.

Pausado até novo aviso.
fonte
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ê verá apenas o resumo de uso do disco na partição raiz e ele não tentará adicionar / proc, / sys, / dev e assim por diante ...

Jason
fonte
2

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

df -h /


fonte
1

Não. Você poderia periodicamente executar um canal para um arquivo de texto, em um trabalho agendado para execução durante a noite, para que você não tenha 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 também leva algum tempo.

xenny
fonte
0

df -h fará o truque

Antoine Benkemoun
fonte
O que eu quero saber é o tamanho total em um diretório específico.
Apache
0

df -kh /

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

O zelador do Unix
fonte
0

Possivelmente

df -h

texto extra, já que uma resposta curta e concisa não é suficiente para que a falha do servidor pense que sou humano.


fonte
Mas eu preciso saber o tamanho total em um diretório específico
apache
então use precisará usar du
The Unix Janitor
Mas no Windows, posso ver o espaço total usado sem sobrecarga, por que não no linux?
Apache
você está falando sério? ntfs não é ext3
The Janix Unix
1
@apache, oh, há sobrecarga, tente ver o tamanho de uma pasta de 20 GB com muitos arquivos de 10 a 20 MB. Há sobrecarga de def.
Zypher 11/04
0

Para encontrar o espaço exatamente nesse diretório, liste-o em vez de /. Para encontrar o espaço em diretórios fooe bar, liste os dois:

du -csh foo bar
mpez0
fonte
0

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

Mircea Vutcovici
fonte