У меня следующая структура каталогов:
/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кБ), в сжатом или нет.