Come funziona l'opzione --fuzzy per rsync?


9

Come rsync --fuzzyfunziona? Non ottengo i risultati che mi aspetto.

Dal manuale:

Questa opzione dice a rsync che dovrebbe cercare un file base per qualsiasi file di destinazione mancante. L'algoritmo corrente cerca nella stessa directory del file di destinazione un file con dimensioni e tempo di modifica identici o un file con un nome simile. Se trovato, rsync utilizza il file di base fuzzy per provare ad accelerare il trasferimento.

Se l'opzione viene ripetuta, la scansione fuzzy verrà eseguita anche in tutte le directory di destinazione alternative corrispondenti specificate tramite --compare-dest, --copy-dest o --link-dest.

Nota che l'uso dell'opzione --delete potrebbe sbarazzarti di qualsiasi potenziale file fuzzy-match, quindi usa --delete-after o specifica alcune esclusioni di file se hai bisogno di impedirlo.

Quindi mi aspetto che il seguente script di shell rinominerà il file destinazione / a1 in destinazione / a2 alla seconda esecuzione di rsync. Tuttavia, come interpreto l'output, questo non è ciò che sta accadendo ( 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

Produzione:

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

Uscita di 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.

Come rsync --fuzzyfunziona?

Perché non ottengo i risultati previsti?

Risposte:


3

Stai usando rsyncper copiare file tra due alberi di file locali. L'algoritmo incrementale e tutte le ottimizzazioni associate come --fuzzy, vengono ignorate in questa modalità.

Ripeti il ​​test con un file locale che viene copiato su un server remoto (o remoto su locale; non importa) e scoprirai che funziona come previsto.

Ad esempio, modifica lo script in entrambi i luoghi, come $(pwd)/destinationè stato modificato in localhost:$(pwd)/destination. Non è elegante ma sarà sufficiente.

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

Risultati dello script dal secondo 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.