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.