Настройте максимальную скорость загрузки rsync во время работы

Настройте максимальную скорость загрузки rsync во время работы

Мне нужно загрузить данные между двумя машинами Linux через шаткое соединение. Rsync кажется лучшим инструментом, но дело в том, что я хочу увеличить ограничение пропускной способности этого процесса в течение ночи. Как это сделать?

Есть ли какие-нибудь хорошие предложения, как это сделать? Мне кажется, лучшей идеей будет скрипт bash, который останавливается в определенное время, а затем перезапускается скриптом, который проверяет время и регулирует ограничение скорости.

Можно предположить, что постоянно запущено много rsync, поэтому killall rsync не сработает.

решение1

В последних версиях rsyncесть --time-limit=MINSопция. Вы говорите, что соединение нестабильно, поэтому вам в любом случае придется делать цикл. Я бы предложил использовать trickleдля управления скоростью соединения и принудительного перезапуска rsyncкаждый час независимо от его состояния.

#!/bin/bash
#
while :
do
    # Evening? Or day?
    time=$(date +%H%M)
    if [[ ${hour#0} -gt 2200 || ${hour#0} -lt 700 ]]
    then
        # After 10pm and before 7am
        up=100 down=10    # 100 KB/s up and 10 KB/s down
    else
        up=10 down=1      # 10 KB/s up and 1 KB/s down
    fi

    trickle -s -u $up -d $down -t 10 rsync -avzP --time-limit=60 /path/to/source/ remote:/path/to/destination/ && break

    # Take a breather
    sleep 60
done

Помните, что в этом примере, если время перепроверить в 06:59, час все еще 6, поэтому он все равно перезапустится rsyncна час на полной скорости. Фактически это позволит ему использовать большую пропускную способность до 8 утра, потенциально на час позже, чем вы ожидаете.

Исправьте значения вверх/вниз, чтобы они соответствовали вашим предпочтительным ограничениям пропускной способности. Они указаны в КБ (килобайтах) в секунду, поэтому вам нужно будет скорректировать их с помощью соответствующего коэффициента 10 для преобразования из более типичных скоростей интернет-подключения в Мб. Обратите внимание, что 1 Мб/с = 1000 Кб/с = 100 КБ/с.

--time-limitЕсли на вашем компьютере нет такой опции rsync, вы можете сделать то же самое с помощью timeoutутилиты.

timeout 60m trickle ... rsync ...

Связанный контент