Rsync sobre o limite de profundidade da pasta ssh?

1

Estou trabalhando em uma migração de servidor e me deparo com o seguinte problema:

Estou executando o rsync para migrar todos os dados, mas, por algum motivo, há um limite de profundidade de pasta ... Isso é feito através do comando rsync over ssh:

rsync -raz --verbose --update --delete --exclude-from 'rsync-exclude.txt' /home 192.168.70.50:/

70.50 é o novo servidor, e eu estou executando o comando no servidor antigo. As estruturas de pastas são extremamente profundas, com até 20 pastas de profundidade.

Assim, a maioria dos arquivos e pastas são copiados, mas todos a partir da profundidade da pasta 10 e superior não são. Se eu especificar pastas mais profundas

rsync -raz --verbose --update --delete --exclude-from 'rsync-exclude.txt'/home/user/blablabla/domain/web to 192.168.70.50:/home/user/blablabla/domain

começa a copiar as pastas restantes recursivamente ...

Alguém que possa ter uma solução para isso?

    
por Rein Van 't Veer 14.06.2015 / 01:10

1 resposta

1

O rsync não tem limite para a profundidade dos subdiretórios que ele irá percorrer. Mais especificamente, excede o limite do sistema de arquivos do Linux. Acabei de copiar algo com cerca de 500 níveis de profundidade e o rsync copiou tudo bem.

Se você estiver enfrentando esse problema, verifique o seguinte:

  • o sistema de arquivos de destino é incapaz de lidar com muitos subdiretórios?
  • o destino está cheio?
  • o arquivo --exclude-from especifica algo que restringe arquivos?
  • é o comprimento total do caminho ("d / d / d / d" é de 4 níveis, mas 7 caracteres) além do que o sistema de arquivos permite?
  • desativar a recursão incremental faz com que funcione? --no-inc-recursive (este é um algoritmo mais recente e você pode ter descoberto um bug)
  • a cópia funciona usando alguma outra técnica?
  • o problema desaparece com (ou sem) compactação? %código%

Aqui está outra técnica para tentar. Se funcionar, mas -z não, então você pode ter encontrado um bug em rsync :

Isso irá rsync dos arquivos em um lado, enviará o arquivo tar para stdout, ssh para o outro lado e irá descompactar os arquivos lá.

SOURCEDIR=/path/to/source
DESTHOST=machinename
DESTDIR=/path/to/destination
cd "$SOURCEDIR" && tar -c -v -f - . | ssh "$DESTHOST" "cd $DESTDIR && tar -x -p -f -"

Aviso: Se $ DESTDIR tiver espaços ou caracteres especiais, os itens acima precisarão ser citados com mais cuidado.

    
por 14.06.2015 / 20:42