Um truque que eu uso para paralelizar coisas como essa é fazer isso em duas etapas - primeiro gerar uma lista de arquivos a serem transferidos, depois dividir essa lista e depois dividir o trabalho em várias máquinas.
Você pode fazer isso com o rsync com algo parecido com isto:
- primeiro execute rsync com --itemize-changes (isso apenas vasculha os sistemas de arquivos e gera uma lista de arquivos que seriam copiados etc)
- processa a saída --itemize-changes para extrair os nomes dos arquivos e dividir a lista em partes
- executa cada parte em um processo de rsync separado (ou em uma máquina separada) usando o rsync com --files-from = chunkXX
Isso ajuda maciçamente para sistemas de arquivos de rede (NFS, Lustre, etc) onde você normalmente não consegue obter desempenho suficiente de um único processo / máquina de rsync.
Ainda demora um tempo para percorrer os sistemas de arquivos para compará-los, mas a movimentação real dos dados pode ser muito rápida. Além disso, coisas como cpio e cp tendem a superar o rsync para movimentação de dados brutos.
Outra opção que eu uso com bastante frequência é fazer um simples find -type f /src
e depois dividir essa lista de arquivos e alimentá-la no cpio em vários hosts.
Adoraria saber uma maneira mais simples / rápida de fazer isso ...