Tudo bem, vou dar um golpe nisso, porque acho que minha ideia faz sentido.
Você está lidando com vários caches neste caso, e é isso que está enganando você, eu acho.
A primeira coisa que o rsync faz é determinar quais arquivos ele precisa transferir. Geralmente, isso é feito gerando uma instância de rsync no lado remoto, lendo os metadados de cada um dos arquivos no diretório na origem, enquanto, ao mesmo tempo, lê os metadados dos arquivos locais e, em seguida, os dois conjuntos de metadados são comparados . Qualquer coisa mais nova (ou diferente, dependendo das opções de rsync) é transferida.
Você não tem um "lado remoto", de acordo com o rsync. Você está trabalhando "localmente", por isso iterará sobre os dois diretórios, a origem e o destino.
Isso é muito intensivo em disco, particularmente com uma tonelada de arquivos pequenos - quanto mais arquivos, mais operações de disco são discretas. Isso causa muita movimentação de disco, além de preencher o cache com os metadados desses arquivos.
Observe que isso acontece todo o caminho até a pilha. Sua máquina local armazena em cache os metadados do sistema de arquivos FUSE que você montou sobre o ssh E o diretório local. A máquina remota armazena em cache os metadados da montagem do disco local. E o host da VM em que sua máquina remota está sendo executada é quase certamente supercomprometido e oferece memória ampliada.
Eu suspeito que é muito provável que você esteja cruzando os limites quando congela, e tudo tem que acompanhar e decodificar ou trocar.
Eu ficaria muito interessado em ver se isso acontece quando você faz o rsync por ssh sem a montagem do disco.