Já temos um post falando um pouco sobre o que é rsync, mas vamos resumir trecho abaixo. Se quiser pode visitar o post em: Linux: para que Serve e o que é o Programa Rsync?
O comando rsync está consumindo toda a minha largura de banda de um script de backup e gerando toneladas de E/S. Como coloco um limite para a velocidade de transferência de arquivos do comando rsync no Linux ou em um sistema semelhante ao Unix? Como posso impedir que meu script rsync use toda a minha largura de banda?
A opção –bwlimit=KBPS do rsync
De acordo co o manual do rsync,
A opção –bwlimit=KBPS permite especificar a taxa de transferência máxima. O valor RATE pode ser sufixado com uma string para indicar um multiplicador de tamanho e pode ser um valor fracionário (por exemplo, “–bwlimit=1.5m”). Se nenhum sufixo for especificado, o valor será considerado em unidades de 1024 bytes. Por razões de compatibilidade com versões anteriores, o limite de taxa será arredondado para a unidade KiB mais próxima, portanto, nenhuma taxa menor que 1024 bytes por segundo é possível. O Rsync grava dados no soquete em blocos, e essa opção limita o tamanho dos blocos que o rsync grava e tenta manter a taxa média de transferência no limite solicitado. Alguns “burstiness” podem ser vistos onde o rsync grava um bloco de dados e depois dorme para trazer a taxa média em conformidade.
Como Colocar Limite de Banda no Rsync?
Sabendo que o rsync envia conteúdo de uma pasta para outra, seu uso é mais ou menos assim
rsync nome_pasta_a_ser_copiada nome_pasta_a_receber_dados
Lembrando que rsync pode enviar dados entre pastas que estão em diferentes computadores, seja pela rede local(LAN) ou na internet(WAN).
Você pode especificar a taxa de transferência máxima para os dados enviados pelo soquete ou rede digitando a opção –bwlimit=RATE no comando rsync
Exemplo, para definir o limite de largura de banda do rsync para 5000 KBytes por segundo:
rsync --bwlimit=5000 pastaOrigem pastaDestino
Outros exemplos,
Se você quiser limitar a transferência para cerca de 10.000 KB/s (9,7 MB/s), digite:
rsync –bwlimit=10000 –avz -e 'ssh' /backup/ root@192.168.0.51:/backup/
definir o limite de E/S em 1000 KBytes por segundo:
rsync --bwlimit=1000 /caminho/para/pastaOrigem /caminho/para/pastaDestino
rsync --bwlimit=1000 /var/www/html/ backups@server1:~/meusite.backups/
Usando Sufixos
Um valor numérico pode ser sufixado com uma string para indicar as unidades numéricas ou deixado sem qualificação para especificar bytes. Sinta-se livre para use um valor fracionário junto com as unidades, como –bwlimit=1,5m.
Veja mais o que o manual do rsync fala:
Esta opção é uma REGRA DE TRANSFERÊNCIA, então não espere nenhum efeito colateral de exclusão.
A primeira letra de uma string de unidades pode ser B (bytes), K (kilo), M (mega), G (giga), T (tera) ou P (peta).
Se a string for um único caractere ou tiver "ib" adicionado a ela (por exemplo, "G" ou "GiB"), as unidades serão múltiplos de
1024. Se você usar um sufixo de duas letras que termina com um "B" (por exemplo, "kb"), obterá unidades que são múltiplas
de 1000. As letras da string podem ser qualquer combinação de maiúsculas e minúsculas que você deseja usar.
Por fim, se a string terminar com "+1" ou "-1", ela será deslocada por um byte na direção indicada.
O maior valor possível é geralmente 8192P-1.
Exemplos: --max-size=1.5mb-1 é 1499999 bytes e --max-size=2g+1 é 2147483649 bytes.
Observe que as versões rsync anteriores a 3.1.0 não permitiam --max-size=0.
Bonus
Use o comando ionice para definir ou obter a classe de agendamento de E/S e prioridade para um programa como rsync ou seu próprio script de backup. Portanto, você pode controlar a largura de banda de E/S usando o utilitário ionice no Linux da seguinte maneira:
/usr/bin/ionice -c2 -n7 /root/scripts/nas.backup.full
ou
/usr/bin/ionice -c2 -n7 rsync --bwlimit=1000 /path/to/source /caminho/destino/
Para antendermos,
- -c ou –class {class} : Nome ou número da classe de agendamento, 0: nenhum, 1: tempo real, 2: melhor esforço, 3: ocioso.
- -n ou –classdata {num} : prioridade (0..7) na classe de agendamento especificada, apenas para as classes de tempo real e de melhor esforço
Bonus 02
Existe uma outra alternativa para a opção –bwlimit. Você também pode usar o comando “trickle” para limitar a largura de banda de qualquer aplicativo executado. A sintaxe do comando trickle é:
$ trickle -u|-d [uploadLimite|downloadLimite] [app]
Onde,
- -u uploadLimit -> limita a largura de banda de upload
- -d downloadLimit -> limita a largura de banda de download
- app -> é o aplicativo para o qual você deseja limitar a largura de banda, por exemplo rsync.
Em nosso caso, limitaremos o uso da largura de banda do comando rsync a 0000kb/segundo usando os comandos abaixo:
trickle -s -u 10000 -d 10000 rsync –avz -e 'ssh' /backup/ root@192.168.0.51:/backup/