Resposta: É um erro em rsync
3.1.0.
Esta é uma nota da 3.1.1. notas de lançamento ,
Fixed a failure to remove the partial-transfer temp file when interrupted (and rsync is not saving the partial files).
Atualize sua versão de rsync
.
Material anterior
Acabei de testar isso no meu sistema.
tony@trinity:~$ uname -a
Linux trinity 3.2.0-4-686-pae #1 SMP Debian 3.2.73-2+deb7u2 i686 GNU/Linux
tony@trinity:~$ cat /etc/debian_version
7.10
tony@trinity:~$ rsync --version
rsync version 3.0.9 protocol version 30
Portanto, não é exatamente a mesma versão de rsync
, mas a mesma versão principal.
Como esperado, quando pressiono Ctrl + c , rsync
arruma e não deixa nenhum arquivo temporário para trás.
Eu criei A/
e B/
, preenchai A/
com alguns arquivos e depois executei rsync
uma vez para preencher B/
. Em seguida, executei apenas touch
em A/
e executei novamente o rsync
.
Eu adicionei um -v
para poder ver em qual arquivo ele estava trabalhando, mas o comportamento era o mesmo sem o -v.
tony@trinity:~$ rsync -v -a --backup --suffix=.$(date +"%Y%m%d%H%M%S") A/ B/
sending incremental file list
archives/floppies.tgz
archives/fromx1.tgz
archives/homestuff.tgz
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(549) [sender=3.0.9]
tony@trinity:~$ cd B
tony@trinity:~/B$ cd archives/
tony@trinity:~/B/archives$ ls -l
total 78620
-rw-r----- 1 tony tony 7031885 Apr 15 14:44 floppies.tgz
-rw-r----- 1 tony tony 7031885 Apr 15 14:37 floppies.tgz.20160415144513
-rw-r--r-- 1 tony tony 13959801 Apr 15 14:44 fromx1.tgz
-rw-r--r-- 1 tony tony 13959801 Apr 15 14:37 fromx1.tgz.20160415144513
-rw-r--r-- 1 tony tony 26136212 Apr 15 14:37 homestuff.tgz
-rw-r----- 1 tony tony 5727535 Apr 15 14:37 legacy-x1-scripts.tgz
-rw-r----- 1 tony tony 6636756 Apr 15 14:37 olddos.tgz
drwxr-xr-x 2 tony tony 4096 Apr 15 14:44 oldsites
drwxr-xr-x 2 tony tony 4096 Apr 15 14:44 temp
Nenhum arquivo temporário. Então, talvez porque o conteúdo não mudou, rsync
não precisa criar um arquivo temporário.
Desta vez, tenho um único arquivo grande em A\
.
tony@trinity:~$ ls -l A/
total 561528
-rw-r--r-- 1 tony tony 574996664 Apr 15 14:52 bigfile.tgz
eu sincronizo B/
tony@trinity:~$ rsync -v -a --backup --suffix=.$(date +"%Y%m%d%H%M%S") A/ B/
sending incremental file list
bigfile.tgz
sent 575066959 bytes received 31 bytes 10953656.95 bytes/sec
total size is 574996664 speedup is 1.00
Em seguida, substitua completamente bigfile.tgz
por outra coisa.
tony@trinity:~$ ls -l A/
total 572576
-rw-r--r-- 1 tony tony 586311642 Apr 15 14:57 bigfile.tgz
Esse é um arquivo tgz diferente, copiado várias vezes para criar o mesmo tamanho de arquivo.
tony@trinity:~$ rsync -v -a --backup --suffix=.$(date +"%Y%m%d%H%M%S") A/ B/
sending incremental file list
bigfile.tgz
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(549) [sender=3.0.9]
tony@trinity:~$ ls -l B/
total 561528
-rw-r--r-- 1 tony tony 574996664 Apr 15 14:52 bigfile.tgz
Nenhum arquivo temporário.
Iniciando novamente, novo arquivo.
tony@trinity:~$ ls -l A/
total 433908
-rw-r--r-- 1 tony tony 444315604 Apr 15 15:02 bigfile.tgz
Sincronizar com B/
tony@trinity:~$ rsync -v -a --backup --suffix=.$(date +"%Y%m%d%H%M%S") A/ B/
sending incremental file list
bigfile.tgz
sent 444369947 bytes received 31 bytes 32916294.67 bytes/sec
total size is 444315604 speedup is 1.00
Agora, recrie A/bigfile.tgz
com conteúdo diferente,
tony@trinity:~$ ls -l A/
total 545312
-rw-r--r-- 1 tony tony 558392040 Apr 15 15:04 bigfile.tgz
Desta vez, execute o rsync
com --partial
e veja quais alterações. Essa opção é a que geralmente força rsync
a deixar arquivos parciais em vez de limpá-los.
tony@trinity:~$ rsync -v -a --backup --suffix=.$(date +"%Y%m%d%H%M%S") --partial A/ B/
sending incremental file list
bigfile.tgz
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(549) [sender=3.0.9]
tony@trinity:~$ ls -l B/
total 464596
-rw-r--r-- 1 tony tony 31424512 Jan 1 1970 bigfile.tgz
-rw-r--r-- 1 tony tony 444315604 Apr 15 15:02 bigfile.tgz.20160415150558
Como podemos, desta vez, rsync
criou um arquivo temporário (chamado bigfile.tgz) com o antigo que já recebeu a nova extensão.
Editar: um conjunto de testes novamente usando ls -la
.
tony@trinity:~$ ls -la A/
total 510488
drwxr-xr-x 2 tony tony 4096 Apr 15 15:22 .
drwxr-xr-x 89 tony tony 4096 Apr 15 15:12 ..
-rw-r--r-- 1 tony tony 522724240 Apr 15 15:22 bigfile.tgz
tony@trinity:~$ rsync -v -a --backup --suffix=.$(date +"%Y%m%d%H%M%S") A/ B/
sending incremental file list
bigfile.tgz
sent 522788155 bytes received 31 bytes 22246305.79 bytes/sec
total size is 522724240 speedup is 1.00
Então B/
está sincronizado,
tony@trinity:~$ ls -la B/
total 510484
drwxr-xr-x 2 tony tony 4096 Apr 15 15:23 .
drwxr-xr-x 89 tony tony 4096 Apr 15 15:12 ..
-rw-r--r-- 1 tony tony 522724240 Apr 15 15:22 bigfile.tgz
Substitua A/bigfile.tgz
e ressincronize.
tony@trinity:~$ ls -la A/
total 545320
drwxr-xr-x 2 tony tony 4096 Apr 15 15:24 .
drwxr-xr-x 89 tony tony 4096 Apr 15 15:12 ..
-rw-r--r-- 1 tony tony 558392040 Apr 15 15:24 bigfile.tgz
tony@trinity:~$ rsync -v -a --backup --suffix=.$(date +"%Y%m%d%H%M%S") A/ B/
sending incremental file list
bigfile.tgz
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(549) [sender=3.0.9]
tony@trinity:~$ ls -la B/
total 510484
drwxr-xr-x 2 tony tony 4096 Apr 15 15:25 .
drwxr-xr-x 89 tony tony 4096 Apr 15 15:12 ..
-rw-r--r-- 1 tony tony 522724240 Apr 15 15:22 bigfile.tgz
Nenhum arquivo temporário.
Não consigo recriar o comportamento que você descreve usando rsync
básico.
Você tem certeza de que seu comando rsync
é exatamente como descrito e tem certeza de que não é um alias para ser outra coisa?
Atualização:
Usando seu script, em uma máquina diferente,
tony@matrix:~$ ./rsynctest.sh
Creating a 500 MB file in A...
Now press CTRL-C to interrupt rsync.
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(632) [sender=3.1.1]
rsync: [sender] write error: Broken pipe (32)
tony@matrix:~$ ls -la B/
total 8
drwxr-xr-x 2 tony users 4096 Apr 15 19:54 .
drwxr-xr-x 37 tony users 4096 Apr 15 19:54 ..
tony@matrix:~$ ./rsynctest.sh
Creating a 500 MB file in A...
Now press CTRL-C to interrupt rsync.
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(632) [sender=3.1.1]
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at io.c(504) [generator=3.1.1]
tony@matrix:~$ ls -la B/
total 8
drwxr-xr-x 2 tony users 4096 Apr 15 19:54 .
drwxr-xr-x 37 tony users 4096 Apr 15 19:54 ..
tony@matrix:~$ uname -a
Linux matrix 3.12.46-guest-39-a97a54c-x86_64 #4 SMP Mon Aug 10 11:59:25 UTC 2015 x86_64 GNU/Linux
tony@matrix:~$ cat /etc/debian_version
8.3
tony@matrix:~$ rsync --version
rsync version 3.1.1 protocol version 31
Outra máquina, desta vez Ubuntu, em vez de Debian puro.
tony@neo:/$ lsb_release -r
Release: 15.10
tony@neo:/$ uname -a
Linux neo 4.2.0-34-generic #39-Ubuntu SMP Thu Mar 10 22:13:01 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
tony@neo:/$ rsync --version
rsync version 3.1.1 protocol version 31
Copyright (C) 1996-2014 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.
tony@neo:~$ vi rsynctest.sh
tony@neo:~$ chmod 755 rsynctest.sh
tony@neo:~$ ./rsynctest.sh
Creating a 1 GB file in A...
Now press CTRL-C to interrupt rsync.
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(632) [sender=3.1.1]
rsync: [receiver] write error: Broken pipe (32)
rsync: [sender] write error: Broken pipe (32)
tony@neo:~$ ls -la B/
total 8
drwxrwxr-x 2 tony tony 4096 Apr 15 20:09 .
drwxr-xr-x 20 tony tony 4096 Apr 15 20:09 ..
tony@neo:~$ ./rsynctest.sh
Creating a 1 GB file in A...
Now press CTRL-C to interrupt rsync.
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(632) [sender=3.1.1]
tony@neo:~$ ls -la B/
total 8
drwxrwxr-x 2 tony tony 4096 Apr 15 20:10 .
drwxr-xr-x 20 tony tony 4096 Apr 15 20:09 ..
tony@neo:~$ ./rsynctest.sh
Creating a 1 GB file in A...
Now press CTRL-C to interrupt rsync.
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(632) [sender=3.1.1]
tony@neo:~$ ls -la B/
total 8
drwxrwxr-x 2 tony tony 4096 Apr 15 20:10 .
drwxr-xr-x 20 tony tony 4096 Apr 15 20:09 ..