top of page

SincronizaĆ§Ć£o de Arquivos com RSYNC - Backup

  • Foto do escritor: Lucas Linux
    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.



NĆ£o esqueƧa de seguir o Canal do Youtube e o Facebook LUCAS LINUX

  • Facebook - Lucas-Linux
  • Canal - Lucas-Linux
bottom of page