У меня есть простая строка rsync в моем crontab, которая передает файлы резервных копий с одного prod-сервера на другой.
Похоже, он касается уже существующих файлов в папке назначения. Таким образом, резервное копирование будет постепенно увеличиваться с каждым интервалом.
Обратите внимание на дату и время изменения файлов ниже.
Как мне использовать 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
arg) из оболочки, он только загружает несуществующие новые файлы и пропускает файлы, которые у него уже есть.
При исследовании поведение той же самой команды, запущенной cronjob, уже существующие файлы меняйте каждый цикл и весь работа выполняется постепенно с каждым циклом (сравните время выше, cronjob, начиная с 06: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
По умолчанию rsync
прочитает весь файл как в источнике, так и в месте назначения, чтобы убедиться, что они идентичны. Это не потребляет пропускную способность сети, поскольку будет сравнивать только хеш-значение. Но он тратит время на чтение с диска.
В одном сценарии использования я обнаружил, что это ужасно неэффективно, потому что исходные файлы только добавлялись. Я использовал --size-only
, который мне очень понравился.
Есть несколько других вариантов, которые, похоже, могут быть применимы, --append
и --append-verify
, но я их сам не тестировал.
Не похоже, что у вас есть каталог с большим количеством маленьких файлов, поэтому время, чтобы прочитать список каталогов с диска и просмотреть каждый файл, не должно быть большой проблемой.
Я думаю добавление -t
к вашему списку аргументов поможет.
Чтобы проверить это, вы можете добавить --itemize-changes
к аргументам (без -t
). Если я правильно вас понял, это покажет T
-флаг в каждой строке
man 1 rspec
:
T означает, что время модификации другое и обновляется до значения отправителя (требуется --times). Альтернативное значение T означает, что время модификации будет установлено равным времени передачи, что происходит, когда файл / символическая ссылка / устройство обновляется без --times и когда символическая ссылка изменяется и получатель не может установить свое время. (Примечание: при использовании клиента rsync 3.0.0 вы можете увидеть флаг s в сочетании с t вместо правильного флага T для этого сбоя установки времени.)
После этого добавьте -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
Я добавил --ignore-existing
, и похоже, что она ничего не изменит, а только загрузит новые файлы.
rsync -vzr --ignore-existing -e
Редактировать: Когда появляются новые файлы, каждый цикл все равно занимает больше времени.
почему ты говоришь, что каждый раз требуется больше времени? как это возможно?
может это программа, генерирующая файлы, трогает их?
попробуйте с --checksum
: пропустить на основе контрольной суммы, а не времени модификации и размера, посмотрите, изменится ли это что-нибудь (я бы не оставил эту опцию, потому что она каждый раз читает каждый файл с диска, слишком дорого, я предлагаю только найти проблему .)
(и, возможно, попробуйте отладить с помощью -t
вариант, который сохраняет время модификации)