O protocolo rsync pode ser muito simples de usar para trabalhos comuns de backup / sincronização, mas alguns de seus recursos mais avançados podem surpreendê-lo. Neste artigo, vamos mostrar como até mesmo os maiores acumuladores de dados e entusiastas de backup podem usar o rsync como uma solução única para todas as suas necessidades de redundância de dados.
Aviso: apenas geeks avançados
Se você está sentado aí pensando "Que diabos é rsync?" ou "Eu só uso rsync para tarefas realmente simples", você pode querer verificar nosso artigo anterior sobre como usar rsync para fazer backup de seus dados no Linux , que fornece uma introdução ao rsync, orienta você durante a instalação e mostra suas funções mais básicas. Depois de ter um domínio firme de como usar o rsync (honestamente, não é tão complexo) e se sentir confortável com um terminal Linux, você está pronto para prosseguir para este guia avançado.
Executando rsync no Windows
Primeiro, vamos colocar nossos leitores do Windows na mesma página que nossos gurus do Linux. Embora o rsync seja construído para ser executado em sistemas do tipo Unix, não há razão para que você não possa usá-lo tão facilmente no Windows. Cygwin produz uma API Linux maravilhosa que podemos usar para executar o rsync, então vá até o site deles e baixe o 32 bits ou 64 bits versão, 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 seguir as mesmas etapas para Vim e SSH, mas os pacotes vão parecer um pouco diferentes quando você for selecioná-los, então aqui estão algumas imagens:
Installing Vim:
Instalando SSH:
Depois de selecionar esses três pacotes, continue clicando em Avançar até concluir a instalação. Então você pode abrir o Cygwin clicando no ícone que o instalador colocou em sua área de trabalho.
Comandos rsync: simples para avançados
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 algumas opções avançadas pode torná-lo complexo rapidamente.
Digamos que você tenha um monte de arquivos que precisam de backup - quem não precisa hoje em dia? Você conecta seu disco rígido portátil para fazer backup dos arquivos do seu computador e emite o seguinte comando:
rsync -a / home / geek / files / / mnt / usb / files /
Ou como ficaria em um computador Windows com Cygwin:
rsync -a / cygdrive / c / files / / cygdrive / e / files /
Muito simples, e nesse ponto realmente não há necessidade de usar rsync, já que você pode simplesmente arrastar e soltar os arquivos. No entanto, se o outro disco rígido já tiver alguns dos arquivos e precisar apenas das versões atualizadas mais os arquivos que foram criados desde a última sincronização, esse comando é útil porque envia apenas os novos dados para o disco rígido. Com arquivos grandes, e especialmente a transferência de arquivos pela Internet, isso é importante.
Fazer backup de seus arquivos em um disco rígido externo e, em seguida, manter o disco rígido no mesmo local que seu computador é uma ideia 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 enviaria seus arquivos para outro computador com um endereço IP de 10.1.1.1. Isso excluiria arquivos estranhos do destino que não existem mais no diretório de origem, geraria os nomes dos arquivos sendo transferidos para que você tenha uma ideia do que está acontecendo e faria o rsync através do SSH na porta 12345.
o
-а -в -е --делете
switches são alguns dos mais básicos e comumente usados; você já deve saber muito sobre eles se estiver lendo este tutorial. Vejamos algumas outras opções que às vezes são ignoradas, mas incrivelmente úteis:
--progresso
- Essa opção nos permite ver o andamento da transferência de cada arquivo. É particularmente útil ao transferir arquivos grandes pela Internet, mas pode gerar uma quantidade absurda de informações ao apenas transferir pequenos arquivos em uma rede rápida.
Um comando rsync com o
--progresso
mudar enquanto um backup está em andamento:
--parcial
- Esta é outra opção 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 será mantido no diretório de destino e a transferência será retomada de onde parou quando o comando rsync for executado novamente. Ao transferir arquivos grandes pela Internet (digamos, alguns gigabytes), não há nada pior do que alguns segundos de interrupção da Internet, tela azul ou erro humano atrapalham a transferência de arquivos e ter que começar tudo de novo.
-P
- esta opção combina
--progresso
e
--parcial
, então use-o e ele tornará seu comando rsync um pouco mais organizado.
-com
ou
--comprimir
- Essa opção fará com que o rsync comprima os dados do arquivo à medida que são transferidos, reduzindo a quantidade de dados que deve ser enviada ao destino Na verdade, é uma opção bastante comum, mas está longe de ser essencial, apenas beneficiando você 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
--human-readable
- Se você estiver usando o
--progresso
switch, você definitivamente vai querer usar este também. Ou seja, a menos que você goste de converter bytes em megabytes rapidamente. o
-h
switch converte todos os números emitidos em formato legível por humanos, para que você possa realmente ter uma noção da quantidade de dados que está sendo transferida.
-n
ou
--funcionamento a seco
- Essa opção é essencial para saber quando você está escrevendo seu script rsync pela primeira vez e testando-o. Ele executa uma execução de teste, mas na verdade não faz nenhuma alteração - as alterações em potencial ainda são exibidas normalmente, então você pode ler tudo e certificar-se de que está tudo bem antes de colocar seu script em produção.
-R
ou
--relativo
- Esta opção deve ser usada se o diretório de destino ainda não existir. Usaremos essa opção posteriormente neste guia para que possamos criar diretórios na máquina de destino com carimbos de data / hora nos nomes das pastas.
--exclude-from
- Esta opção é usada para vincular a uma lista de exclusão que contém caminhos de diretório dos quais você não deseja fazer backup. Ele só precisa de um arquivo de texto simples com um diretório ou caminho de arquivo em cada linha.
--include-from
- Igual a
--exclude-from
, mas ele se vincula a um arquivo que contém diretórios e caminhos de arquivo de dados dos quais você deseja fazer backup.
--Estatísticas
- Não é realmente um switch importante de forma alguma, mas se você for um administrador de sistema, pode ser útil saber as estatísticas detalhadas de cada backup, apenas para que você possa monitorar a quantidade de tráfego que está sendo enviado pela sua rede e tal.
--arquivo de log
- Isso permite enviar a saída rsync para um arquivo de log. Definitivamente, recomendamos isso para backups automatizados nos quais você não está lá para ler a saída sozinho. Sempre dê uma olhada nos arquivos de log em seu tempo livre para ter certeza de que tudo está funcionando corretamente. Além disso, é uma opção crucial para um administrador de sistema usar, então você não fica se perguntando como seus backups falharam enquanto você deixou o estagiário no comando.
Vamos dar uma olhada em nosso comando rsync agora que adicionamos mais algumas opções:
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 é muito simples, mas ainda não criamos uma solução de backup decente. Mesmo que nossos arquivos estejam agora em dois locais físicos diferentes, esse backup não faz nada para nos proteger de uma das principais causas de perda de dados: erro humano.
Backups instantâneos
Se você acidentalmente excluir um arquivo, um vírus corrompe qualquer um dos seus arquivos ou algo mais acontece e os seus arquivos são alterados de forma indesejada e, em seguida, você executa o script de backup rsync, os dados do backup são sobrescritos com as alterações indesejáveis. Quando isso 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 o
--cópia de segurança
e
--backup-dir
argumentos para que os usuários possam executar backups diferenciais. O próprio
primeiro exemplo no site do rsync
mostra um script em que um backup completo é executado a cada sete dias e, em seguida, é feito backup das alterações nesses arquivos em diretórios separados diariamente. O problema com esse método é que, para recuperar seus arquivos, você deve recuperá-los efetivamente sete vezes diferentes. Além disso, a maioria dos geeks executa seus backups várias vezes ao dia, então você poderia facilmente ter mais de 20 diretórios de backup diferentes a qualquer momento. Não apenas recuperar seus arquivos agora é uma dor, mas até mesmo olhar seus dados de backup pode ser extremamente demorado - você teria que saber a última vez que um arquivo foi alterado para encontrar sua cópia de backup mais recente. Além de tudo isso, é ineficiente executar apenas backups incrementais semanais (ou até com menos frequência em alguns casos).
Backups instantâneos para o resgate! Os backups instantâneos nada mais são do que backups incrementais, mas utilizam hardlinks para reter a estrutura de arquivos da fonte original. Isso pode ser difícil de entender no início, então vamos dar uma olhada em um exemplo.
Finja que temos um script de backup em execução que faz o backup automático de nossos dados a cada duas horas. Sempre que o rsync faz isso, ele nomeia cada backup no formato: Backup-month-day-year-time.
Portanto, no final de um dia normal, teríamos uma lista de pastas em nosso diretório de destino como esta:
Ao percorrer qualquer um desses diretórios, você verá todos os arquivos do diretório de origem exatamente como estavam naquele momento. Ainda assim, não haveria duplicatas em quaisquer dois diretórios. O rsync consegue isso com o uso de hardlinking por meio do
--link-dest = DIR
argumento.
Claro, para ter esses nomes de diretório bem e bem datados, vamos ter que reforçar nosso script rsync um pouco. Vamos dar uma olhada no que seria necessário para realizar uma solução de backup como esta e, em seguida, explicaremos o script em mais detalhes:
#! / Bin / Bash
#copy old time.txt para time2.txt
sim | cp ~ / backup / time.txt ~ / backup / time2.txt
#overwrite arquivo time.txt antigo com hora nova
echo `date +”% F-% I% p ”`> ~ / backup / time.txt
#faça o arquivo de log
echo “”> ~ / backup / rsync-`date + ”% F-% I% p” `.log
comando #rsync
rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r --delete --stats --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 / `date +”% F-% I% p ”` /
# não se esqueça de scp o arquivo de log e colocá-lo com o 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
Esse seria um script rsync típico de instantâneo. Caso tenhamos perdido você em algum lugar, vamos dissecar pedaço por pedaço:
A primeira linha do nosso script copia o conteúdo de time.txt para time2.txt. O tubo sim é para confirmar que queremos sobrescrever o arquivo. Em seguida, pegamos a hora atual e a colocamos em time.txt. Esses arquivos serão úteis mais tarde.
A próxima linha cria o arquivo de log rsync, nomeando-o rsync-date.log (onde a data é a data e hora reais).
Agora, o comando rsync complexo sobre o qual vimos avisando:
-avzhPR, -e, --delete, --stats, --log-file, --exclude-from, --link-dest
- Apenas os interruptores de que falamos anteriormente; role para cima se precisar de uma atualização.
--- ch também é d = zu = rwx, D go = rx, fu = rw, F go = r
- Essas são as permissões para o diretório de destino. Como estamos criando esse diretório no meio de nosso script rsync, precisamos especificar as permissões para que nosso usuário possa gravar arquivos nele.
O uso de comandos date e cat
Vamos revisar cada uso dos comandos date e cat dentro do comando rsync, na ordem em que ocorrem. Observação: estamos cientes de que existem outras maneiras de realizar essa funcionalidade, especialmente com o uso de variáveis de declaração, mas para os fins deste guia, decidimos usar este método.
O arquivo de registro é especificado como:
~ / backup / rsync-`date + ”% F-% I% p” `.log
Alternativamente, poderíamos ter especificado como:
~ / backup / rsync-`cat ~ / backup / time.txt`.log
De qualquer maneira, o
--arquivo de log
O comando deve ser capaz de localizar o arquivo de log datado criado anteriormente e gravar nele.
O arquivo de destino do link é especificado como:
--link-dest = / home / geek2 / files / `cat ~ / backup / time2.txt`
Isso significa que o
--link-dest
comando recebe o diretório do backup anterior. Se estivermos executando backups a cada duas horas e forem 16h00 no momento em que executamos este script, então o
--link-dest
O comando procura o diretório criado às 14:00 e transfere apenas os dados que foram alterados desde então (se houver).
Para reiterar, é por isso que time.txt é copiado para time2.txt no início do script, então o
--link-dest
comando pode fazer referência a 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 tem um título com a data e hora atuais.
Por fim, garantimos 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
Usamos uma cópia segura na porta 12345 para pegar o log rsync e colocá-lo no diretório apropriado. Para selecionar o arquivo de log correto e garantir que ele acabe no lugar certo, o arquivo time.txt deve ser referenciado por meio do comando cat. Se você está se perguntando por que decidimos usar cat time.txt em vez de apenas usar o comando date, é porque muito tempo pode ter transcorrido enquanto o comando rsync estava em execução, então para ter certeza de que temos o tempo certo, nós apenas cat o documento de texto que criamos anteriormente.
Automação
Usar Cron no Linux ou Agendador de tarefas no Windows para automatizar seu script rsync. Uma coisa com a qual você deve ter cuidado é certificar-se de encerrar todos os processos rsync em execução antes de continuar um novo. O Agendador de tarefas parece fechar todas as instâncias já em execução automaticamente, mas para Linux você precisa ser um pouco mais criativo.
A maioria das distribuições do Linux pode usar o comando pkill, portanto, certifique-se de adicionar o seguinte ao início do seu script rsync:
pkill -9 rsync
Encriptação
Não, ainda não terminamos. Finalmente, temos uma solução de backup fantástica (e gratuita!) Instalada, mas todos os nossos arquivos ainda estão sujeitos a roubo. Com sorte, 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 seja esse lugar distante, roubo e hacking sempre podem ser problemas.
Em nossos exemplos, encapsulamos todo o tráfego rsync por meio de SSH, o que significa que todos os nossos arquivos são criptografados durante o trânsito para seu destino. No entanto, precisamos ter certeza de que o destino é tão seguro. Lembre-se de que o rsync criptografa apenas seus dados à medida que são transferidos, mas os arquivos ficam totalmente abertos quando chegam ao destino.
Um dos melhores recursos do rsync é que ele apenas transfere as alterações em cada arquivo. Se você tiver todos os seus arquivos criptografados e fizer uma pequena alteração, o arquivo inteiro terá que ser retransmitido como resultado da criptografia que randomiza completamente todos os dados após qualquer alteração.
Por esse motivo, é melhor / mais fácil usar algum tipo de criptografia de disco, como BitLocker para Windows ou dm-crypt para Linux. Dessa forma, seus dados ficam protegidos em caso de roubo, mas os arquivos podem ser transferidos com rsync e sua criptografia não prejudicará seu desempenho. Existem outras opções disponíveis que funcionam de forma semelhante ao rsync ou até mesmo implementam alguma forma dele, como o Duplicity, mas faltam alguns dos recursos que o rsync tem a oferecer.
Depois de configurar seus backups instantâneos em um local externo e criptografar seus discos rígidos de origem e destino, dê a si mesmo um tapinha nas costas por dominar o rsync e implementar a solução de backup de dados mais infalível possível.