Sincronização de arquivos no Linux – 10 formas de usar o Rsync

JUNTE-SE A MAIS DE 110.000 PESSOAS QUE JÁ TEM UMA CÓPIA

Ubuntu: Iniciando com Linux de maneira prática e rápida

Compartilhe este post

Share on facebook
Share on linkedin
Share on twitter
Share on email

Sincronização de arquivos no Linux - 10 formas de usar o Rsync

Rsync é o comando utilizado para copiar e sincronizar arquivos e diretórios remotamente, e pode ser utilizado também em sistemas de arquivos local no Linux / Unix / Mac.

Com a ajuda do comando rsync, você pode copiar e sincronizar seus arquivos remotamente e localmente através de diretórios, em discos de  rede, realizar backups de dados e espelhamento entre dois computadores com Linux.

Eu particularmente utilizo muito o Rsync para fazer backups dos arquivos de configurações de servidores, pode ter certeza que ele já me ajudou muito. Estou escrevendo esse artigo pois essa semana o Rsync me salvou mais uma vez.

Eu estava realizando a atualização de uma aplicação feita em java / php e não fiz o backup antes de começar o procedimento de atualização, vários arquivos da atualização estavam com problema.

fazer sincronização de arquivo linux

Resultado: A aplicação parou de funcionar e graças a um backup automatizado feito com o Rsync consegui resolver o problema.

Este artigo explica 10 comandos, do básico e avançado para você sincronizar arquivos com o rsync,  transferir seus arquivos remotamente e localmente em computadores com Linux.

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.

A sintaxe básica do comando rsync

# Rsync origem destino opções

Algumas opções do comandos rsync

  1. -V: verbose
  2. -R: cópias de dados de forma recursiva (mas não preservam timestamps e permissão durante a transferência de dados
  3. -A: modo de arquivamento, o modo de arquivo permite a cópia de arquivos de forma recursiva e também preserva links simbólicos, permissões de arquivos, posses usuário e grupo e timestamps
  4. -Z: arquivos serão comprimidos
  5. -H: legíveis, saída em um formato legível para humano (esse é muito bom)

Como instalar o rsync no seu computador com Linux

# yum install rsync (para distribuições baseadas em Red Hat)
# apt-get install rsync (para distribuições baseadas em Debian, o Ubuntu por exemplo)

Não esqueça de ver o nosso Ebook Grátis sobre Ubuntu Linux, o Curso Linux Ubuntu, com ele você vai aprender muitos comando para iniciar no Ubuntu.

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 

[root@e-tient]# 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

No exemplo acima, você pode ver que, se o destino não existe o rsync irá criar um diretório automaticamente.

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

[root@e-tinet]# 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.

[root@e-tinet]$ rsync -avz /var/apt/apt/archives [email protected]:/tmp/

[email protected]'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.

 

[root@pedro]# rsync -avzh [email protected]:/home/e-tinet/textos /tmp/textos

[email protected]'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 .

 

root@e-tiner]# rsync -avzhe ssh [email protected]:/root/install.log /tmp/

[email protected]'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

[root@pedro]# rsync -avzhe ssh planilha.xls [email protected]:/backups/

[email protected]'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’.

[root@e-tinet# rsync -avzhe ssh --progress /home/arquivos [email protected]:/root/arquivos

[email protected]'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.

[root@e-tinet]# rsync -avze ssh --include 'm*' --exclude '*' [email protected]:/var/log/ /root/log

[email protected]'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.

[root@e-tinet]# touch teste.txt
[root@e-tinet]# rsync -avz --delete [email protected]:/home/pedrod .
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 .

[root@e-tinet]# rsync -avzhe ssh --max-size='200k' /var/log/ [email protected]:/root/log

[email protected]'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.

[root@e-tinet]# 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.

root@e-tinet]# 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’.

[root@e-tinet]# rsync --bwlimit=100 -avzhe ssh  /var/log/  [email protected]:/root/log/
[email protected]'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 ver o nosso Ebook Grátis sobre Ubuntu Linux, o Curso Linux Ubuntu, com ele você vai aprender muitos comando para iniciar no Ubuntu.

E você? O que achou? Já utilizou o Rsync antes? Deixe um comentário com sua experiência.

Pedro Delfino

Compartilhe este post

Share on facebook
Share on linkedin
Share on twitter
Share on email

Artigos Recentes

Aprenda a dominar o Linux de uma vez por todas

Aprenda a dominar o Linux de uma vez por todas