top of page
  • Foto do escritorLucas Linux

Sincronização de Arquivos com RSYNC - Backup

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

Comments


bottom of page