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.
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
- -V: verbose
- -R: cópias de dados de forma recursiva (mas não preservam timestamps e permissão durante a transferência de dados
- -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
- -Z: arquivos serão comprimidos
- -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