10 exemplos do comando rsync para backup e sincronismo de arquivos no Linux

10 exemplos do comando rsync para backup e sincronismo de arquivos no Linux

rsync é uma ferramenta de cópia e sincronização de arquivos e diretórios muito versátil e simples de utilizar. Com o rsync é possível copiar arquivos localmente (no mesmo sistema de arquivos), ou para um outro host na rede utilizando qualquer shell remoto, ou ainda por meio de um daemon remoto do rsync.

O rsync utiliza um algoritmo de transferência de dados que permite enviar apenas as diferenças entre os arquivos enviados e os existentes no destino, desta forma diminuindo a quantidade de dados enviados, e aumentando a performance da transferência. Por isso, é largamente utilizado como ferramenta de backup de dados, assim como comando de cópia normal do dia-a-dia.

O rsync também possui suporte à cópia de links, dispositivos, proprietários, grupos e permissões, além de não necessitar de privilégios de superusuário (root) para realizar seu trabalho.

Para que os dados sejam transferidos com segurança, o rsync assume que um servidor SSH esteja em execução ao menos em um dos hosts onde ocorrerá a transferência de arquivos.

Instalação do rsync

Caso o rsync não esteja instalado nos hosts, instale-o com os comandos a seguir:

Sistemas baseados em Red Hat:

# yum install rsync

Sistemas baseados em Debian:

# apt-get install rsync

Instalando a partir de código-fonte

Caso queria utilizar a versão mais recente do rsync (quando este tutorial foi criado, versão 3.1.2), baixe-a com o comando a seguir:

wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz

Após baixar o pacote, descompacte-o com:

tar -xvzf rsync-3.1.2.tar.gz

Entre no diretório criado:

cd rsync-1.2

Execute o script configure:

./configure

(caso o script configure retorne o erro “no acceptable cc found in $path“, instale o pacote build-essential com apt-get install build-essential, pois um compilador C adequado não foi encontrado no sistema).

Após executar o script configure, execute o comando make:

make

E então, execute make-install:

make-install

Sintaxe básica do rsync

O utilitário rsync pode ser utilizado de várias formas diferentes, como podemos ver nas sintaxes listada a seguir:

rsync [opções] origem destino (local)
rsync [opções] origem usuário@host:destino (modo PUSH, via shell remoto)
rsync [opções] usuário@host:origem destino (modo PULL, via shell remoto)

Opções do rsyn

-a
Modo archive (arquivamento). Copia os arquivos e diretórios recursivamente (como -r) e preserva links simbólicos, permissões de arquivos, propriedades de usuário e grupo (ownership) e timestamps.

-h
Números são representados em formato legível por humanos

-r
Copia dados recursivamente, sem preservar timestamps e permissões ao transferir os dados

-z
Comprimir os dados dos arquivos antes de enviá-los

–progress
Mostrar o progresso da cópia de arquivos ao transferir os dados

-e
Especificar o shell remoto a ser usado (rsh, ssh)

-c, –checksum
Calcula os checksums dos arquivos para verificar se eles são iguais ao transferi-los. Utilizada para verificar a integridade dos dados copiados.

–exclude
Permite especificar arquivos ou diretórios que não devem ser copiados para o destino

–include
Permite especificar arquivos ou diretórios que devem ser copiados para o destino

–delete
Exclui um arquivo ou diretório no destino caso ele não exista na origem

–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.

-b, –backup
Não sobrescreve arquivos que já existam no destino da transferência, mas os renomeia adicionando um sufixo ~ aos seus nomes, antes de executar a transferência de novos arquivos.

-u, –update
Não sobrescreve nenhum arquivo no destino da transferência que possua uma data posterior (mais recente) à data do arquivo correspondente, na origem.

–remove-source-files
Exclui (apaga) os arquivos no diretório de origem após o término da transferência de dados.

-n
Modo “dry run” – executa uma tentativa de copiar dados sem realmente copiar qualquer arquivo.

-v
Modo verboso, que mostra detalhes sobre a transferência de arquivos.

Exemplos de uso do comando

1 – Copiar ou sincronizar arquivos em uma máquina localmente. Vamos copiar o arquivo de nome /etc/passwd para o diretório /Backup, comprimindo dados:

$ sudo rsync -zvh /etc/passwd /Backup/

Se o diretório de destino não existir, será criado pelo próprio rsync. A compressão de dados, na verdade, não é necessária quando copiamos arquivos dentro de um mesmo sistema de arquivos, por conta da performance da transferência dos dados.

2 – Copiar ou sincronizar um diretório na máquina local. Vamos copiar o diretório /home/fabio completo para o diretório /Backup/, preservando os atributos e permissões dos arquivos:

$ sudo rsync -avh /home/fabio /Backup/

Se for acrescentada uma barra ao diretório de origem (/home/fabio/), seu conteúdo será copiado para o destino sem no entanto criar o diretório de nome fabio.

Veja o resultado da cópia executando o comando tree:

$ tree /Backup

3 – Copiar ou sincronizar arquivos e diretórios para ou de um servidor na rede. Vamos copiar/sincronizar um diretório da máquina local, como o meu home (/home/fabio) para um servidor na rede, que possui um diretório /home/fabio/Backup e cujo IP é 192.168.1.104. O usuário no host remoto é fabio:

$ rsync -avz /home/fabio fabio@192.168.1.104:/home/fabio/Backup/

Note que será pedida a senha do usuário no servidor remoto, no caso o fabio.

Se você precisar efetuar o login remoto como usuário root, deve habilitar essa opção no arquivo de configuração do ssh no servidor, que é o /etc/ssh/sshd_config. Abra esse arquivo com seu editor de textos favorito, com privilégios de administrador, e altere a seguinte linha:

De:

PermitRootLogin without-password

Para:

PermitRootLogin yes

Salve e saia do arquivo, e então reinicie o serviço do ssh:

# service ssh restart

Agora você poderá efetuar a cópia via rsync sobre ssh usando a conta de root.

4 – Vamos fazer o contrário agora. Iremos copiar/sincronizar o diretório remoto /home/fabio/Backup no servidor 192.168.1.104 para a máquina local, no diretório /home/fabio/Documentos:

rsync -avzh fabio@192.168.1.104:/home/fabio/Backup /home/fabio/Documentos/

Também será pedida a senha do usuário remoto (fabio no exemplo).

5 – Vamos efetuar a cópia de todos os arquivos e diretórios cujos nomes comecem com a letra ‘h’ do diretório local /etc para o diretório remoto /home/fabio/Backup no servidor 192.168.1.108, excluindo (não copiando) todo os demais arquivos e diretórios de /etc/:

rsync -avz --include 'h*' --exclude '*' /etc/ fabio@192.168.1.104:~/Backup

–exclude ‘*’  indica que vamos excluir da cópia todos os arquivos e diretórios, exceto os indicados pelo parâmetro –include.

6 -Vamos fazer o backup do diretório /home/fabio/ para o diretório /home/fabio/Backup no servidor de rede, cujo IP é 192.168.1.104. Como esse backup já foi realizado anteriormente, se algum arquivo no diretório local tiver sido excluído, ao realizar a transferência dos arquivos tal arquivo também será excluído na pasta do servidor, automaticamente (sincronismo).

rsync -av --delete /home/fabio/ fabio@192.168.1.104:/home/fabio/Backup

7 -Idem anterior, porém copiando apenas os arquivos que tenham 10kB ou menos de tamanho. Não serão copiados diretórios, e vamos assumir que o diretório corrente é o diretório de origem dos arquivos.

rsync -hv --max-size='10K' ./* /home/fabio/meubackup

8 – Efetuar backup do diretório /etc local no diretório /home/fabio/Backup do srvidor remoto, mostrando o progresso da cópia dos arquivos:

rsync -avh --progress /etc/ fabio@192.168.1.104:/home/fabio/Backup

9 – Vamos copiar o conteúdo do diretório da rede /home/fabio/Backup para o diretório local /home/fabio/Documentos, apagando os arquivos na origem (remota) após a transferência dos dados:

rsync -avh --remove-source-files fabio@192.168.1.104:/home/fabio/Backup/ /home/fabio/Documentos/

10 – Vamos copiar de volta para o servidor o conteúdo do diretório local /home/fabio/Documentos, porém sem no entanto executar a transferência dos arquivos e diretórios pra valer. Usaremos a opção de dry run (-n) para que o rsync teste essa transferência e retorne o resultado que ocorreria se ela fosse realmente executada:

rsync -avhn /home/fabio/Documentos fabio@192.168.1.104:/home/fabio/Backup/

Omitindo a opção -n, a cópia dos arquivos será efetivada:

rsync -avh /home/fabio/Documentos fabio@192.168.1.104:/home/fabio/Backup/

Bônus: 11 – Verificando as diferenças entre origem e destino

Vamos executar novamente o sincronismo de arquivos e diretórios do diretório local para o remoto, como no exemplo #9, porém visualizando as diferenças existentes entre os arquivos na origem e no destino dos dados (opção -i):

rsync -avhi /home/fabio/Documentos fabio@192.168.1.104:/home/fabio/Backup/

Na saída serão mostrados diversos caracteres em uma coluna à esquerda dos nomes de arquivos e diretórios. O significado desses caracteres é o seguinte:

< indica que um arquivo está sendo transferido para o host remoto (enviado).

> indica que um arquivo está sendo transferido para o host local (recebido).

f indica que se trata de um arquivo.

d indica que se trata de um diretório

c indica que está ocorrendo a criação ou alteração de um item, como a criação de um diretório

s ocorreu alteração no tamanho.

h indica que se trata de um hard link para outro item

. indica que o item não será atualizado

L indica um symlink

D indica um dispositivo

S indica arquivo especial, como um socket nomeado ou um fifo.

t existe alteração no timestamp.

o proprietário alterado

g grupo alterado.

Existem muitas outras opções do comando rsync. Para conferi-las, acesse as páginas de manual ou ajuda do utilitário com man rsync ou rsync –help

 

Sobre Fábio dos Reis (1195 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

10 Comentários em 10 exemplos do comando rsync para backup e sincronismo de arquivos no Linux

  1. Kenji Yamaguti // 17/10/2018 em 13:28 // Responder

    Olá Fábio. Sabe como fazer backup com rsync de um servidor de compartilhamento Samba em um servidor Windows ?

  2. Everardo S. Cavalcante // 12/12/2018 em 7:21 // Responder

    Olá Mr. Fábio

    Só tenho que agradecer por sua valiosa colaboração neste mundo Linux

    Todas suas aulas são de incomparável didática e esta está inconfundível!

    Obrigado []’s Everardo S. Cavalcante

  3. Lucineide // 29/01/2019 em 10:50 // Responder

    Caro Fábio
    Muito obrigada por compartilhar este teu conhecimento. Consegui fazer tudo!
    Sabe me dizer se consigo fazer um script e jogar no crontab para fazer backup de tempos em tempos somente das modificações?

  4. Fábio,
    Muito obrigado por compartilhar seu conhecimento. Mas eu gostaria de saber se é possível fazer o backup da minha máquina física para um repositório na nuvem. Se sim, você poderia explicar. Gostaria de saber também como faço para recuperar o que eu salvei.
    Pois eu estou procurando no Google, e acabo encontrando soluções pouco explicativas de serem feitas. Já que seu jeito de ensinar é mais simples e rápido.

  5. Olá fabio,

    cara com o comando:
    rsync -avz /home/fabio fabio@192.168.1.104:/home/fabio/Backup/ se caso a copia falhe, ele para da onde começou ? obrigado.

  6. Bom dia Fábio! Parabéns por compartilhar seu conhecimento conosco, admiro muito o seu trabalho e aproveitando a oportunidade gostaria de pedir sua ajuda. Não tenho muita experiência com Linux e gostaria de saber qual a syntax do rsync eu posso utilizar para para a replicação de um diretório local para um servidor remoto de sftp, pois está fervendo duplicidade nos arquivos.

  7. Fulvio Murenu // 09/04/2020 em 11:52 // Responder

    Fábio, daquilo que leio por aí, sempre seus posts são bem planejados e com farta informação. O maioria faz por aí é, copiar e colar de tutoriais ou traduções literais do inglês. Parabéns!!!

  8. Parabéns, Fábio
    Acompanho seu trabalho há muito tempo pelo youtube. Vc é muito competente.

Escreva um comentário

Seu e-mail não será divulgado


*