Listar propriedade do espaço no arquivo por usuário

3

Eu tenho um sistema de arquivos NFS de 4 TB que está sendo servido a partir de um arquivador NetApp. As ferramentas de cota da NetApp me dizem que um determinado usuário está usando uma quantidade X de espaço em disco nesse qtree, mas não está no diretório "deles", pode estar em qualquer lugar do sistema de arquivos. Então eu tenho que encontrá-lo para que possa ser justificado ou limpo.

Estou executando um comando find -user e ele está em execução há três dias, e isso é apenas a listagem de arquivos - eu estava planejando voltar e fazer um du em cada arquivo para obter o tamanho dos arquivos. / p>

Existe alguma ferramenta que pode fazer tudo isso para mim de uma maneira melhor? Ou uma abordagem que me dará a informação que eu quero de uma maneira mais fácil? Eu estou esperando por algo como SequoiaView no Windows, exceto com a capacidade de apenas me mostrar arquivos pertencentes a um único usuário.

Atualização: este é o comando que estou executando:

find * -name .snapshot -prune -o -type f -user $USER -exec ls -l {} \; > /tmp/output.txt

A intenção é escrever um one-liner awk ou perl para percorrer esses dados brutos e descobrir onde as coisas realmente estão.

    
por David Mackintosh 17.09.2014 / 17:11

1 resposta

3

A menos que haja uma maneira específica da NetApp para isso, uma cota é geralmente apenas alguns números: quantidade usada, quantidade permitida. É rastreado de uma maneira trivial: Se o usuário excluir um arquivo de 1 MB, subtraia 1 MB do valor usado. Se o usuário adicionar 1 MB a um arquivo, adicione 1 MB à quantidade usada. A cota em si não sabe (ou se importa) quais arquivos estão usando esse espaço.

Esse comando de localização que você está usando é sub-ótimo, no entanto. Primeiro, para localizar o proprietário, find precisa executar stat no arquivo. Então find já tem o tamanho. Em seguida, exec ls {} \; é bastante ineficiente. Você deve usar pelo menos -exec ls {} + para reduzir o número de ls de chamadas. Ainda melhor, porém (se o seu achado tiver isso, não tiver certeza do seu padrão) é -printf . Isso evita totalmente o ls e permite que você use o stat find já feito:

find … -printf '%s %p
find … -printf '%s %p%pre%' # that gives null-delimited, you can use \n instead
                         # for newline-delimited
' # that gives null-delimited, you can use \n instead # for newline-delimited

Existem muitos outros sinalizadores para -printf , verifique a página de localização.

    
por 17.09.2014 / 17:51