Claro que o ssh é o melhor.
O NFS usa um protocolo de rede complexo com várias chamadas de procedimento remoto e tempos de espera de sincronização de dados. No caso do ssh, isso não se aplica.
Além disso, existem muitos bloqueios. A exclusão de arquivos no nfs funciona desta maneira:
- seu comando
rm
fornece ounlink()
syscall
O driver - nfs o converte em uma solicitação sunrpc, envia para o servidor nfs
- O servidor nfs converte essa solicitação sunrpc de volta para uma
unlink()
call - executa essa chamada
unlink()
no lado remoto - após o sucesso, devolve a mensagem de resposta rpc equivalente a "tudo bem, é feito" para o cliente
- o driver do kernel do lado do cliente converte isso de volta para o código de saída 0 da chamada
unlink()
do seu originalrm
-
rm
itera para o próximo arquivo, goto 1
Agora, o importante é: entre 2-7, rm
tem que esperar. Ele poderia enviar a próxima unlink()
de forma assíncrona, mas é uma ferramenta de thread único, não orientada a eventos. Mesmo que pudesse, ainda exigiria flags de montagem nfs complicados. Até que não obtenha o resultado, aguarda.
Nfs - e qualquer sistema de arquivos de rede - é sempre muito mais lento.
Em muitos casos, você pode fazer exclusões recursivas de velocidade quase infinita com um truque:
- Primeiro mova o diretório para um nome diferente (
mv -vf oldfilms oldfilms-
) - Excluir em segundo plano (
rm -rf oldfilms- &
)
De muitos (mas não todos) aspectos, essa remoção de diretório parecerá que aconteceu em praticamente zero tempo.
Extensão: Como o @ el.pascado menciona em seu excelente comentário, na verdade 2-7 tem que rodar 3x para qualquer arquivo:
- para determinar se é um arquivo ou um diretório (com
lstat()
syscall), - faça de acordo. Nos casos de arquivos comuns,
unlink()
, no caso de diretórios,opendir()
, excluindo todos os arquivos / diretórios nele recursivamente, entãoclosedir()
, finalmentermdir()
. - finalmente, repita para a próxima entrada de diretório com uma chamada
readdir()
.
Isso requer 3 comandos nfs RPC para arquivos, e outros 3 para diretórios.