Como funciona a opção --fuzzy para rsync?

9

Como rsync --fuzzyfunciona? Não recebo os resultados esperados.

Do manual:

Esta opção informa ao rsync que ele deve procurar um arquivo base para qualquer arquivo de destino que esteja faltando. O algoritmo atual procura no mesmo diretório do arquivo de destino um arquivo com tamanho idêntico e tempo de modificação, ou um arquivo com nome semelhante. Se encontrado, o rsync usa o arquivo de base difusa para tentar acelerar a transferência.

Se a opção for repetida, a varredura difusa também será feita em qualquer diretório de destino alternativo correspondente especificado por meio de --compare-dest, --copy-dest ou --link-dest.

Observe que o uso da opção --delete pode se livrar de possíveis arquivos de correspondência difusa, portanto, use --delete-after ou especifique algumas exclusões de nome de arquivo se você precisar evitar isso.

Portanto, espero que o seguinte script de shell renomeie o destino do arquivo / a1 para o destino / a2 na segunda execução do rsync. No entanto, como eu interpreto a saída, não é isso que está acontecendo ( 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

Resultado:

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

Saída 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.

Como rsync --fuzzyfunciona?

Por que não obtenho os resultados esperados?

Anders Lundstedt
fonte

Respostas:

3

Você está usando rsyncpara copiar arquivos entre duas árvores de arquivos locais. O algoritmo incremental e todas as otimizações associadas, como --fuzzy, são ignoradas neste modo.

Repita o teste com um arquivo local sendo copiado para um servidor remoto (ou remoto para local; não importa) e você descobrirá que ele funciona conforme o esperado.

Como exemplo, modifique seu script nos dois lugares, como $(pwd)/destinationé alterado para localhost:$(pwd)/destination. Não é elegante, mas é suficiente.

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

O script resulta do segundo 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
fonte