Назад | Перейти на главную страницу

Задачи Rsync: отдавайте приоритет ссылке-назначению перед передачей файлов

У меня есть команда, которая выглядит так:

rsync -avp -e ssh /folder user@server:/backups/2 --link-dest=../1 Номер папки увеличивается с каждым днем.

Эта команда запускается каждую ночь через мое очень медленное интернет-соединение. Если он не завершился ночью, процесс будет остановлен, потому что в противном случае мое соединение будет невозможно использовать в течение дня. Это будет работать нормально, если Rsync начнет с создания жестких ссылок, а затем выполнит передачу данных.

К сожалению, похоже, что Rsync выполняет свои задачи в алфавитном порядке. Поэтому иногда он начинается с передачи данных, а затем создает свои жесткие ссылки.

Если процесс не завершится в одночасье, на следующую ночь потребуется загрузить еще больше данных, потому что жесткие ссылки не были созданы в папке 2!

Есть ли способ заставить Rsync сначала создавать жесткие ссылки, а затем передавать файлы?

Большое спасибо!

Ответ - добавить --delay-updates. Это заставляет Rsync сначала создать список всех изменений. Затем цель создаст все жесткие ссылки и все папки. После этого начнется передача данных.

rsync -avp --delay-updates -e ssh /folder user@server:/backups/2 --link-dest=../1

В --link-dest=../1 Число должно указывать на самую последнюю успешную резервную копию, а не на самую последнюю попытку.

Или, что еще лучше, используйте несколько флагов --link-dest, один для последнего успеха, а затем дополнительные для любых неудачных попыток с момента последнего успеха.

Цитата из справочной страницы:

Beginning in version 2.6.4, multiple --link-dest directories may
be provided, which will cause rsync to search the  list  in  the
order  specified  for  an exact match.

Совместите это с --delay-updates (как предложил Джоэл), и у вас будет довольно надежная система.

Однако до тех пор, пока у вас очень ограниченная пропускная способность, ваши проблемы со временем будут только усугубляться по мере роста потребностей в данных. Однажды я был в такой ситуации. Rsync едва завершился за ночь. Несколько недель спустя это не закончилось и на 24 часа. Так как это было ежедневно, вы можете увидеть проблему! Он мог наверстать упущенное за выходные, но вскоре этого было недостаточно. В конце концов мне просто пришлось найти способ увеличить пропускную способность.

Если вы собираетесь использовать это в производственной системе, я рекомендую вам регистрировать количество сбоев и количество «сбоев с момента последнего успеха». Настройте мониторинг, чтобы собирать эти данные и предупреждать, если число «неудач с момента последнего успеха» вырастет до неприемлемого значения (2–5? Это зависит от ваших потребностей).