SincronizaĆ§Ć£o de Arquivos com RSYNC - Backup
- Lucas Linux
- 1 de fev. de 2020
- 6 min de leitura
Atualizado: 23 de nov. de 2021
O RSYNC (Remote Sync) Ć© um utilitĆ”rio para realizar cĆ³pias e sincronismo de arquivos (ou diretĆ³rios) localmente ou remotamente. Uma forma simples de fazer backups completos de grandes quantidades de arquivos, ou mesmo partiƧƵes inteiras, mantendo uma Ćŗnica cĆ³pia atualizada de tudo em um HD externo ou num servidor remoto.
O rSync estĆ” disponĆvel para todas as principais distribuiƧƵes GNU/Linux, como Debian, Ubuntu e CentOS.

O que o rSync faz?
O rSync sincroniza arquivos e diretĆ³rios localmente ou remotamente, fazendo uma cĆ³pia exata dos arquivos.
Ele permite sincronizar o conteĆŗdo de duas pastas, transferindo apenas as modificaƧƵes. Ele nĆ£o trabalha apenas comparando arquivo por arquivo, mas tambĆ©m comparando o conteĆŗdo de cada um.
Se apenas uma pequena parte do arquivo foi alterada, o rSync transferirĆ” apenas ela, sem copiar novamente todo o arquivo.
O comando rsync possui uma grande vantagem, como exemplo o uso do rsync com o parĆ¢metro -u, ele copiarĆ” apenas o que mudou na Ć”rvore de diretĆ³rios. E de um arquivo modificado, ele transferirĆ” apenas os blocos novos ou modificados.
Algumas vantagens e caracterĆsticas do comando rsync
Ć eficiente copiar e sincronizar arquivos para ou a partir de um computador remoto.
Suporta cĆ³pia de links, propriedades de arquivos como usuĆ”rio, grupos e permissƵes.
Ć mais rĆ”pido do que o scp ( Secure Copy ), porque rsync usa protocolo de atualizaĆ§Ć£o remota que permite transferir apenas as diferenƧas entre dois conjuntos de arquivos. Na primeira vez, ele copia todo o conteĆŗdo de um arquivo ou um diretĆ³rio de origem para o destino, mas a partir da prĆ³xima vez, ele copia apenas os blocos alterados e bytes para o destino.
Rsync consome menos banda , uma vez que usa o mĆ©todo de compressĆ£o e descompressĆ£o durante o envio e recebimento de dados em ambas as extremidades.
VocĆŖ precisa APENAS entender a sintaxe do comando Rsync
A sintaxe bƔsica do comando rsync
rsync opƧƵes origem destino
Algumas opƧƵes do comandos rsync
-C, ignora arquivos CVS;
-r, recursivo;
-a, modo arquivo;
-z, comprime durante transferĆŖncia;
-p, preserva as permissƵes;
-b, faz backup
-u, pula arquivos recentes;
-d, transfere diretĆ³rios sem seu conteĆŗdo, nĆ£o recursivo;
-l, cĆ³pia symlinks como symlinks;
-L, transforma symlink em sua referĆŖncia, arquivo ou diretĆ³rio;
-X, preserva os atributos estendidos;
-t, preserva a data de modificaĆ§Ć£o;
-v, modo verboso
-h, nĆŗmeros representados em formato legĆvel por humanos
--progress, Mostra o progresso da cĆ³pia
--include, Permite especificar arquivos ou diretĆ³rios
--delete, Exclui um arquivo ou diretĆ³rio no destino caso ele nĆ£o exista na origem
--exclude=PATTERN - exclui o arquivo que coincide com o PATTERN;
āremove-source-files, Exclui (apaga) os arquivos no diretĆ³rio de origem apĆ³s o tĆ©rmino
--max-size=TAMk|M|G, Permite especificar o tamanho TAM mĆ”ximo dos arquivos transferidos. Por exemplo, āmax-size=50k significa que somente serĆ£o copiados arquivos com no mĆ”ximo 50kB.
--bwlimit=LIMITE, Permite especificar um LIMITE de largura de banda em kbps ao transferir dados de uma mĆ”quina para outra, de modo a nĆ£o impactar a performance da rede.
INSTALAĆĆO
Como instalar o rsync no seu computador com Linux
yum install rsync (baseadas em Red Hat)
apt-get install rsync (baseadas em Debian)
ALGUNS EXEMPLOS DO COMANDO
1. Como copiar / sincronizar arquivo e diretĆ³rio em um computador local com Rsync
Este comando irĆ” sincronizar um Ćŗnico arquivo em uma mĆ”quina local. Aqui neste exemplo, o arquivo planilha.xls estĆ” sendo copiado / sincronizado para o diretĆ³rio /tmp/backups
# rsync -zvh planilha.xls /tmp/backups/
created directory /tmp/backups
planilha.xls
sent 14.71M bytes received 31 bytes 3.27M bytes/sec
total size is 16.18M speedup is 1.10
Copiar / sincronizar um diretĆ³rio no computador local
O comando abaixo irĆ” transferir ou sincronizar todos os arquivos de um diretĆ³rio para outro diretĆ³rio na mesma mĆ”quina.
Aqui neste exemplo, /var/apt/apt/archives contƩm alguns arquivos de pacotes .deb
# rsync -avzh /var/apt/apt/archives /tmp/backups/
sending incremental file list
/var/apt/apt/archives
sent 4.99M bytes received 92 bytes 3.33M bytes/sec
total size is 4.99M speedup is 1.00
2. Copiar / sincronizar arquivos e diretĆ³rio com um computador remoto
Este comando irĆ” sincronizar um diretĆ³rio a partir de uma mĆ”quina local para uma mĆ”quina remota.
Por exemplo : Existe uma pasta no seu computador local o mesmo do exemplo anterior ā/var/apt/apt/archivesā, que contĆ©m alguns pacotes .deb, se quiser que o conteĆŗdo desse diretĆ³rio local seja enviado para um servidor remoto, vocĆŖ pode usar comando a seguir.
# rsync -avz /var/apt/apt/archives root@10.1.1.1:/tmp/
root@10.1.1.1's password:
sending incremental file list
...
sent 4993369 bytes received 91 bytes 399476.80 bytes/sec
total size is 4991313 speedup is 1.00
Copiar / sincronizar um diretĆ³rio remoto para um computador local
Este comando irĆ” ajudĆ”-lo a sincronizar um diretĆ³rio remoto para um diretĆ³rio local. Aqui neste exemplo, um diretĆ³rio:
/home/e-tinet/textos que estĆ” em um servidor remoto estĆ” sendo copiado em seu computador local em /tmp/textos.
# rsync -avzh root@10.1.1.1:/home/e-tinet/textos /tmp/textos
root@10.1.1.1's password: receiving incremental file list created directory /tmp/textos .... sent 91 bytes received 4.99M bytes 322.16K bytes/sec total size is 4.99M speedup is 1.00
3. Como usar o Rsync rodando com o SSH
Com rsync, podemos usar o SSH ( Secure Shell ) para transferĆŖncia de dados, usando SSH durante a transferĆŖncia de nossos dados eles estarĆ£o seguros.
AlĆ©m disso, quando usamos o rsync precisamos informar o usuĆ”rio / senha, portanto, usando SSH seu login e senha serĆ£o enviados de forma criptografada.
Copiar um arquivo de um servidor remoto para um servidor local com SSH
Para especificar um protocolo com rsync usamos o parametro ā -e ā. Aqui neste exemplo, iremos utilizar ā ssh .
# rsync -avzhe ssh root@10.1.1.1:/root/install.log /tmp/
root@10.1.1.1's password:
receiving incremental file list
install.log
sent 30 bytes received 8.12K bytes 1.48K bytes/sec
total size is 30.74K speedup is 3.77
Copiar um arquivo de um servidor local para um servidor remoto com SSH
# rsync -avzhe ssh planilha.xls root@10.1.1.1:/backups/
root@10.1.1.1's password:
sending incremental file list
planilha.xls
sent 14.71M bytes received 31 bytes 1.28M bytes/sec
total size is 16.18M speedup is 1.10
4. Mostrar progresso na transferĆŖncia de dados com rsync
Para mostrar o progresso durante a transferĆŖncia de dados de uma mĆ”quina para outra mĆ”quina, podemos usar o āāprogressā.
# rsync -avzhe ssh --progress /home/arquivos root@10.1.1.1:/root/arquivos
root@10.1.1.1's password:
sending incremental file list
created directory /root/arquivos
/home/arquivos/texto.txt
1.02M 100% 2.72MB/s 0:00:00 (xfer#1, to-check=3/5)
...
sent 4.99M bytes received 92 bytes 475.56K bytes/sec
total size is 4.99M speedup is 1.00
5. Usar a opĆ§Ć£o āinclude e āexclude
Estas duas opƧƵes permite incluir e excluir arquivos de um copias / sincronizaĆ§Ć£o.
Aqui neste exemplo, o comando rsync irĆ” incluir arquivos e diretĆ³rios apenas que comeƧam com ā M ā e excluir todos os outros arquivos e diretĆ³rios.
OBS.: Excluir da cĆ³pia nĆ£o excluir o arquivo do sistema de arquivos.
# rsync -avze ssh --include 'm*' --exclude '*' root@10.1.1.2:/var/log/ /root/log
root@10.1.1.2's password:
receiving incremental file list
created directory /var/log
./
Requirename
Requireversion
sent 67 bytes received 167289 bytes 7438.04 bytes/sec
total size is 434176 speedup is 2.59
6. Uso de opĆ§Ć£o ādelete
Se um arquivo ou pasta nĆ£o existe na origem, mas jĆ” existe no destino, vocĆŖ pode apagar o arquivo / diretĆ³rio existente.
Podemos usar ā ādeleteā para apagar os arquivos que nĆ£o existem no diretĆ³rio de origem.
Se a origem e destino estiver em sincronia, vamos fazer um teste. Crie um arquivo teste.txt no destino.
# touch teste.txt
# rsync -avz --delete root@10.1.1.1:/home/pedro
receiving file list ... done
deleting teste.txt
./
sent 26 bytes received 390 bytes 48.94 bytes/sec
total size is 45305958 speedup is 108908.55
Uma pequena dica adicional: Tome cuidado com essa opĆ§Ć£o.
7. Defina o tamanho mĆ”ximo de arquivos que serĆ£o transferidos
VocĆŖ pode especificar o parĆ¢metro āāmax-sizeā para definir o tamanho mĆ”ximo do arquivo.
Exemplo: Um arquivo de 200k , entĆ£o este comando irĆ” transferir apenas os arquivos que sĆ£o iguais ou menores que 200k .
# rsync -avzhe ssh --max-size='200k' /var/log/ root@10.1.1.2:/root/log
root@10.1.1.2's password:
sending incremental file list
created directory /root/log
...
sent 189.79K bytes received 224 bytes 13.10K bytes/sec
total size is 38.08M speedup is 200.43
8. Apagar automaticamente arquivos da origem apĆ³s a transferĆŖncia bem sucedida
Agora, vamos imaginar que vocĆŖ tenha um servidor web principal e um servidor de backup, Ć© feito um backup diĆ”rio para esse servidor de backup, agora vocĆŖ nĆ£o quer manter essa cĆ³pia local do backup no seu servidor web.
EntĆ£o, vocĆŖ vai esperar atĆ© que a transferĆŖncia seja concluĆda e, em seguida, apagar aqueles arquivos de backup local manualmente?
Claro que nĆ£o. Esta exclusĆ£o automĆ”tica pode ser feito usando a opĆ§Ć£o ā ā-remove-source-filesā .
Seria praticamente um comando āmvā, mas ele pode ser atĆ© executado remotamente.
# rsync --remove-source-files -zvh img.jpg /tmp/backups/img.jpg
sent 14.71M bytes received 31 bytes 4.20M bytes/sec
total size is 16.18M speedup is 1.10
9. Usar o parĆ¢metro ādry-run com o Rsync
Se vocĆŖ estĆ” aprendendo a trabalhar com rsync e nĆ£o sabe exatamente um parĆ¢metro ou outro vai fazer, tome muito cuidado pois o Rsync poderĆ” realmente estragar sua pasta de destino, e infelizmente o Ctrl + Z nĆ£o funciona nesse caso.
Usando esse parĆ¢metro o Rsync nĆ£o vai fazer nenhuma alteraĆ§Ć£o no destino, apenas vai mostrar o resultado do comando normalmente, assim fica fĆ”cil vocĆŖ encontrar algum erro e nĆ£o correr o risco de fazer uma cĆ³pia desastrosa.
# rsync --dry-run --remove-source-files -zvh texto.txt /tmp/backups/texto.tar
sent 35 bytes received 15 bytes 100.00 bytes/sec
total size is 16.18M speedup is 323584.00 (DRY RUN)
10. Definir Limite de banda de TransferĆŖncia de Arquivos
VocĆŖ pode configurar o limite de banda durante a transferĆŖncia dos arquivos de uma mĆ”quina para outra usando o ā ābwlimitā.
# rsync --bwlimit=100 -avzhe ssh /var/log/ root@10.1.1.2:/root/log/
root@10.1.1.2's password:
sending incremental file list
sent 324 bytes received 12 bytes 61.09 bytes/sec
total size is 38.08M speedup is 113347.05
EntĆ£o Ć© isso, tem muitas opƧƵes o Rsync Ć© uma ferramenta muito utilizada. Hoje eu utilizo muito para fazer backup e sincronizaĆ§Ć£o de arquivos, tanto local como remoto.
Existe ainda a opĆ§Ć£o de configurar o Rsync como um serviƧo, mas isso Ć© assunto para outro artigo.