Determinar o uso de espaço em disco e as contagens de arquivos para conjuntos de dados extremamente grandes (qualquer truque?)

7

Leitor de longa data, primeiro remetente:

Sou um administrador de Linux de nível júnior que está apoiando cada vez mais conjuntos / armazenamentos de dados muito grandes em sites locais & Armazenamento NFS. Os dados geralmente estão na forma de pasta maciça & árvores de arquivos com nomes arbitrários. Para dar um exemplo do desafio, estou trabalhando com mais de 20 partições TB contendo centenas de milhares de diretórios aninhados e dezenas de milhões de arquivos.

Como essas partições / exportações são recursos compartilhados, geralmente tenho que brincar de detetive quando eles começam a ficar sem espaço ou inodes, para determinar quais pastas são os maiores ofensores.

Eu estou descobrindo que 'du -s' é muito lento e manual para fazer o trabalho e estava esperando para ver que truques outras pessoas estão usando para determinar os maiores ou mais numerosos dirs contagem de arquivos estão entre as partições muito grandes.

O único sistema operacional com o qual estou preocupado em fazer essas buscas é o RHEL 5/6, então qualquer mix de ferramentas Linux padrão da CLI está bem.

Obrigado!

    
por user132791 20.08.2012 / 14:38

3 respostas

2

Sugiro dividir os dados em várias partições, se isso for viável. Não importa quais ferramentas você use, varrer esses arquivos vai levar tempo. Se estivesse em partições separadas, você poderia pelo menos reduzir o problema a uma única partição primeiro. Mas isso pode não ser uma opção para o que você está fazendo.

du é provavelmente a melhor ferramenta para o que você está procurando. Aqui está como eu uso:

Se a estrutura do seu diretório se parece com:

/mount/1/abc/123/456/789, 
/mount/1/def/stuff/morestuff/evenmorestuff
/mount/2/qwer/wer/erty

Eu corria:

du -s /mount/*/* | sort -n

Isso fornecerá o uso total de cada diretório de segundo nível, classificado por tamanho. Se levar muito tempo para ser executado, direcione-o para um arquivo e execute-o durante a noite.

Sua saída ficará assim:

10000 /mount/1/abc
20000 /mount/1/def
23452 /mount/2/qwer

Então você só espera que isso seja suficiente para ver onde estão os pontos problemáticos.

Se esse for um problema comum, você poderá executá-lo todas as noites quando seu sistema não estiver tão ocupado e salvar a saída em um arquivo. Então você imediatamente tem alguns dados recentes para observar quando você percebe o problema.

Uma outra opção que você pode analisar são as cotas - se esse for o armazenamento compartilhado e todas elas usarem contas de usuário diferentes, a configuração de cotas muito altas poderá impedir que processos descontrolados usem lotes de espaço de armazenamento.

    
por 20.08.2012 / 14:59
5

Eu faço essa recomendação frequentemente para aumentar as usuais df -i e du -skh soluções ...

Procure no utilitário ncdu . É uma ferramenta gráfica de utilização de disco baseada em ncurses. Você obterá uma saída semelhante à abaixo, com contagens de arquivos e um resumo dos tamanhos de diretório. Está disponível para o CentOS / RHEL.

Veja também: link

ncdu 1.7 ~ Use the arrow keys to navigate, press ? for help                                                         
--- /data ----------------------------------------------------------------------------------------------------------
  163.3GiB [##########] /docimages                                                                                  
   84.4GiB [#####     ] /data
   82.0GiB [#####     ] /sldata
   56.2GiB [###       ] /prt
   40.1GiB [##        ] /slisam
   30.8GiB [#         ] /isam
   18.3GiB [#         ] /mail
   10.2GiB [          ] /export
    3.9GiB [          ] /edi   
    1.7GiB [          ] /io     
    
por 20.08.2012 / 14:54
2

Eu uso este comando para verificar quais são os maiores arquivos em um diretório / no sistema. Mas não tenho certeza se isso é escalonável em um ambiente que você usa:

find / -type f -size +100000k -exec ls -lh {} \; 2>/dev/null| awk '{ print $8 " : " $5}'

se você quiser, pode deixar de fora a instrução awk (eu apenas a uso para limpar a saída). o comando find recursará pelos diretórios procurando arquivos maiores que a quantidade dada k. Então ele irá executar ls -lh no arquivo dando algo como:

-rw-r--r-- 1 username group 310K Feb 25  2011 filename

a instrução AWK limpa a saída na forma de:

filename : 310K

A coisa que eu acho mais útil sobre esse comando é o fato de você poder especificar o tamanho mínimo dos arquivos. Como dito antes, não tenho ideia de como isso é intensivo em CPU / tempo em seu ambiente.

    
por 20.08.2012 / 14:46