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 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.
[root@pedro]# 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 .
root@e-tiner]# 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
[root@pedro]# 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’.
[root@e-tinet# 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.
[root@e-tinet]# 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.
[root@e-tinet]# touch teste.txt
[root@e-tinet]# rsync -avz --delete root@10.1.1.1:/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/ 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.
[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/ 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.
Fonte:
https://e-tinet.com/linux/sincronizacao-de-arquivos-no-linux-rsync/