Rsync acima do limite de profundidade da pasta ssh?

Rsync acima do limite de profundidade da pasta ssh?

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 via rsync sobre o comando ssh:

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

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

Portanto, a maioria dos arquivos e pastas são copiados, mas todos com profundidade de pasta 10 ou 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

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

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

Responder1

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

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

  • o sistema de arquivos de destino é incapaz de lidar com tantos subdiretórios?
  • o destino está cheio?
  • o arquivo --exclude-from especifica algo que restringe arquivos?
  • o comprimento total do caminho ("d/d/d/d" tem 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?-z

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

Isso irá colocar taros arquivos de um lado, enviar o arquivo tar para stdout, ssh para o outro lado e 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 contiver espaços ou caracteres especiais, o texto acima precisará ser citado com mais cuidado.

informação relacionada