У меня есть простая строка rsync в моем crontab, который получает файлы резервных копий от сервера напоминания до другого.
Похоже, что это касается уже существующих файлов в папке назначения. Таким образом, резервное копирование инкрементно заняло бы больше времени каждый интервал.
Смотрите на дату и время, которую ниже изменили файлы.
Как я использую rsync для не касания (и загрузка?) файлы это уже имеет. Мне не нужны никакие контрольные суммы, вычисленные также, после того как резервные копии создаются, они не будут больше изменяться.
rsync -vzre 'ssh' stor@server:/backup/system/ /storage/share/Backup/Server
Файлы, которые будут выбраны:
-rw-r-x--- 1 root stor 896K Jun 22 05:02 giant-140622-etc.zip
-rw-r-x--- 1 root stor 620K Jun 22 05:02 giant-140622-sql.zip
-rw-r-x--- 1 root stor 84M Jun 22 05:02 giant-140622-www.zip
-rw-r-x--- 1 root stor 899K Jun 25 05:00 giant-140625-etc.zip
-rw-r-x--- 1 root stor 603K Jun 25 05:00 giant-140625-sql.zip
-rw-r-x--- 1 root stor 84M Jun 25 05:00 giant-140625-www.zip
-rw-r-x--- 1 root stor 899K Jun 28 05:00 giant-140628-etc.zip
-rw-r-x--- 1 root stor 620K Jun 28 05:00 giant-140628-sql.zip
-rw-r-x--- 1 root stor 86M Jun 28 05:00 giant-140628-www.zip
-rw-r-x--- 1 root stor 899K Jun 30 05:00 giant-140630-etc.zip
-rw-r-x--- 1 root stor 617K Jun 30 05:00 giant-140630-sql.zip
-rw-r-x--- 1 root stor 86M Jun 30 05:00 giant-140630-www.zip
Место назначения:
-rw-r-x--- 1 stor stor 896K Jun 30 06:06 giant-140622-etc.zip
-rw-r-x--- 1 stor stor 620K Jun 30 06:06 giant-140622-sql.zip
-rw-r-x--- 1 stor stor 84M Jun 30 06:06 giant-140622-www.zip
-rw-r-x--- 1 stor stor 899K Jun 30 06:06 giant-140625-etc.zip
-rw-r-x--- 1 stor stor 603K Jun 30 06:06 giant-140625-sql.zip
-rw-r-x--- 1 stor stor 84M Jun 30 06:06 giant-140625-www.zip
-rw-r-x--- 1 stor stor 899K Jun 30 06:06 giant-140628-etc.zip
-rw-r-x--- 1 stor stor 620K Jun 30 06:06 giant-140628-sql.zip
-rw-r-x--- 1 stor stor 86M Jun 30 06:06 giant-140628-www.zip
-rw-r-x--- 1 stor stor 899K Jun 30 06:07 giant-140630-etc.zip
-rw-r-x--- 1 stor stor 617K Jun 30 06:08 giant-140630-sql.zip
-rw-r-x--- 1 stor stor 86M Jun 30 06:10 giant-140630-www.zip
Обновление:
Когда я работаю rsync
команда (с --skip-existing
аргумент) от оболочки, это только загружает несуществующие новые файлы и пропускает файлы, которые это уже имеет.
При исследовании поведения той же самой команды, выполненной cronjob, уже существующие файлы действительно изменяют каждый цикл, и целое задание берет инкрементно дольше каждый цикл (сравните времена выше, cronjob запускающийся в 6:00, 2 минуты на файл, даже если они уже существуют).
rsync -vzr --ignore-existing -e 'ssh -i /path/id_rsa -l backup' backup@flowl.info:/backup/system/ /nfs/share-private/Backup/Server
Обновление:
Вот июль формы файлов, я поместил дополнительную пустую строку в, посмотрите времена, который запущенный 06:01
и повысьте каждого новые файлы.
-rw-r-x--- 1 stor stor 899K Jul 4 06:01 giant-140702-etc.zip
-rw-r-x--- 1 stor stor 621K Jul 4 06:01 giant-140702-sql.zip
-rw-r-x--- 1 stor stor 86M Jul 4 06:03 giant-140702-www.zip
^-- 01 to 03
-rw-r-x--- 1 stor stor 899K Jul 4 06:04 giant-140704-etc.zip
-rw-r-x--- 1 stor stor 634K Jul 4 06:05 giant-140704-sql.zip
-rw-r-x--- 1 stor stor 86M Jul 8 06:02 giant-140704-www.zip
^-- ???
-rw-r-x--- 1 stor stor 899K Jul 8 06:03 giant-140706-etc.zip
-rw-r-x--- 1 stor stor 629K Jul 8 06:03 giant-140706-sql.zip
-rw-r-x--- 1 stor stor 86M Jul 8 06:06 giant-140706-www.zip
^-- 03 - 06
-rw-r-x--- 1 stor stor 899K Jul 8 06:07 giant-140708-etc.zip
-rw-r-x--- 1 stor stor 629K Jul 8 06:07 giant-140708-sql.zip
-rw-r-x--- 1 stor stor 86M Jul 8 06:10 giant-140708-www.zip
^-- 07 - 10
Теперь, когда я предполагаю идти на другом месяце, время было бы похоже:
-rw-r-x--- 1 stor stor 899K Jul 8 06:32 giant-140808-etc.zip
-rw-r-x--- 1 stor stor 629K Jul 8 06:32 giant-140808-sql.zip
-rw-r-x--- 1 stor stor 86M Jul 8 06:35 giant-140808-www.zip
^-- what I imagine to happen
Я добавил команду --ignore-existing
и похоже, что она ничего не изменит, а только скачает новые файлы.
rsync -vzr --ignore-existing -e
Редактирование: Когда появляются новые файлы, каждый цикл все равно занимает больше времени.
. По умолчанию rsync
прочитает весь файл как по исходному, так и по целевому назначению, чтобы проверить, что они идентичны. Это не потребляет пропускную способность сети, так как будет сравниваться только хэш-значение. Но он действительно тратит время на чтение с диска.
В одном сценарии использования я нашел это ужасно неэффективным, так как исходные файлы были только добавлены к ним. Я использовал --size-only
, что мне помогло.
Есть еще несколько вариантов, которые выглядят так, как будто они могут быть применимы, --append
и --append-verify
, но я не тестировал их сам.
Не похоже, что у вас есть каталог с большим количеством маленьких файлов, так что время, чтобы прочитать список каталогов с диска и прочитать статистику каждого файла, не должно быть большой проблемой.
.почему вы говорите, что каждый раз это занимает больше времени? Как такое возможно?
может быть, это программа, которая генерирует файлы, которые к ним прикасаются?
попробуйте с --checkum
: пропустите по контрольной сумме, а не по времени и размеру, посмотрите, не изменит ли это что-нибудь (я бы не оставил эту опцию, потому что она каждый раз читает каждый файл с диска, слишком дорого, я просто предлагаю ей найти проблему)
(и, возможно, попробуйте отладить с помощью опции -t
, которая сохраняет время модификации)
Думаю, добавление -t
в список аргументов поможет.
Для проверки этого можно добавить --[itemize-changes
к аргументам (без -t
). Если я правильно вас понял, то в каждой строке
man 1 rspec
это будет показывать T
-флаг:
A t означает, что время модификации отличается и обновляется к ценности отправителя (требует... иногда). Альтернативное значение Т означает, что время модификации будет установлено на время переноса, что случается, когда файл/символ/устройство обновляется без --time и когда меняется сим-ссылка, а приемник не может установить время. (Примечание: при использовании клиента rsync 3.0.0 вы можете увидеть флаг s в сочетании с t вместо правильного T-флага для этой установки времени. failure.)
После этого добавьте -t
к команде (сохраните --[itemize-changes
) и вы получите t
-флаг на каждой строке. В следующем запуске список будет содержать только новые файлы.
Это мой пример запуска:
krissi@host ~/tmp/rsync % l *
dst:
total 0
src:
total 0
-rw-r--r-- 1 krissi users 0 Jul 13 18:05 bar
-rw-r--r-- 1 krissi users 0 Jul 13 18:05 foo
-rw-r--r-- 1 krissi users 0 Jul 13 18:19 later
krissi@host ~/tmp/rsync % rsync -vzr --itemize-changes src/ dst/
sending incremental file list
>f+++++++++ bar
>f+++++++++ foo
>f+++++++++ later
sent 174 bytes received 69 bytes 486.00 bytes/sec
total size is 0 speedup is 0.00
krissi@host ~/tmp/rsync % l *
dst:
total 0
-rw-r--r-- 1 krissi users 0 Jul 13 18:21 bar
-rw-r--r-- 1 krissi users 0 Jul 13 18:21 foo
-rw-r--r-- 1 krissi users 0 Jul 13 18:21 later
src:
total 0
-rw-r--r-- 1 krissi users 0 Jul 13 18:05 bar
-rw-r--r-- 1 krissi users 0 Jul 13 18:05 foo
-rw-r--r-- 1 krissi users 0 Jul 13 18:19 later
krissi@host ~/tmp/rsync % rsync -vzr --itemize-changes src/ dst/
sending incremental file list
>f..T...... bar
>f..T...... foo
>f..T...... later
sent 174 bytes received 69 bytes 486.00 bytes/sec
total size is 0 speedup is 0.00
krissi@host ~/tmp/rsync % rsync -vzr --itemize-changes src/ dst/
sending incremental file list
>f..T...... bar
>f..T...... foo
>f..T...... later
sent 174 bytes received 69 bytes 486.00 bytes/sec
total size is 0 speedup is 0.00
krissi@host ~/tmp/rsync % rsync -vzrt --itemize-changes src/ dst/
sending incremental file list
.d..t...... ./
>f..t...... bar
>f..t...... foo
>f..t...... later
sent 177 bytes received 72 bytes 498.00 bytes/sec
total size is 0 speedup is 0.00
krissi@host ~/tmp/rsync % rsync -vzrt --itemize-changes src/ dst/
sending incremental file list
sent 66 bytes received 12 bytes 156.00 bytes/sec
total size is 0 speedup is 0.00
krissi@host ~/tmp/rsync % l *
dst:
total 0
-rw-r--r-- 1 krissi users 0 Jul 13 18:05 bar
-rw-r--r-- 1 krissi users 0 Jul 13 18:05 foo
-rw-r--r-- 1 krissi users 0 Jul 13 18:19 later
src:
total 0
-rw-r--r-- 1 krissi users 0 Jul 13 18:05 bar
-rw-r--r-- 1 krissi users 0 Jul 13 18:05 foo
-rw-r--r-- 1 krissi users 0 Jul 13 18:19 later