17Aug

O Guia do Não iniciante para sincronizar dados com o Rsync

O protocolo rsync pode ser bastante simples de usar para tarefas comuns de backup / sincronização, mas alguns dos recursos mais avançados podem surpreendê-lo. Neste artigo, vamos mostrar como até os maiores acumuladores de dados e entusiastas de backup podem exercer a rsync como uma única solução para todas as suas necessidades de redundância de dados.

Aviso: Advanced Geeks Only

Se você está sentado pensando: "O que o heck é rsync?" Ou "Eu uso apenas rsync para tarefas realmente simples", você pode querer verificar o nosso artigo anterior sobre como usar o rsync para fazer backupseus dados no Linux, que dá uma introdução ao rsync, orienta você através da instalação e mostra suas funções mais básicas. Uma vez que você tenha uma compreensão firme de como usar o rsync( honestamente, não é tão complexo) e está confortável com um terminal Linux, você está pronto para seguir este guia avançado.

Executando rsync no Windows

Primeiro, obtenha nossos leitores do Windows na mesma página que nossos gurus do Linux. Embora o rsync esteja configurado para funcionar em sistemas semelhantes a Unix, não há motivos para que você não possa usá-lo tão facilmente no Windows. Cygwin produz uma maravilhosa API do Linux que podemos usar para executar o rsync, então dirija-se ao seu site e baixe a versão de 32 bits ou 64 bits, dependendo do seu computador.

A instalação é direta;você pode manter todas as opções em seus valores padrão até chegar à tela "Selecionar Pacotes".

Agora você precisa fazer os mesmos passos para o Vim e o SSH, mas os pacotes vão parecer um pouco diferentes quando você seleciona, então aqui estão algumas capturas de tela:

Instalando o Vim:

Instalando SSH:

Depois de vocêselecionou esses três pacotes, continue clicando em próximo até terminar a instalação. Então você pode abrir o Cygwin clicando no ícone que o instalador colocou em sua área de trabalho.

rsync Comandos: Simples ao Advanced

Agora que os usuários do Windows estão na mesma página, vamos dar uma olhada em um comando rsync simples e mostrar como o uso de alguns switches avançados pode torná-lo complexo.

Digamos que você tenha um monte de arquivos que precisam ser copiados - quem não faz esses dias? Você conecta seu disco rígido portátil para que você possa fazer backup dos arquivos de seus computadores e emitir o seguinte comando:

rsync -a /home/geek/files/ /mnt/usb/files/

Ou, da maneira que olharia para um computador Windows com Cygwin:

rsync -a /cygdrive/c/files/ /cygdrive/e/files/

Simplesmente simples e emnesse ponto, não há necessidade de usar o rsync, pois você poderia simplesmente arrastar e soltar os arquivos. No entanto, se o seu outro disco rígido já possui alguns dos arquivos e apenas precisa de versões atualizadas mais os arquivos que foram criados desde a última sincronização, este comando é útil porque ele só envia os novos dados para o disco rígido. Com grandes arquivos, e especialmente transferência de arquivos pela internet, isso é muito importante.

Faz backup de seus arquivos em um disco rígido externo e, em seguida, mantenha o disco rígido no mesmo local, pois seu computador é uma idéia muito ruim, então vamos dar uma olhada no que seria necessário para começar a enviar seus arquivos pela internet para outro computador(um que você alugou, um membro da família, etc.).

rsync -av --delete -e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/

O comando acima envia seus arquivos para outro computador com um endereço IP de 10.1.1.1.Ele eliminaria arquivos estranhos do destino que já não existem no diretório de origem, exibem os nomes dos arquivos que estão sendo transferidos para que você tenha uma idéia do que está acontecendo e túnel rsync através de SSH na porta 12345.

O -a -v -e -Os interruptores de substituição são alguns dos mais básicos e comumente usados;Você já deve saber um bom negócio sobre eles se estiver lendo este tutorial. Vamos passar por alguns outros switches que às vezes são ignorados, mas incrivelmente úteis:

--progress - Este switch nos permite ver o progresso da transferência de cada arquivo.É particularmente útil ao transferir arquivos grandes pela internet, mas pode produzir uma quantidade insensata de informações ao transferir arquivos pequenos em uma rede rápida.

Um comando rsync com a opção --progress switch como um backup está em andamento:

--parcial - Este é outro parâmetro que é particularmente útil ao transferir arquivos grandes pela internet. Se o rsync for interrompido por qualquer motivo no meio de uma transferência de arquivo, o arquivo parcialmente transferido é mantido no diretório de destino e a transferência é retomada quando ele saiu uma vez que o comando rsync foi executado novamente. Ao transferir arquivos grandes pela internet( digamos, alguns gigabytes), não há nada pior do que ter uma interrupção de uma segunda interrupção da internet, tela azul ou erro de erro humano na transferência de arquivos e ter que começar tudo de novo.

-P - este interruptor combina --progress e --parcial, então use-o e isso fará seu comando rsync um pouco mais limpo.

-z ou --compress - Este switch fará com que o rsync compacte os dados do arquivo à medida que ele está sendo transferido, reduzindo a quantidade de dados que deve ser enviada para o destino. Na verdade, é um switch bastante comum, mas está longe de ser essencial, apenas o beneficiando em transferências entre conexões lentas e não faz nada para os seguintes tipos de arquivos: 7z, avi, bz2, deb, g, z iso, jpeg, jpg,mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.

-h ou - legível ao humano - Se você estiver usando a opção --progress, você definitivamente quer usar esse também. Ou seja, a menos que você goste de converter bytes para megabytes sobre a marcha. O parâmetro -h converte todos os números emitidos para um formato legível por humanos, para que você possa realmente ter sentido a quantidade de dados que estão sendo transferidos.

-n ou --dry-run - Esta opção é essencial para saber quando você escreve pela primeira vez seu script rsync e testá-lo. Ele executa uma execução de teste, mas na verdade não faz nenhuma alteração - as mudanças possíveis ainda são exibidas como normais, para que você possa ler tudo e se certificar de que parece ser bom antes de rolar seu script para a produção.

-R ou --replicativo - Este interruptor deve ser usado se o diretório de destino ainda não existir. Usaremos esta opção mais tarde neste guia para que possamos fazer diretórios na máquina de destino com timestamps nos nomes das pastas.

--exclude-from - Este parâmetro é usado para vincular a uma lista de exclusão que contém caminhos de diretório que você não quer fazer backup. Ele só precisa de um arquivo de texto simples com um diretório ou caminho de arquivo em cada linha.

--include-from - Similar a --exclude-from, mas liga a um arquivo que contém diretórios e caminhos de arquivos dos dados que deseja fazer backup.

--stats - Na verdade, não é um interruptor importante por qualquer meio, mas se você é um administrador de sistemas, pode ser útil conhecer as estatísticas detalhadas de cada backup, apenas para que você possa monitorar a quantidade de tráfego que está sendo enviado por sua rede e tal.

--log-file - Isso permite que você envie a saída rsync para um arquivo de log. Definitivamente recomendamos isso para backups automatizados em que você não está lá para ler a saída você mesmo. Sempre forneça arquivos de log uma vez em seu tempo livre para garantir que tudo esteja funcionando corretamente. Além disso, é um interruptor crucial para um administrador de sistemas usar, então você não se perguntou como seus backups falharam quando você deixou o interno responsável.

Vamos dar uma olhada no nosso comando rsync agora que temos mais alguns switches adicionados:

rsync -avzhP --delete --stats --log-file = /home/geek/rsynclogs/ backup.log --exclude-from '/home/geek/ exclude.txt'-e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/

O comando ainda é bastante simples, mas ainda não criamos uma solução de backup decente. Mesmo que nossos arquivos estejam agora em dois locais físicos diferentes, este backup não faz nada para nos proteger de uma das principais causas de perda de dados: erro humano.

Snapshot Backups

Se você exclui acidentalmente um arquivo, um vírus corrompe qualquer um de seus arquivos, ou outra coisa acontece pelo qual seus arquivos são alterados de forma indesejável e, em seguida, você executa seu script de backup rsync, seus dados de backup são substituídos pelas mudanças indesejáveis. Quando tal coisa ocorre( não se, mas quando), sua solução de backup não fez nada para protegê-lo da perda de dados.

O criador do rsync percebeu isso e adicionou os argumentos --backup e --backup-dir para que os usuários pudessem executar backups diferenciais. O primeiro exemplo no site do rsync mostra um script onde um backup completo é executado a cada sete dias e, em seguida, as alterações desses arquivos são copiadas em diretórios separados diariamente. O problema com este método é que, para recuperar seus arquivos, você deve efetivamente recuperá-los sete vezes diferentes. Além disso, a maioria dos geeks executam seus backups várias vezes por dia, então você poderia facilmente ter mais de 20 diretórios de backup diferentes em qualquer momento. Não só a recuperação de seus arquivos agora é uma dor, mas mesmo apenas pesquisando seus dados de backup pode ser extremamente demorado - você precisaria saber a última vez que um arquivo foi alterado para encontrar a cópia de backup mais recente. Além disso, é ineficiente executar apenas backups incrementais semanais( ou menos freqüentemente em alguns casos).

Snapshot backups para o resgate! Os backups de snapshot são nada além de backups incrementais, mas eles utilizam links rígidos para reter a estrutura do arquivo da fonte original. Isso pode ser difícil de envolver a cabeça no início, então vamos dar uma olhada em um exemplo.

Imagine que temos um script de backup executado que faz backup automaticamente de nossas informações a cada duas horas. Sempre que o rsync faz isso, ele nomeará cada backup no formato de: Backup-month-day-year-time.

Então, no final de um dia típico, teríamos uma lista de pastas em nosso diretório de destino como este:

Ao percorrer qualquer um desses diretórios, você veria todos os arquivos do diretório de origem exatamente como era nesse momento. No entanto, não haveria duplicações em nenhum diretório.rsync realiza isso com o uso de hardlinking através do argumento --link-dest = DIR.

Claro, para ter esses nomes de diretório bem e datados, vamos ter que reforçar um pouco nosso script rsync. Vamos dar uma olhada no que seria necessário para realizar uma solução de backup como essa, e então explicaremos o script com maior detalhe:

#!/bin/ bash

#copy old time.txt para time2.txt

sim |cp ~ /backup/ time.txt ~ /backup/ time2.txt

#overwrite antigo arquivo time.txt com nova hora

echo `data +"% F-% I% p "` & gt;~ /backup/ time.txt

# criar o arquivo de log

echo "" & gt;~ /backup/ rsync - `date +"% F-% I% p "`. log

# comando sincronizado

rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r --delete --sats --log-file = ~ /backup/ rsync-`date + "% F-% I% p" `.log --exclude-from '~ / exclude.txt' --link-dest = /home/geek2/files/` cat ~ /backup/time2.txt` -e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/ `data +"% F-% I% p "` /

# não se esqueça de scp o arquivo de log e colocá-lo com obackup

scp -P 12345 ~ /backup/ rsync-`cat ~ /backup/ time.txt`.log [email protected]: /home/geek2/files/ `cat ~ /backup/ time.txt` / rsync-`cat ~ /backup/ time.txt`.log

Queseria um script rsync instantâneo típico. Caso o percamos em algum lugar, vamos dissecá-lo peça por peça:

A primeira linha do nosso script copia o conteúdo do time.txt para o time2.txt. O sim pipe é para confirmar que queremos substituir o arquivo. Em seguida, tomamos a hora atual e colocamos no time.txt. Esses arquivos serão úteis mais tarde.

A próxima linha faz o arquivo de registro rsync, nomeando rsync-date.log( onde a data é a data e a hora reais).

Agora, o comando rsync complexo com o qual estamos alertando sobre: ​​

-avzhPR, -e, --delete, --stats, --log-file, --exclude-from, --link-dest - Justos interruptores sobre os quais falamos anteriormente;deslize para cima se precisar de uma atualização.

--chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - Estas são as permissões para o diretório de destino. Uma vez que estamos fazendo este diretório no meio do nosso script rsync, precisamos especificar as permissões para que nosso usuário possa escrever arquivos para ele.

O uso de comandos de data e gato

Vamos examinar cada uso dos comandos de data e gato dentro do comando rsync, na ordem em que eles ocorrerem. Nota: estamos conscientes de que existem outras maneiras de realizar essa funcionalidade, especialmente com o uso de declarar variáveis, mas, para o propósito deste guia, decidimos usar esse método.

O arquivo de log é especificado como:

~ /backup/ rsync-`date + "% F-% I% p" `.log

Alternativamente, poderíamos especificá-lo como:

~ /backup/ rsync-`cat ~ /backup/ time.txt`.log

De qualquer forma, o comando --log-file deve poder encontrar o arquivo de log datado criado anteriormente e gravá-lo.

O arquivo de destino do link é especificado como:

--link-dest = /home/geek2/files/ `cat ~ /backup/ time2.txt`

Isso significa que o comando --link-dest é dado o diretório do backup anterior. Se estamos executando backups a cada duas horas, e às 4:00 da tarde, no momento em que executámos esse script, o comando --link-dest procura o diretório criado às 2:00 da tarde e somente transfere os dados que mudaram desde então( caso existam).

Para reiterar, é por isso que time.txt é copiado para time2.txt no início do script, então o comando --link-dest pode referir esse tempo mais tarde.

O diretório de destino é especificado como:

[email protected]: /home/geek2/files/ `date +"% F-% I% p "`

Este comando simplesmente coloca os arquivos de origem em um diretório que possui um título da data e hora atuais.

Finalmente, asseguramos que uma cópia do arquivo de log seja colocada dentro do backup.

scp -P 12345 ~ /backup/ rsync-`cat ~ /backup/ time.txt`.log [email protected]: /home/geek2/files/ `cat ~ /backup/ time.txt` / rsync-`cat ~ /backup/ time.txt`.log

UsamosCopie segura na porta 12345 para pegar o log rsync e coloque-o no diretório apropriado. Para selecionar o arquivo de log correto e certificar-se de que ele termina no ponto certo, o arquivo time.txt deve ser referenciado através do comando cat. Se você está se perguntando por que nós decidimos cat time.txt em vez de apenas usar o comando da data, é porque um monte de tempo poderia ter ocorrido enquanto o comando rsync estava sendo executado, então, para ter certeza de que temos o momento certo, nós apenas o gatoo documento de texto que criamos anteriormente.

Automation

Use o Cron no Linux ou o Task Scheduler no Windows para automatizar seu script rsync. Uma coisa que você deve ter cuidado é garantir que você termine todos os processos rsync atualmente em execução antes de continuar um novo. Task Scheduler parece fechar automaticamente as instâncias que já estão sendo executadas, mas para o Linux você precisará ser um pouco mais criativo.

A maioria das distribuições Linux pode usar o comando pkill, então apenas tenha certeza de adicionar o seguinte ao início do script rsync:

pkill -9 rsync

Criptografia

Não, ainda não terminamos. Nós finalmente temos uma solução de backup fantástica( e grátis!) No lugar, mas todos os nossos arquivos ainda são suscetíveis a roubo. Felizmente, você está fazendo backup de seus arquivos em algum lugar, a centenas de quilômetros de distância. Não importa o quão seguro é esse lugar distante, o roubo e a pirataria podem ser sempre problemas.

Nos nossos exemplos, túnelamos todo o nosso tráfego rsync através do SSH, de modo que todos os nossos arquivos são criptografados enquanto transitam para o destino. No entanto, precisamos garantir que o destino seja tão seguro. Tenha em mente que o rsync apenas criptografa seus dados à medida que ele está sendo transferido, mas os arquivos estão abertos quando alcançaram seu destino.

Um dos melhores recursos da rsync é que ele só transfere as alterações em cada arquivo. Se você tiver todos os seus arquivos criptografados e fazer uma alteração menor, todo o arquivo terá que ser retransmitido como resultado da criptografia, aleatorizando completamente todos os dados após qualquer alteração.

Por este motivo, é melhor / mais fácil usar algum tipo de criptografia de disco, como o BitLocker para Windows ou o dm-crypt para Linux. Dessa forma, seus dados estão protegidos em caso de roubo, mas os arquivos podem ser transferidos com rsync e sua criptografia não irá dificultar seu desempenho. Existem outras opções disponíveis que funcionam de forma semelhante à rsync ou mesmo implementam alguma forma, como a Duplicity, mas eles não possuem alguns recursos que a rsync tem para oferecer.

Depois de configurar os backups do snapshot em um local externo e criptografado seus discos rígidos de origem e de destino, entregue-se um tapinha na parte de trás para dominar o rsync e implementar a solução de backup de dados mais imperturbável possível.