Как работает опция --fuzzy для rsync?

9

Как rsync --fuzzyработает? Я не получаю ожидаемых результатов.

Из руководства:

Эта опция сообщает rsync, что он должен искать базовый файл для любого файла назначения, который отсутствует. Текущий алгоритм ищет в том же каталоге, что и файл назначения, либо для файла с идентичным размером и временем изменения, либо для файла с аналогичным именем. Если найдено, rsync использует нечеткий базовый файл, чтобы попытаться ускорить передачу.

Если опция повторяется, нечеткое сканирование также будет выполняться в любых соответствующих альтернативных каталогах назначения, которые указаны с помощью --compare-dest, --copy-dest или --link-dest.

Обратите внимание, что использование параметра --delete может избавить от любых потенциальных файлов с нечетким соответствием, поэтому либо используйте --delete-after, либо укажите некоторые исключения из имен файлов, если вам нужно это предотвратить.

Таким образом, я ожидаю, что следующий сценарий оболочки переименует файл destination / a1 в destination / a2 при втором запуске rsync. Однако, поскольку я интерпретирую вывод, это не то, что происходит ( Matched data: 0 bytes).

#! /usr/bin/env bash
set -e

cd $(mktemp -d)
mkdir source destination
cat /dev/urandom | head --bytes=1M > source/a1
rsync --recursive --times $(pwd)/source/ $(pwd)/destination/
tree
mv source/a1 source/a2
rsync \
    --verbose \
    --recursive \
    --times \
    --delete \
    --delete-after \
    --fuzzy \
    --human-readable \
    --itemize-changes \
    --stats \
    $(pwd)/source/ \
    $(pwd)/destination/
tree
rm -r source destination

Вывод:

├── destination
│   └── a1
└── source
    └── a1

2 directories, 2 files
building file list ... done
>f+++++++++ a2
*deleting   a1

Number of files: 2 (reg: 1, dir: 1)
Number of created files: 1 (reg: 1)
Number of deleted files: 1 (reg: 1)
Number of regular files transferred: 1
Total file size: 1.05M bytes
Total transferred file size: 1.05M bytes
Literal data: 1.05M bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 1.05M
Total bytes received: 34

sent 1.05M bytes  received 34 bytes  2.10M bytes/sec
total size is 1.05M  speedup is 1.00
.
├── destination
│   └── a2
└── source
    └── a2

2 directories, 2 files

Выход rsync --version:

rsync  version 3.1.2  protocol version 31
Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes, prealloc

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

Как rsync --fuzzyработает?

Почему я не получаю ожидаемых результатов?

Андерс Лундштедт
источник

Ответы:

3

Вы используете rsyncдля копирования файлов между двумя локальными файловыми деревьями. Инкрементный алгоритм и все связанные с ним оптимизации, такие как --fuzzy, игнорируются в этом режиме.

Повторите тест с локальным файлом, копируемым на удаленный сервер (или с удаленного на локальный; это не имеет значения), и вы обнаружите, что он работает, как и ожидалось.

Например, измените ваш скрипт в обоих местах, например, измените $(pwd)/destinationна localhost:$(pwd)/destination. Это не элегантно, но этого будет достаточно.

# Set up PKI for localhost
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
ssh localhost id

Скрипт результата от второго rsync:

building file list ... done
<f+++++++++ a2
*deleting   a1

Number of files: 2 (reg: 1, dir: 1)
Number of created files: 1 (reg: 1)
Number of deleted files: 1 (reg: 1)
Number of regular files transferred: 1
Total file size: 1.05M bytes
Total transferred file size: 1.05M bytes
Literal data: 0 bytes
Matched data: 1.05M bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 4.20K
Total bytes received: 6.18K

sent 4.20K bytes  received 6.18K bytes  20.75K bytes/sec
total size is 1.05M  speedup is 101.09
roaima
источник