Comment fonctionne l'option --fuzzy pour rsync?

9

Comment ça rsync --fuzzymarche? Je n'obtiens pas les résultats escomptés.

Du manuel:

Cette option indique à rsync qu'il doit rechercher un fichier de base pour tout fichier de destination manquant. L'algorithme actuel recherche dans le même répertoire que le fichier de destination soit un fichier qui a une taille et une heure modifiées identiques, soit un fichier portant le même nom. S'il est trouvé, rsync utilise le fichier de base floue pour essayer d'accélérer le transfert.

Si l'option est répétée, l'analyse floue sera également effectuée dans tout autre répertoire de destination correspondant spécifié via --compare-dest, --copy-dest ou --link-dest.

Notez que l'utilisation de l'option --delete peut se débarrasser de tout fichier de correspondance approximative potentiel, alors utilisez --delete-after ou spécifiez des exclusions de nom de fichier si vous devez empêcher cela.

Ainsi, je m'attends à ce que le script shell suivant renomme le fichier destination / a1 en destination / a2 lors de la deuxième exécution de rsync. Cependant, comme j'interprète la sortie, ce n'est pas ce qui se passe ( 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

Production:

├── 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

Sortie de 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.

Comment ça rsync --fuzzymarche?

Pourquoi je n'obtiens pas les résultats que j'attends?

Anders Lundstedt
la source

Réponses:

3

Vous utilisez rsyncpour copier des fichiers entre deux arborescences de fichiers locales. L'algorithme incrémental, et toutes ses optimisations associées telles que --fuzzy, sont ignorés dans ce mode.

Répétez votre test avec un fichier local copié sur un serveur distant (ou distant sur local; cela n'a pas d'importance) et vous constaterez que cela fonctionne comme prévu.

À titre d'exemple, modifiez votre script aux deux endroits, tel que $(pwd)/destinationmodifié en localhost:$(pwd)/destination. Ce n'est pas élégant mais ça suffira.

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

Résultats du script de la seconde 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
la source