Como eu faço o rsync checar também o ctime?

3

O rsync detecta a modificação de arquivos comparando tamanho e mtime. No entanto, se por algum motivo, o mtime permanecer inalterado, o rsync não detectará a alteração, embora seja possível localizá-lo observando o ctime.

É claro que posso dizer ao rsync que você compara o conteúdo de todos os arquivos, mas isso é muito caro.

Existe uma maneira de tornar o rsync mais inteligente, por exemplo, verificando mtime + size são os mesmos E que o ctime não é mais recente que o mtime (tanto na origem quanto no destino)? Ou devo abrir uma solicitação de recurso?

Veja um exemplo:

Crie 2 arquivos, o mesmo conteúdo e atime / mtime

benoit@debian:~$ mkdir d1 && cd d1
benoit@debian:~/d1$ echo Hello > a
benoit@debian:~/d1$ cp -a a b

Rsync-los para outro diretório (não-existente):

benoit@debian:~/d1$ cd ..
benoit@debian:~$ rsync -av d1/ d2
sending incremental file list
created directory d2
./
a
b

sent 164 bytes  received 53 bytes  434.00 bytes/sec
total size is 12  speedup is 0.06

OK, tudo está sincronizado

benoit@debian:~$ grep . d*/*
d1/a:Hello
d1/b:Hello
d2/a:Hello
d2/b:Hello

Atualize o arquivo 'b', do mesmo tamanho e, em seguida, redefina seu atime / mtime

benoit@debian:~$ echo World > d1/b
benoit@debian:~$ touch -r d1/a d1/b

Tentativa de rsync novamente:

benoit@debian:~$ rsync -av d1/ d2
sending incremental file list

sent 63 bytes  received 12 bytes  150.00 bytes/sec
total size is 12  speedup is 0.16

Não, o rsync errou a mudança.

benoit@debian:~$ grep . d*/*
d1/a:Hello
d1/b:World
d2/a:Hello
d2/b:Hello

Diga ao rsync que compare o conteúdo do arquivo

benoit@debian:~$ rsync -acv d1/ d2
sending incremental file list
b

sent 144 bytes  received 31 bytes  350.00 bytes/sec
total size is 12  speedup is 0.07

Dá o resultado correto:

benoit@debian:~$ grep . d*/*
d1/a:Hello
d1/b:World
d2/a:Hello
d2/b:World
    
por Benoît 02.11.2013 / 19:00

1 resposta

0

chmod e outros comandos que alteram os atributos do arquivo, mas não seu conteúdo, atualizará o ctime.

Dito isto, modificar o conteúdo do arquivo irá mudar seu tempo. Então, a menos que alguém tenha voltado e redefinir o mtime para seu valor anterior, uma soma de verificação não lhe dirá nada que a comparação de tempos de trabalho não seja.

Observe que o ctime é atualizado em todas as alterações. Você não pode sobrescrever isso e não pode modificar manualmente o ctime. Isso significa que a opção -t não tem efeito no ctime.

Eu estou supondo que os autores do rsync descobriram que, por esse motivo, comparar ctimes não seria muito útil.

IMHO, eles estão errados sobre isso. Primeiro, você pode querer que o rsync atualize um arquivo se seus atributos forem alterados. Segundo, os sistemas de arquivos do Windows não possuem um mtime, portanto, a capacidade de comparar ctimes seria muito útil ao trabalhar com sistemas de arquivos montados do Windows. Tal como está, você tem que usar a opção de soma de verificação ao sincronizar a partir de um sistema de arquivos do Windows.

    
por 10.01.2017 / 23:20