У меня есть команда, которая выглядит так:
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? Это зависит от ваших потребностей).