Usando o rsync para fazer backup de um computador remoto através de um link ssh reverso

1

Eu posso rsync para o meu computador remoto, mas não consigo rsync do meu computador remoto - não parece trocar uma lista de arquivos nessa direção, então ele tenta transferir todo um grande número de arquivos ao invés de atualizar apenas os que mudaram são novos.

A configuração é um pouco complicada. Eu tenho um computador remoto por trás de um firewall e preciso trocar arquivos com esse computador do meu computador de casa. O computador doméstico não tem um endereço IP permanente, então estou usando o noip para retornar o ssh reverso para o endereço IP atual do meu computador doméstico. O comando reverse ssh do meu computador remoto está em execução:

autossh -g -R 45678: localhost: 22 [email protected]

No meu computador de casa, estou executando o programa noip2 que diz ao noip.net para enviar a porta 45678 para o meu computador doméstico.

No meu computador de casa, posso sincronizar minha pasta de documentos para o meu computador remoto usando:

rsync -navzu --stats -e "ssh -p 45678" --delete / home / me / Documentos / eu @ localhost: / home / me / Documents

Isso funciona bem. Somente documentos novos ou atualizados são transferidos e o computador remoto é atualizado.

No entanto, quando tento reverter isso para atualizar o computador doméstico a partir do computador remoto com o seguinte, não funciona:

rsync -navzu --stats -e "ssh -p 45678" --delete-me @ localhost: / home / me / Documentos / / home / me / Documents

O rsync não vê nenhum dos arquivos em Documentos no meu computador doméstico e tenta transferir todos os arquivos, em uma execução seca.

Alguma ideia do que está errado aqui?

    
por JasonK 08.08.2015 / 20:13

1 resposta

1

Bem, parece que encontrei uma resposta para a minha pergunta, embora o problema não seja o que eu pensava ser.

Eu tive a chance de dar uma olhada mais de perto nos arquivos que o rsync estava tentando transferir. Acontece que não era todo arquivo, mas a grande maioria. Aparentemente, quando o sistema de arquivos remoto era criado, um switch não era usado para garantir que o carimbo de data e hora fosse preservado. Como resultado, todos os arquivos foram copiados com um carimbo de data e hora da data em que os arquivos foram criados no sistema remoto. Somente arquivos que foram atualizados desde então tinham carimbos de data e hora diferentes. Portanto, quando o rsync tenta atualizar o sistema local do sistema remoto, ele tenta copiar quase todos os arquivos porque eles têm um registro de data e hora mais recente no sistema remoto do que no sistema local.

Portanto, a solução para consertar isso é usar o toque para colocar os registros de data e hora corretos no sistema remoto. Eu não estou muito familiarizado com o shell do linux, então provavelmente há uma solução muito mais elegante, mas aqui está o que funcionou para mim:

1: monte o sistema de arquivos remoto localmente:

sshfs -p 45678 me @ localhost: / ./mntpt /

2: coloque o seguinte script de shell no sistema de arquivos remoto e execute-o:

#!/bin/bash
find * -newermt "2014-04-22" ! -newermt "2014-04-23" | while read f; 
do
 touch "$f" -c -m -r "/home/me/Documents/$f"
done

O texto acima ainda leva muito tempo para ser executado, mas quase certamente não é tão longo quanto tentar fazer o backup de todos os arquivos por meio de uma conexão bastante lenta. Eu tentei várias soluções de comando de shell de uma linha em vez de um script, mas não encontrei nenhuma maneira de referenciar a lista de arquivos duas vezes no comando touch.

    
por JasonK 16.08.2015 / 19:56