Bash: como contar arquivos em subpastas eficientemente na unidade NFS remota?

1

Estou tentando agrupar uma operação que conta arquivos em uma determinada subpasta de uma unidade NFS remota.

O cliente NFS é o Ubuntu 16.04 LTS. Eu tenho muito poucas informações no servidor NFS remoto. É um NFS v3. É anonimamente montado em rw e sua autenticação é baseada em IP. A largura de banda do cliente é 100/10 e pode carregar cerca de 1,1 MB / s. O provedor anuncia seu armazenamento de backup como 1Gbit / 1Gbit garantido. O tamanho utilizável do volume é de < 4TB, a contagem esperada de arquivos é estimada em > 600000 unidades.

- Editar # 1 :

Os IOPs anunciados e anunciados do armazenamento são 2000, mas o teste do fs remoto resulta em 7-800iops.

As opções de montagem usadas no cliente são sugeridas pelo provedor:

rsize=8192,wsize=8192,timeo=14,intr

Para realizar a contagem, minha escolha foi este script:

#!/bin/bash
if [[ $# -eq 0 ]] ; then
   echo 'no folder supplied, use $0 /path/to/folder'
   exit 0
else
   COUNT=$(find $1 -type f|wc -l)
   echo $1 contains $COUNT files.
fi
exit 0

Eu tentei em minha casa, e foi obviamente muito rápido, saindo:

/home/user contains 12 files.

Quando tento obter essa estatística da unidade NFS remota, o script fica "para sempre".

- Editar # 2:

Eu tentei remover o |wc -l e adicionar >> $LOGFILE no final do find , mas parece que ele é interrompido aleatoriamente em um período de 2 a 24 horas e quando ele é interrompido após um longo período a lista está longe de estar completa.

Eu pensei que eu poderia dividir o achado em pedaços, a fim de evitar esse problema, talvez produzindo uma lista de todas as subpastas ...

for d in $FOLDERLIST;
do
   find $d -maxdepth 0 -type f|wc -l >> $TMPLOG
done

.. e, em seguida, some todos os números em $ TMPLOG, então talvez em pequenas operações o script não seja interrompido.

PERGUNTA: Estou usando a melhor forma de economizar recursos possíveis para realizar essa contagem? Talvez exista uma maneira mais barata do que find de obter arquivos para contar?

Eu estou pensando nisso talvez a abordagem errada para contar arquivos, desde que eu vi quanto tempo leva na unidade remota deve haver uma sobrecarga bastante ... Lembro-me de quando eu tinha alguma experiência em sistemas de arquivos remotos montados via curlftpfs. Sobrecarga enorme, enorme atraso.

O NFS deve ser muito melhor sobre isso, mas neste caso não parece!

    
por Marco 05.07.2017 / 22:28

1 resposta

1

Você pode tentar com rsync usando algo semelhante a:

rsync --stats -na <srcdir> /tmp/fakedir

As duas primeiras linhas da saída serão assim:

Number of files: 2000
Number of files transferred: 1900

O primeiro valor é a soma das entradas dirs + files, enquanto o o segundo é apenas o número de arquivos

    
por 08.07.2017 / 21:49