Assine o canal RSS

«

»

mar
06

Maravilhas do mundo moderno. Rsync com hard-links, no Windows.

Estes dias precisei fazer um sistema de backup decente em um servidor Windows 2003. E obviamente, meu cliente não queria aquele arquivo compactado do Windows como seu backup. Nem queria um Backup de 60 Gigas e um incremental de mais 55 Gigas.  Por isso, resolvi estudar as opções. Primeiro, é necessário que o backup seja incremental, ou seja, que cada backup consuma somente o espaço dos arquivos alterados e não um backup completo a cada dia. Segundo, que seja transparente e fácil para o cliente. Nada de arquivo zip ou bkp do Windows, em que o cliente tenha que abrir e dai poder retirar o arquivo. Tem que ser algo que possa ser utilizado direto. Então pensei o seguinte: Como eu gostaria de poder usar o rsync para fazer um backup com hard-links como eu faria no Linux, mas o Windows não suporta hard-links. Este foi meu primeiro engano. O NTFS suporta hard-links sim. E a tempo, o que são hard-links? Basicamente são links no sistema de arquivos que apontam para uma mesma informação no HD. Ou seja. Posso ter um arquivo chamado arquivo1 e um chamado arquivo2 e os dois apontarem para uma mesma informação no disco (por exemplo, um texto, música, foto ou qualquer outra coisa). E porque iríamos querer isto? Veremos um pouco mais a frente.

Meu segundo engano foi pensar que não conseguiria rodar o Rsync no Windows. Ai entra o cygwin,que é uma camada de emulação das APIs do Linux, para Windows.  Neste caso, utilizaremos algumas ferramentas já prontas para funcionar corretamente o Rsync. Resumidamente rodaremos programas feitos para Linux, mas recompilados para rodar no Windows.

E por último, pensei: “Ok, o Rsync roda no Windows, a NTFS suporta hard-links, mas o Rsync não vai saber utilizá-las.” Último engano do dia. O cygwin faz  toda a conversão perfeitamente e o backup fica ótimo.

Bom, perfeito então. Mãos a obra.

Precisaremos do Cygwin http://www.cygwin.com/setup.exe e do bloco de notas.

1 – Instale o Cygwin. Esta é a parte fácil. Quando estiver instalando, será lhe dado várias opções para baixar também outro componentes pré compilados para o Windows com Cygwin. Entre na categoria net e baixe o Rsync.

2 – Depois do Cygwin instalado, adicione o caminho da instalação do Rsync em seu path do Windows, para que possa ser executado em qualquer lugar, ou copie o rsync.exe, o rm.exe e o mv.exe e o cygwin.dll para dentro da pasta system32 de seu Windows.

3 – Agora, vamos criar a estrutura de pastas. Irei utilizar 8 dias de backup em meus exemplos:

Dentro de uma pasta determinada para o backup, crie pastas de 00 a 07 (01, 02, 03, …). Estes serão nossos dias de backup, sendo 00 o backup do dia atual e cada outro um dia anterior.

4 – Agora vamos criar os scripts. O primeiro script faz um backup completo dos arquivos. Crie um arquivo no bloco de notas e na hora de salvar selecione nos “tipos de documentos” a opção “todos os arquivos”. Depois salve como .bat

—–COMEÇO——

@echo off
rsync -avP /cygdrive/c/pasta1 /cygdrive/c/pasta2 /cygdrive/d/backup/00

—–FIM—–

Vamos rever este comando. Aqui chamamos o Rsync com os comandos -a -v -P. -a é de archive, que na realidade é um conjunto de comandos equivalentes a -rlptgoD. Estude a ajuda do rsync em http://samba.anu.edu.au/ftp/rsync/rsync.html. -v é de Verbose, irá mostrar na tela o que o comando está fazendo. E o -P é de progressão. Veja que estes dois últimos comandos (-v -P) não são obrigatórios, já que o script ficará rodando sozinho sem ninguém observar. Mas você pode querer gravar o resultado em um arquivo e conferir mais tarde. E o Rsync é case-sensitive. Ele diferencia -p de -P. Por isso fique atendo aos comandos. A pasta /cygdrive/c/pasta1 é uma referência a pasta C:\pasta1. O Rsync segue os padrões Posix e por isso, funciona melhor utilizando a / em vez da \  e o cygdrive serve para identificar as partições do Windows. Se fosse a partição d, seria /cygdrive/d/pasta1 ou /cygdrive/d se fosse a pasta toda. Temos duas pastas a serem gravadas no backup, que será armazenado na pasta D:\backup\00. Você pode colocar quantas pastas quiser, a última pasta do comando será sempre o destino. Lembrando que se existirem espaços no caminho da pasta, você deve colocar entre ” ” Ex:  “/cygdrive/c/minha pasta1″.

Depois é só agendar este backup no Windows, pelo painel de controle, em “tarefas agendadas” (Windows XP), ou rodá-lo manualmente. Este só é necessário uma vez.

5 – Agora o script para o backup incremental. Faça novamente um arquivo .bat no bloco de notas

—–COMEÇO—–

@echo off
rm -r -f /cygdrive/d/backup/07
mv /cygdrive/d/backup/06/* /cygdrive/d/backup/07
mv /cygdrive/d/backup/05/* /cygdrive/d/backup/06
mv /cygdrive/d/backup/04/* /cygdrive/d/backup/05
mv /cygdrive/d/backup/03/* /cygdrive/d/backup/04
mv /cygdrive/d/backup/02/* /cygdrive/d/backup/03
mv /cygdrive/d/backup/01/* /cygdrive/d/backup/02
mv /cygdrive/d/backup/00/* /cygdrive/d/backup/01

rsync -avP –link-dest=/cygdrive/d/backup/01 /cygdrive/c/pasta1 /cygdrive/pasta2 /cygdrive/d/backup/00

—–FIM—–

Neste item você pode ver o uso do comando rm e o mv, que é um comando do Linux, aqui recompilado no cygwin para rodar no Windows. Poderia ter sido usado o comando do Windows, o rmdir, mas preferi mostrar que dá para usar praticamente qualquer comando do Linux que tenha  sido recompilado dentro do cygwin. Veja durante a instalação do cygwin (ou se quiser adicionar mais aplicativos, é só rodar o instalador novamente) o que está disponível.

De qualquer forma, utilizamos na primeira linha, o rm para apagar o conteúdo da pasta 07 (que neste momento está vazia, mas daqui a 8 dias terá arquivos) e nas próximas, utilizamos o mv para mover o conteudo da pasta 06 para a 07, da 05 para a 06, da 04 para a o5, da 03 para a 04, da o2 para a 03, da 01 para a 02 e da 00 para a 01. Desta forma, literalmente jogamos nosso backup para o próximo dia.

O comando do rsync é bem parecido, exeto a adição do –link-dest=/cygdrive/d/backup/01. Esta opção extra faz com que o rsync observe a pasta 01 (Que agora contém nosso backup completo) e veja quais arquivos nas pastas de origem foram alterados e copia somente o que for alterado. Você pode estar se perguntando: Mas como ficará o backup? Teremos backups de todos os arquivos? Somente incremental? Ai que entram os hard-links. Nós teremos um backup completo dos arquivos. O Rsync observará os arquivos desta pasta e irá comparar com os arquivos a serem copiados. Se forem os mesmos, o rsync somente cria um hard-link para o arquivo. Se for um arquivo modificado ou novo, ele copia o arquivo. Isso fará com que cada pasta pareça estar com um backup completo, completamente transparente ao cliente final.

Novamente, adicione o arquivo .bat ao agendador de tarefas mas faça este rodar todos os dias.

6  – Pronto. Um excelente backup para rodar em hd externo/pendrive/segundo hd/segunda partição, ocupando muito pouco espaço e tendo um efeito ótimo nos usuários finais. Seu backup não fica cheio e o cliente final pode ver os arquivos do backup sem precisar chamar você para ajudá-lo.

Você pode verificar o espaço utilizado nas pastas com o comando “du -a –max-depth=1″ na raiz do backup. Uma listagem lhe mostrará que somente uma das pastas ocupa o espaço inteiro. As outras ocupam somente a diferença do que foi alterado.

Observações:

1 – É possível utilizar uma maquina remota rodando ssh para ser o destino ou origem dos arquivos. Veja as opções do rsync no site passado anteriormente

2 – Caso deseje mais dias de backup, simplesmente adicione pastas e altere os scripts de acordo.

Até a próxima.

4 comentários

  1. Cygwin: script de backup com rsync rodando no Windowsdisse:

    [...] Enviado por Marcos Francisco Longo (marcoslongoΘgmail·com): “Estes dias precisei montar um backup em um servidor rondando Windows 2003. Qual não foi a minha surpresa em descobrir que posso utilizar o meu script de backup padrão do Linux no Windows, com Rsync e o Cygwin, quase sem alteração nenhuma? Segue no link http://www.fix.inf.br/?p=14 um tutorial de como fazer. Achei extremamente interessante saber que mesmo quando estamos limitados ao Windows, ainda podemos utilizar as ferramentas que estamos acostumados no Linux. Vitória do Open Source, que está cada vez mais disponível e mostrando sua versatilidade sem igual.” [referência: fix.inf.br] [...]

  2. Alexsandrodisse:

    Gostaria de saber se tem como fazer o backup das ACLs também. Pois estamos tendo dificuldade nessa parte.

  3. admindisse:

    De quais ACLs você está se referindo? Este script meramente faz backups de pastas e arquivos. Se você sabe onde ficam as ACLs é só adicionar as pastas respectivas.

  4. Cygwin: script de backup com rsync rodando no Windows :Software Livredisse:

    [...] Open Source, que está cada vez mais disponível e mostrando sua versatilidade sem igual.” [referência: fix.inf.br] Share and [...]

Deixe uma resposta

Seu e-mail não será publicado.

Você pode usar estas tags e atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>