Borg: Adicionar suporte ao limite de largura de banda

Criado em 14 fev. 2016  ·  5Comentários  ·  Fonte: borgbackup/borg

Esse problema aparece na lista de caixas de seleção em #5. É questão de sótão: https://github.com/jborg/attic/issues/103. Eu não tinha certeza se deveríamos adicionar comentários lá ou aqui.


O problema original solicita que o suporte seja adicionado para limitar a largura de banda. trickle foi mencionado como uma opção. As pessoas disseram que não funcionaria / não funcionaria, já que o borg usa um pipe através do ssh, enquanto o trickle funciona com soquetes.

Eu só queria relatar que se você estiver usando borg com sshfs (ou seja, fazendo backup para rsync.net), então usar trickle funcionará corretamente. Você deve chamar trickle ao executar a montagem ssh. Então, para limitar a largura de banda a 5 Mbps, você usaria:

trickle -u 5000 sshfs username<strong i="11">@hostname</strong>: /path/to/mountpoint
borg create ...
documentation

Comentários muito úteis

Limitar a largura de banda pode ser feito com o pipeviewer e um script wrapper.
Minha opinião sobre isso é que documentar pv é preferível a adicionar suporte de largura de banda ao borg, porque pv faz o que é necessário e a limitação de taxa nem sempre é fácil de fazer no código (+ adiciona mais complexidade à configuração já complexa). Com a filosofia unix: faça uma coisa e faça bem feito (e pipes, eu gosto de pipes... ;)

Instale o pipeviewer (pv) no Ubuntu e provavelmente no debian é simplesmente: sudo apt-get install pv

Crie um script wrapper: (vou criá-lo para /usr/local/bin/pv-wrapper )

#!/bin/bash
     ## -q, --quiet              do not output any transfer information at all
     ## -L, --rate-limit RATE    limit transfer to RATE bytes per second
export RATE=307200
pv -q -L $RATE  | "$@"

Feito isso, adicione o env BORG_RSH
export BORG_RSH='/usr/local/bin/pv-wrapper.sh ssh '

Agora borg terá largura de banda limitada. O legal do pv é que você pode alterar o limite de taxa em tempo real:
pv -R $(pidof pv) -L 102400

Usei a mesma configuração com o rsync onde estava movendo um conjunto de dados de vários terabytes e tive que moderar a largura de banda durante o horário de expediente.

# example cron setup:
00 09 * * 1-5 root ( pidof pv > /tmp/.pv-pid && pv -R $(cat /tmp/.pv-pid ) -L  307200)
00 18 * * * root ( pidof pv > /tmp/.pv-pid && pv -R $(cat /tmp/.pv-pid ) -L  819200)

Teste:
O repositório remoto foi removido antes de cada teste

fonte: total de 320 milhões
Sem visualizador de tubos:
Duração: 5 minutos 8,50 segundos
Número de arquivos: 60

## wrapper:
pv -q -L 307200 | "$@"
Duração: 18 minutos 7,00 segundos

pv -q -L 102400 | "$@"
Execução interrompida após 40 minutos, tempo de execução esperado em torno de 54 minutos e saída de borg --progress estava alinhada com a estimativa.

Teste original com pipeviewer, mas sem limite de taxa:
Duração: 6 minutos 29,38 segundos
observe que este teste não foi executado em condições de laboratório, portanto, outros usuários afetam a disponibilidade da largura de banda.

Todos 5 comentários

Limitar a largura de banda pode ser feito com o pipeviewer e um script wrapper.
Minha opinião sobre isso é que documentar pv é preferível a adicionar suporte de largura de banda ao borg, porque pv faz o que é necessário e a limitação de taxa nem sempre é fácil de fazer no código (+ adiciona mais complexidade à configuração já complexa). Com a filosofia unix: faça uma coisa e faça bem feito (e pipes, eu gosto de pipes... ;)

Instale o pipeviewer (pv) no Ubuntu e provavelmente no debian é simplesmente: sudo apt-get install pv

Crie um script wrapper: (vou criá-lo para /usr/local/bin/pv-wrapper )

#!/bin/bash
     ## -q, --quiet              do not output any transfer information at all
     ## -L, --rate-limit RATE    limit transfer to RATE bytes per second
export RATE=307200
pv -q -L $RATE  | "$@"

Feito isso, adicione o env BORG_RSH
export BORG_RSH='/usr/local/bin/pv-wrapper.sh ssh '

Agora borg terá largura de banda limitada. O legal do pv é que você pode alterar o limite de taxa em tempo real:
pv -R $(pidof pv) -L 102400

Usei a mesma configuração com o rsync onde estava movendo um conjunto de dados de vários terabytes e tive que moderar a largura de banda durante o horário de expediente.

# example cron setup:
00 09 * * 1-5 root ( pidof pv > /tmp/.pv-pid && pv -R $(cat /tmp/.pv-pid ) -L  307200)
00 18 * * * root ( pidof pv > /tmp/.pv-pid && pv -R $(cat /tmp/.pv-pid ) -L  819200)

Teste:
O repositório remoto foi removido antes de cada teste

fonte: total de 320 milhões
Sem visualizador de tubos:
Duração: 5 minutos 8,50 segundos
Número de arquivos: 60

## wrapper:
pv -q -L 307200 | "$@"
Duração: 18 minutos 7,00 segundos

pv -q -L 102400 | "$@"
Execução interrompida após 40 minutos, tempo de execução esperado em torno de 54 minutos e saída de borg --progress estava alinhada com a estimativa.

Teste original com pipeviewer, mas sem limite de taxa:
Duração: 6 minutos 29,38 segundos
observe que este teste não foi executado em condições de laboratório, portanto, outros usuários afetam a disponibilidade da largura de banda.

pode ser adicionado ao FAQ.

fusão do pr #705.

Esbarrando em um problema antigo aqui, eu sei, mas essa é uma solução bastante complicada para algo que provavelmente deveria morar em borg. Além disso, seria útil ter opções de limitação separadas para rede, E/S e computação.

@ddevault se você tiver um problema específico relacionado a isso, descreva-o em um novo problema.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

rugk picture rugk  ·  4Comentários

phdoerfler picture phdoerfler  ·  6Comentários

auanasgheps picture auanasgheps  ·  5Comentários

qknight picture qknight  ·  6Comentários

htho picture htho  ·  5Comentários