# rsync (Remote Sync)

## Introdução

rsync é uma ferramenta de sincronização de arquivos rápida e versátil, amplamente utilizada em sistemas Unix e Linux. Ela é projetada para transferir e sincronizar arquivos eficientemente entre sistemas locais ou remotos, minimizando a quantidade de dados transferidos.

> [!NOTA] Eficiência do rsync
>  rsync é conhecido por sua eficiência, transferindo apenas as diferenças entre os arquivos de origem e destino, economizando largura de banda e tempo.

## Características Principais

- Sincronização eficiente de arquivos
- Suporte a transferências locais e remotas
- Preservação de permissões, timestamps e outros atributos
- Compressão durante a transferência
- Modo espelho para criar cópias exatas de diretórios

## Sintaxe Básica

```bash
rsync [OPÇÕES] ORIGEM DESTINO
```

## Opções Comuns

|OPÇÃO|DESCRIÇÃO|
|---|---|
|-a|Modo arquivo (equivalente a -rlptgoD)|
|-v|Modo verboso|
|-z|Compressão durante transferência|
|-h|Saída em formato legível para humanos|
|–delete|Remove arquivos no destino que não existem na origem|
|-n|Execução em modo de teste (dry-run)|

## Exemplos de Uso Básico

1. Sincronizar diretórios locais:
    
```bash
rsync -avh /origem/ /destino/
```
    
2. Sincronizar com servidor remoto:
    
```bash
rsync -avz /origem/ usuario@servidor:/destino/
```
    
3. Sincronizar do servidor remoto para local:
    
```bash
rsync -avz usuario@servidor:/origem/ /destino/
```
    

## Casos de Uso

1. **Backup Incremental**
    
    - Criar backups eficientes que atualizam apenas as mudanças
2. **Sincronização de Sites**
    
    - Manter sites espelhados atualizados
3. **Migração de Dados**
    
    - Transferir grandes quantidades de dados entre servidores
4. **Distribuição de Atualizações**
    
    - Distribuir atualizações de software para múltiplos servidores

## Fluxo de Trabalho Típico

```mermaid
graph TD
    A[Iniciar rsync] --> B{Verificar Arquivos}
    B --> |Arquivo Novo/Modificado| C[Transferir Arquivo]
    B --> |Arquivo Não Modificado| D[Pular Arquivo]
    C --> E{Mais Arquivos?}
    D --> E
    E --> |Sim| B
    E --> |Não| F[Finalizar Sincronização]
```

## Configuração Avançada

### Usando SSH com Porta Personalizada

```bash
rsync -avz -e "ssh -p 2222" /origem/ usuario@servidor:/destino/
```

### Excluindo Arquivos/Diretórios

```bash
rsync -avz --exclude='*.tmp' --exclude='temp/' /origem/ /destino/
```

### Limitando Uso de Banda

```bash
rsync -avz --bwlimit=1000 /origem/ /destino/
```

## Automação e Scripts

Exemplo de script de backup:

```bash
#!/bin/bash
SOURCE="/home/usuario/"
DESTINATION="/backup/"
LOG="/var/log/backup.log"

rsync -avz --delete $SOURCE $DESTINATION >> $LOG 2>&1
```

## Monitoramento e Logs

- Use a opção `-v` ou `-vv` para saída detalhada
- Redirecione a saída para um arquivo de log para análise posterior
- Considere ferramentas como `logwatch` para monitorar logs de rsync

## Otimização de Desempenho

1. Use `-z` para compressão em redes lentas
2. Utilize `-W` para transferências em redes rápidas
3. Ajuste `--bwlimit` para não sobrecarregar a rede
4. Use `--partial` para retomar transferências interrompidas

## Troubleshooting Comum

1. **Problemas de Permissão**: Verifique permissões de arquivos e diretórios
2. **Erros de SSH**: Confirme configurações de SSH e firewall
3. **Sincronização Incompleta**: Use `--stats` para ver detalhes da transferência

## Considerações de Segurança

1. Use SSH para transferências seguras
2. Evite usar senhas em linha de comando; use chaves SSH
3. Tenha cuidado com `--delete` para evitar perda acidental de dados
4. Verifique cuidadosamente scripts antes de automatizar

## Melhores Práticas

1. Sempre teste com `-n` (dry-run) antes de executar sincronizações importantes
2. Use `--backup` e `--backup-dir` para manter versões anteriores
3. Documente suas configurações e comandos rsync
4. Implemente verificações de integridade após transferências importantes

## Alternativas e Complementos

- `scp`: Simples, mas menos eficiente para sincronizações frequentes
- `syncthing`: Sincronização contínua entre múltiplos dispositivos
- `rclone`: Suporte a serviços de nuvem e criptografia

## Considerações Finais

rsync é uma ferramenta poderosa e flexível para sincronização e backup de arquivos. Sua eficiência em transferir apenas as diferenças entre arquivos a torna ideal para backups incrementais e sincronizações frequentes. Embora possa ter uma curva de aprendizado inicial devido às suas muitas opções, o domínio do rsync pode significativamente melhorar a eficiência de operações de transferência de arquivos e backups em ambientes Unix/Linux.

## Etiquetas

#rsync #FileSync #Backup #DataTransfer #LinuxTools

## Leia Também

- [[sftp (ssh file transfer protocol)|SFTP (SSH File Transfer Protocol)]]
- [[pares de chaves ssh|Pares de Chaves SSH]]
- [[firewall iptables|Firewall iptables]]
- [[firewall nftables|Firewall nftables]]