LINUX, TI E MUITO MAIS!
Cadastre-se agora e receba gratuitamente o ebook do Curso Linux Ubuntu, dicas imperdíveis para ter sucesso com Linux
Insira seu email no campo ao lado para receber AGORA o Ebook!

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

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.

APRENDA A DOMINAR O LINUX

Aprenda a dominar o LINUX de uma vez por todos, pegue sua cópia

  • Ferramentas para instalar softwares adicionais
  • Shell do LINUX passo a passo, e muito mais...

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 

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

Leia também ...   Servidor Linux: Vantagens que Você não Pode Ignorar

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

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

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

 

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

 

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

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

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

Leia também ...   Servidor VPS Linux - Tudo o que Você Precisa Saber para Iniciar

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.

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

[[email protected]]# touch teste.txt
[[email protected]]# 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 .

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

Leia também ...   Como remover pacotes (softwares) com aptitude no Ubuntu e liberar espaço do seu HD

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.

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

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

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

Sobre pedrodelfino

Trabalha com tecnologia da informação, usando Linux a mais de 13 anos. Autor do Ebook Curso Linux Ubuntu.

  • Alexandre Gomes

    Parabéns pelo artigo, simples e prático.

    • pedrodelfino

      Valeu Alexandre.

      Obrigado pelo comentário.

      Aguarde as próximas atualização …

  • brando

    como faço para instalar programas tar.gz no linux elementary luna e atualizar programas pelo terminal desde já obrigado.

    • pedrodelfino

      Olá Brando …

      Se tudo for padrão

      # tar -xzvf pacote1.tar.gz ;
      # cd pacote1
      # ./configure ; make ; make install

      Mas … ( sempre tem um mas … )

      Depende do pacote e do seu ambiente …

  • Régio Pires

    Pedro,

    Parabéns!!!!! Muito bom a matéria.

    Régio Pires

    • pedrodelfino

      Valeu Régio

      Obrigado pelo comentário …

      Fique ligado em novas atualizações …

  • Marcello

    Pedro, muito bom o artigo. Obrigado por disponibilizar estas informações. Eu já tinha lido alguma coisa sobre o rsync mas não com o didatismo e simplicidade que você usou.

    • pedrodelfino

      Valeu Marcelo …

      Bacana que você gostou … espero que seja útil …

  • Alex

    Uso para sincronizar minhas máquinas na minha rede caseira. Queria saber como agendar, usando crontab, essa sincronização se toda vez terei que informar usuário e senha?

    • pedrodelfino

      Não Alex

      Pois você teria que configurar o serviço do rsync pra fazer isso.

      Nesse caso não precisa de senha.

  • Alex

    rsync é mesmo uma maravilha! Estou preparando um um script de backup que rodará como um daemon. As opções delete e recursivo serão usadas. Até aqui, de acordo com os testes os resultado me agradaram muito. Além do backup em um segundo hd interno será possível também fazê-lo em um hd externo USB. O usuário espeta o hd no computador, loga no sistema e executa um comandinho simples.

  • Olá, gostaria de saber como apagar os arquivos de “log” do sistema usando o putty.

    Obrigado.

    • pedrodelfino

      Olá …

      Todos os logs estão em /var/log

      Pode apagar com:

      # rm arquivo.log

      Até mais

  • Belo artigo, estou com um probleminha e talvez vc possa me ajudar. Uso o rsync a muito tempo e estou tendo um problema novo,é o seguinte eu faço sync de diretórios usando as opções -Cravzp, sempre funcionou, porém ao mudar de SO (antes usava UBUNTU e agora uso CENTOS) ele tem “truncado”os arquivos tipo no destino fica assim… no source pelo terminal me aparece o nome dbEleFiltrosBH_06-07-2014-20:30:01.backup (nome correto e que no destino também está correto olhando pelo terminal) no SAMBA ao tentar visualizar os arquivos eles ficam com o nome WKJHSG~G ou algo do tipo, já pegou algum caso igual? Abraço

  • Italo

    Boa tarde Pedro, como eu faria essa sincronização do linux para o windows?

  • Muito bom o artigo.

    No caso de agendamento de um servidor remoto para outro servidor remoto. Como passar a senha quando uso o comando em um cronjob por exemplo?

    [ ]’s

  • Fabiano

    Legal, Pedro! Parabéns pela matéria.
    Me surgiu uma única dúvida. Todas as opções eu percebi que é necessário digitar a senha manualmente para cópia dos arquivos. Existe alguma possibilidade de realizar essa cópia sem a necessidade de inserir a senha manualmente desde que seja criptografada?
    Por exemplo, caso eu queira criar um script com o comando rsync para realizar um backup todos os dias pela madrugada.

    Obrigado e parabéns!!!!!

  • Daniel

    Que conteúdo ótimo, cara!
    Não poderia deixar de agradecê-lo!

    Parabéns.

  • Mariana

    Ótimo artigo, parabéns! Eu tenho uma dúvida, eu gostaria de fazer backup do servidor remoto linux para um servidor remoto windows. Como seria isso? Nesse servidor windows eu tenho storage que uso para backup mesmo, mas não sei como enviar os arquivos do servidor linux para esse storage. Pode me ajudar?

    Obrigada.

    At.te.

  • Guilherme Pardi

    Gosto muito do rsync, é rápido e eficiente. Uma pena não ter uma maneira de realmente sincronizar em 2-vias ( 2 way sync ). Gostaria de ter meu NAS exatamente como um Dropbox, mas ainda não pude achar uma solução ideal para que eu tenha plena sincronização podendo alterar qualquer arquivo em qualquer lado.

    Parabéns pela artigo!

  • Paulo Nascimento

    Boa tarde Pedro.
    Preciso implementar essa ferramenta em servidores Windows ha possibilidade?
    Já utilizo o Delta Copy , mas ele apresenta erro em arquivos com nomes um pouco maior e é um pouco limitado nas opções.
    Desde ja Agradecido.
    Att.
    Paulo Nascimento.

  • Heitor Souza

    O Artigo realmente é muito bom. Mas acho que precisa corrigir as letras maiúsculas das opções do comando. Pois -R é para usar Path relativos, bem diferente de -r (Recursivo). E colocando todas essas opções em maiúsculas pode confundir os menos experientes. Do mais, parabéns pelo Artigo!

  • hercules

    Olá Pedro. Parabéns, Seu artigo é demais, adorei a forma que explica a minimas observações! mais um seguidor e compartilhador.
    estou encascado com uma coisa, meu server é mio blindadinho, fail2ban+knocking+ssh diretrivas rigorosas, não uso senhas, etc… nao faço acesso root(diretrivas negada por mim no meu ssh), nao uso senhas(rsa key), como eu faria o backup completo do meu servidor remoto para minha maquina local? completão, fullzão! para isso tenho que ter acesso root, então na maquina local nao poderia digitar as credencias de um usuario meia boca sem acesso a tudo, como eu faria? entraria no servidor e instalaria o rsync lá, usaria um su + senha para logar no rootão e faria como se o servidor fosse a local, e usaria seu passo de local para servidor remoto(que no caso seria a minha maquina local)? desculpa o rolo 🙁

  • Muito bom … quero testar essa ferramenta para fazer backups … valeu pela dica

  • fabriciosilvasantos

    Existe alguma maneira de fazer a sincronização de pastas diferentes para um mesmo DESTINO usando o SSH sem precisar digitar a senha 2 vezes ?

    Ex:

    rsync -avrh –progress –rsh=’ssh -p622′ /DIRETORIO/BACKUP_1/ [email protected]:/DIRETORIO/BACKUP_1/

    rsync -avrh –progress –rsh=’ssh -p622′ /DIRETORIO/BACKUP_2/ [email protected]:/DIRETORIO/BACKUP_2/

  • fabriciosilvasantos

    Existe alguma maneira de fazer a sincronização de pastas diferentes para um mesmo DESTINO usando o SSH sem precisar digitar a senha 2 vezes ?

    Ex:

    rsync -avrh –progress –rsh=’ssh -p622′ /DIRETORIO/BACKUP_1/ [email protected]:/DIRETORIO/BACKUP_1/

    rsync -avrh –progress –rsh=’ssh -p622′ /DIRETORIO/BACKUP_2/ [email protected]:/DIRETORIO/BACKUP_2/

  • Maxwell Quessada

    Parabéns Pedro!
    Acompanho direto suas publicações e aulas, me reciclei muito com você.
    Uma dúvida tenho 2 Ubuntu 16.10, maquinas iguais na mesma lan.

    1 Ubuntu rodando Virtualbox do server 2008 que tem um arquivo vdi com 350gb e snapshot com 43gb.

    2 Ubuntu seria para rodar outros serviços vpn, openfire e servir de backup da maquina virtual.

    Consigo fazer backup usando o rsync com a máquina virtual rodando? Existe algum problema?

    Estou fazendo testes mas gostaria de saber se o comando para realizar o backup que estou usando está correto?
    rsync -r -v –progress –delete -s /origem /destino
    a primeira copia levou mais de 10 horas.

    Depois lendo implementei o –inplace
    rsync -r -v –progress –delete –inplace -s /origem /destino
    Com isso a cópia levou em torno de 45 minutos.

    Obrigado!

Aula Online: Aprenda a Dominar o Linux De Uma Vez Por Todas

x