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

rsync синхронизирует слишком много файлов

У меня следующая структура каталогов:

/tmp1
  \_ file1.txt
  \_ file2.txt

/tmp2
  \_ file1.txt
  \_ file2.txt
  \_ file3.txt
/changes

С параметром rsync --compare-dest я хочу синхронизировать все файлы в / changes, которые отсутствуют в / tmp1, но в / tmp2. Измененные файлы в / tmp2, которые отличаются от / tmp1, также должны быть синхронизированы с / changes.

Когда я выполняю следующую команду:

rsync -acvu --compare-dest=/tmp1/ /tmp2/ changes

file3.txt будет сохранен в изменениях. Но также и file1.txt, хотя сумма md5 файла в обоих каталогах одинакова!

Я пропустил некоторые параметры для rsync? Заранее спасибо!

ОБНОВИТЬ:

Я обнаружил, что файлы, которые не следует синхронизировать, имеют права доступа -rw-rw-r - другие имеют -rwxrwxr-x. Я не могу найти что-то об этом поведении в отношении rsync.

Вывод "ls -la" в обоих каталогах:

# ls -la /tmp1
-rw-rw-r-- 1 1001 1001 4 Dec 31 15:00 file1.txt
-rwxrwxr-x 1 1001 1001 6 Dec 31 15:00 file2.txt

# ls -la /tmp2
-rw-rw-r-- 1 1001 1001 4 Dec 31 19:31 file1.txt
-rwxrwxr-x 1 1001 1001 6 Dec 31 15:00 file2.txt
-rwxrwxr-x 1 1001 1001 2 Dec 31 15:00 file3.txt

# ls -la /changes
-rw-rw-r-- 1 1001 1001 4 Dec 31 19:31 file1.txt
-rwxrwxr-x 1 1001 1001 2 Dec 31 15:00 file3.txt

md5 сумма file1.txt в обоих каталогах одинакова!

В man страница для rsync отмечает, что

Начиная с версии 2.6.4, может быть предоставлено несколько каталогов --compare-dest, что заставит rsync искать в списке в указанном порядке для точного совпадения. Если найдено совпадение, которое отличается только атрибутами, создается локальная копия и обновляются атрибуты. Если совпадение не найдено, будет выбран базовый файл из одного из DIR, чтобы попытаться ускорить передачу.

Когда я его читал, это означает, что если он находит файл, идентичный, за исключением атрибутов как в источнике, так и в месте назначения, файл не передается с удаленного исходного сервера; вместо, rsync знает, что файлы идентичны, поэтому делает копию в changes/ из местный storage, но устанавливает время модификации на более новую отметку времени удаленного экземпляра.

Чтобы убедиться в этом, посмотрите следующий вывод:

[madhatta@risby test]$ ls -la tmp1
total 36
drwxrwxr-x. 2 madhatta madhatta  4096 Feb  3 10:50 .
drwxrwxr-x. 4 madhatta madhatta  4096 Feb  3 11:01 ..
-rw-rw-r--. 1 madhatta madhatta 23150 Feb  3 10:59 file1
-rw-rw-r--. 1 madhatta madhatta   224 Feb  3 10:50 file2
[madhatta@risby test]$ ls -la tmp2
total 36
drwxrwxr-x. 2 madhatta madhatta  4096 Feb  3 10:51 .
drwxrwxr-x. 4 madhatta madhatta  4096 Feb  3 11:01 ..
-rw-rw-r--. 1 madhatta madhatta 23150 Feb  3 11:00 file1
-rw-rw-r--. 1 madhatta madhatta   224 Feb  3 10:50 file2
-rw-rw-r--. 1 madhatta madhatta     0 Feb  3 10:51 file3.txt
[madhatta@risby test]$ rsync -acvu --compare-dest=/home/madhatta/tmp/test/tmp1 tmp2/ changes
sending incremental file list
created directory changes
./
file1
file3.txt

sent 215 bytes  received 71 bytes  572.00 bytes/sec
total size is 23,374  speedup is 81.73

Пока он сообщает file1 после копирования количество полученных данных (70 с лишним байтов) не является достаточным для копирования file1 (23кБ), в сжатом или нет.