Considerando que o rsync
que você está usando é um software de código aberto, é muito fácil ter acesso a relacionado código-fonte .
Depois de baixar o principal .tar.gz
e aplicar o patch do Ubuntu (rsync_3.1.0-2ubuntu0.4.diff.gz), você acaba com exatamente o código subjacente ao rsync que você está usando. Algo parecido com isto:
$ mkdir rsync
$ cd rsync/
$ wget http://archive.ubuntu.com/ubuntu/pool/main/r/rsync/rsync_3.1.0.orig.tar.gz
$ wget http://archive.ubuntu.com/ubuntu/pool/main/r/rsync/rsync_3.1.0-2ubuntu0.4.diff.gz
$ gzip -d rsync_3.1.0-2ubuntu0.4.diff.gz
$ tar zxvf rsync_3.1.0.orig.tar.gz
$ cd rsync-3.1.0/
$ patch -p1 < ../rsync_3.1.0-2ubuntu0.4.diff
Agora, um simples grep
pode nos informar rapidamente o contexto de sua mensagem de erro:
$ grep -r 'expand file_list pointer array to'
flist.c: rprintf(FCLIENT, "[%s] expand file_list pointer array to %s bytes, did%s move\n",
Você tem sorte, pois sua mensagem de erro é usada em um único fragmento de um único arquivo. Nameli: flist.c .
Vamos dar uma olhada:
Érelativamentefáciladivinharquearotinacontendoamensagemdeerro(linhas325,326,327,328)édenominadaflist_expand
esoacomoalgonecessárioparagarantirquetodaalistadearquivos(pararsync)possasermantidaumaestruturanamemóriaadequadamentedimensionada(tambémconhecidacomo:quantomaisarquivosvocêprecisarsync,maismemóriaénecessáriaparalidarcomcálculosrsync,ecomotallistanãoéconhecida"antecipadamente", ela precisa ser computada dinamicamente, alocando pedaços adequados de memória para uma "lista" [mais ou menos]).
Então, eu apostaria que o seu problema depende NÃO do tamanho dos dados que você está rsync-ing, mas do número de arquivos . Eu tentaria dividir seu rsync em vários sub-rsync, concentrando-se em subpastas internas.
Na verdade, seria bom investigar melhor:
- linha 328:
(new_ptr == flist->files) ? " not" : "");
- linha 334:
out_of_memory("flist_expand");
mas isso vai muito além do meu objetivo inicial :-)
Enfim, eu apostaria que checando seus logs você encontraria alguma mensagem "out of memory" ....: -)
HTH!