Como sincronizar arquivos de backup do VPS para o Windows usando o cwRsync

Tutorial de como sincronizar os backups gerados pelo ISPConfig no VPS para o desktop Windows automaticamente usando o Agendador de Tarefas. Para isso usaremos alguns comandos não documentados e o cwRsync, que é muito parecido com o rsync para Linux.

Neste artigo mostrarei como baixar os backups dos sites mas a mesma dica pode ser usada para qualquer arquivo ou diretório no servidor.

Sincronizando arquivos de backup do VPS para o Windows usando cwRsync
1 Baixando e instalando o cwRsync

cwRsync é uma implementação do rsync para Linux compilado para Windows com as DLLs do Cygwin. A ferramenta é gratuita para a versão linha de comando.

1a ⇒ Crie uma pasta no Windows que conterá os arquivos do cwRsync e os backups que baixaremos do servidor. Sugestão: crie a pasta na raiz do sistema ( C:\rsync )

C:\rsync

1b ⇒ Baixe o cwRsync para a pasta criada acima. Link para o download: https://www.itefix.net/content/cwrsync-free-edition

O arquivo estará compactado, descompacte o conteúdo e copie os arquivos de dentro da pasta cwRsync_5.5.0_x86_Free para C:\rsync (em C:\rsync deverá conter a pasta bin e 3 outros arquivos).

1c ⇒ Prepare o sistema para conseguir executar o rsync de qualquer local. Dentro da pasta C:\rsync há um arquivo chamado cwrsync.cmd, clique duas vezes nele para executar.

Em seguida inclua o caminho dos binários rsync nas variáveis de sistema do Windows: Clique em Computador → Configurações Avançadas do Sistema → Variáveis de Ambiente, no segundo quadro “Variáveis do Sistema” clique duas vezes  na variável “Path“. Abrirá uma janela de edição com vários caminhos já definidos pelo Windows, no final da linha adicione o cwrsync separando por um ponto e vírgula conforme mostrado abaixo:

;C:\rsync\bin\

*Após modificar o path confirme todas as telas de propriedade abertas.

2 Configurando o SSH

No pacote do cwRsync além do comando rsync há também o ssh e o ssh-keygen, o qual usaremos para criar um par de chaves que permitirá acessar o servidor Linux sem necessidade de digitar a senha.

2a ⇒ Abra o prompt de comando do Windows (MS-DOS). Clique em “Iniciar” e na caixa de pesquisa digite “cmd“, na lista selecione cmd.exe para abrir o prompt.

2b ⇒ Acesse o diretório do usuário que já foi criado na instalação do cwRsync e crie um par de chaves:

ms-dos> cd C:\rsync\home\%USERNAME%\.ssh

ms-dos> ssh-keygen

* Pressione ENTER nas perguntas da tela. Será criado um par de chaves pública e privada na pasta .ssh. Usaremos o conteúdo do arquivo id_rsa.pub no próximo passo.

2c ⇒ Acesse o servidor Linux com as credenciais de superusuário root. Dentro do diretório  /root/.ssh há um arquivo chamado authorized_keys. Edite-o e cole o conteúdo do arquivo id_rsa.pub gerado no Windows.

2d ⇒ Corrigindo as permissões das chaves no Windows: Ao tentarmos executar o cwRsync uma mensagem de alerta será exibida dizendo que o arquivo de chaves privadas tem permissões erradas. Mensagem de alerta:

Permission 0770 are too open
This private key will be ignored
Load key bad permissions

Para acertar isso usaremos um comando não documentado do Windows chamado cacls.exe (esse comando permite alterar as permissões de arquivos pela linha de comando). Dentro da pasta C:\rsync\home\%USERNAME%\.ssh execute os seguintes comandos (prompt do MS-DOS):

ms-dos> cd C:\rsync\home\%USERNAME%\.ssh

ms-dos> cacls id_rsa /P Todos:N

ms-dos> cacls id_rsa /P %USERNAME%:F

2e ⇒ Teste o cwRsync: Crie uma pasta teste e use o rsync conforme demonstrado abaixo:

ms-dos> mkdir teste

ms-dos> cd teste

ms-dos> rsync -avz -e ssh [email protected]_DO_SERVIDOR:/var/log/auth.log .

* Será necessário confirmar a exceção de chave quando usar o comando pela primeira vez.

* No exemplo acima fizemos uma cópia do arquivo auth.log do Linux para o Windows. Note o “ponto” no final do comando rsync.

3 Acionando a opção de backup por site no ISPConfig 

No tutorial de como agendar backups para o ADrive já mostrei como ativar os backups de sites configurados no ISPConfig. Aquela é uma opção bem útil pois faz backup diário de todos os arquivos do site e do banco de dados compactando tudo em 2 arquivos. Segue abaixo um resumo de como usar a funcionalidade:

3a ⇒ Em cada site configurado no ISPConfig existe uma aba “Backup” que está com a função desativada por padrão. Para ativar  por site acesse:

ISPConfig → Sites → <Selecione um site na lista> → aba Backup 

» Intervalo de Backup: <- Daily (diário)

» Número de cópias: <- 1 (número de cópias do site que deseja manter no ISPConfig. Como faremos o download diariamente para o Windows não há necessidade de manter várias cópias no servidor, lembre-se que dependendo do tamanho do site isso poderá ocupar muito espaço)

» Exclude Directories: <- bin/*,etc/*,lib/*,lib64/*,log/*,tmp/*,usr/*,var/*,web/wp-content/managewp/backups/*,web/wp-content/updraft/*.zip,web/wp-content/updraft/*.gz

*Na lista de diretórios a excluir do backup adicionei aqueles gerados pelo ManageWP e pelo UpdraftPlus, mesmo que você não use esses plugins pode configurar conforme mostrado.

3b ⇒ Salve as opções acima e repita o procedimento 3a para todos os sites que deseja ativar o backup automático. Os backups serão gerados a partir da madrugada do dia seguinte, e o diretório onde os arquivos serão gravados no servidor será /var/backup/ (note que para cada site o ISPConfig grava um subdiretório com o nome do usuário de controle)

4 Configurando o Agendador de Tarefas do Windows 

O último passo deste tutorial será criar uma rotina no Agendador de Tarefas do Windows que baixará automaticamente os backups do servidor. *Para termos mais controle sobre os comandos criaremos um arquivo de script .bat dentro da pasta C:\rsync\home\%USERNAME%

4a ⇒ Crie uma pasta chamada C:\rsync\home\%USERNAME%\backups que abrigará os backups baixados pelo script.

4b ⇒ Crie um arquivo chamado rsyncvps.bat dentro da pasta acima e cole o seguinte conteúdo:

* Substitua as partes em vermelho pelas informações do seu desktop/servidor

* Note que usaremos o comando não documentado forfiles do Windows para manter somente 7 conjuntos de backup no desktop, ajuste se achar necessário

* Quando executamos o comando rsync para Windows, que usa as bibliotecas do Cygwin, o caminho de destino deverá ser escrito conforme mostrado abaixo e com barra normal à direita (no Cygwin o drive C:\ é denominado /cygdrive/c/)

@echo off

REM Mensagens de cabecalho
echo(
echo TRANSFERENCIA DE BACKUP 
echo Copiando arquivos do servidor, aguarde..
echo(

REM Grava a hora inicial:
set STARTTIME=%TIME%
echo Backup iniciado as: %STARTTIME%
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
 set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
)

REM Baixa o backup incremental e deleta backups antigos
rsync -avz -e ssh [email protected]_DO_SERVIDOR:/var/backup/ /cygdrive/c/rsync/home/%USERNAME%/backups/.
echo(
echo Backup sincronizado. Deletando os arquivos mais antigos que 7 dias..
REM Durante os primeiros 7 dias de sincronizacao uma mensagem sera exibida dizendo que nehum arquivo foi encontrado. Isso deve-se ao fato de que o comando forfiles nao encontrou arquivos antigos para excluir.
REM O parametro "D -7" define que somente os arquivos dos ultimos 7 dias devem ser mantidos.
@echo on
forfiles /P "C:\rsync\home\%USERNAME%\backups" /S /M *.* /D -7 /C "cmd /c del @path"

@echo off
REM Grava a hora do termino:
set ENDTIME=%TIME%
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
 set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
)

REM Calcula o tempo decorrido:
set /A elapsed=end-start
set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
if %mm% lss 10 set mm=0%mm%
if %ss% lss 10 set ss=0%ss%
if %cc% lss 10 set cc=0%cc%

REM Exibe o tempo decorrido:
echo(
echo HORA DE INICIO : %STARTTIME%
echo HORA DE TERMINO: %ENDTIME%
echo TEMPO DECORRIDO: %hh%hr %mm%min e %ss%seg

REM Exibe a mensagem final e faz uma pausa para mostrar que executou o script:
echo(
echo Backup Finalizado!
pause
exit

4c ⇒ Adicione a tarefa no Agendador do Windows. Clique em “Iniciar” e na caixa de pesquisa digite “Agendador“, escolha Agendador de Tarefas na lista. *Os passos abaixo são para o Windows 7, talvez a sua versão do sistema seja um pouco diferente.

No painel esquerdo selecione “Criar Tarefa..

[Aba Geral]
» Nome: <- Download do Backup diário do VPS

[Aba Disparadores]
Novo..
Marcar Diário e acertar o horário que deseja executar a tarefa

[Aba Ações]
Novo..
» Ação: <- <Iniciar um programa>
» Program/script: <- Selecione o script rsyncvps.bat que criamos no passo 4b

* Salve as telas do Agendador.

  • Quando criamos tarefas no Windows a opção executar por demanda é ativada por padrão. Isso significa que mesmo se o computador estiver desligado no horário agendado o Windows executará o script logo que possível após iniciado.
  • Em um site compactado de 50Mb a tarefa executa em apenas 2 minutos (banda larga de 15mb/s).

Gerenciamento em infraestrutura de Servidores Cloud VPS e Dedicados. Planos mensais acessíveis e consultoria diferenciada para agências de marketing. Envie um email para [email protected] e solicite uma análise gratuita!

728x90a
  • Jose X.

    onde está “cacls id_rsa /P Todos:N” mudar “TODOS” para “everyone” se o Windows for em inglẽs…esse cwrsyn é bem útil, mas essa difuculdade de automatizar a senha dá um ódio lascado do produto…

  • Samuel Batista

    e para restaurar esses backups via windows é possível ?

  • Restaurar backup quase sempre é complicado. Eu atendo mais de 100 servidores aqui e raramente há a necessidade de voltar algum. Com este tutorial acima você terá uma cópia do backup gerado pelo ISPConfig e deverá restaurar manualmente caso seja necessário. Mas é melhor que não ter cópia alguma.

  • Samuel Batista

    Com certeza é melhor 1000x que nada rsrs!
    No caso da restauração manual via ssh ou ftp eu teria que alterar permissões dos arquivos e pastas apos a conclusão Luis ou eles ja ficariam nas permissões corretas?

  • A situação é a mesma de quando sobe qualquer outro arquivo manualmente. Se deletar o site todo e subir os arquivos por FTP eles podem ficar com algumas permissões erradas (chmod). Neste caso o melhor é subir o arquivo compactado para uma pasta temporária do usuário (/private/tmp por exemplo), descompactá-los lá com o usuário em jail e mover os arquivos /web descompactado para o /web do site.

  • Samuel Batista

    Ótima solução, era algo assim que eu queria, vlw Luis!