
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 rsync
não funcionar, você pode ter encontrado um bug em rsync
:
Isso irá colocar tar
os 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.