Verificação de segurança mais rápida da árvore de arquivos no NFS

2

No momento, estou tendo um desempenho muito ruim usando o seguinte em uma pasta da rede NFS:

time find . | while read f; do test -L "$f" && f=$(readlink -m $f); grp="$(stat -c %G $f)"; perm="$(stat -c %A $f)"; done

Pergunta 1) Dentro do loop as permissões são verificadas usando as variáveis grp e perm. Existe uma maneira de diminuir a quantidade de E / S de disco para esses tipos de verificações na rede (por exemplo, ler todos os metadados de uma vez usando find)?

Pergunta 2) Parece que o NFS não está muito bem ajustado, a mesma operação em um link de rede similar via SSHFS leva apenas um terço do tempo. Todos os parâmetros são negociados automaticamente. Alguma sugestão?

    
por fungs 05.06.2012 / 15:32

2 respostas

1

Sua linha está realizando três chamadas para cada arquivo; um único stat + analisando a saída seria suficiente. Para começar, reprojetar seu script para chamar stat apenas uma vez com stat -c "%n %G %A" ... se precisar de ajuda com isso, envie-nos um comentário.

    
por 05.06.2012 / 15:52
1

A solução mais rápida que encontrei durante a última hora foi:

failed=$(find -L . -printf "%p %g %M\n" | awk '{ if ($2 != "XYZ"){ printf $1; exit 1 }; if ( substr( $3, 9, 1 ) != "-" ) { printf $1; exit 2 } }')
ret=$?
test ! $ret -eq 0 && echo "Error with file $failed"

que verifica o proprietário de um grupo e a permissão como exemplo. Esta versão, usando apenas a localização, mas não a estatística, e seguindo os links simbólicos, é pelo menos 100 vezes mais rápida.

    
por 05.06.2012 / 18:11