임시 파일을 남기지 않고 rsync 중지

임시 파일을 남기지 않고 rsync 중지

다음 명령을 사용하여 디렉터리에서 디렉터리로 파일을 복사합니다 A.Brsync

$ rsync -a --backup --suffix=.$(date +"%Y%m%d%H%M%S")  A/ B/

filename호출된 파일은 전송되는 동안 A양식에서 임시로 호출됩니다 . 즉, 전송이 완료될 때까지 이름에 임의의 문자를 추가하십시오..filename.9TcfsaBrsync

전송하는 동안 +를 rsync사용하여 중단하면 Ctrl임시 파일은 에 남아 있습니다. 내 명령은 파일을 삭제하지 않으므로 모든 인터럽트는 에 다른 임시 파일을 남깁니다. 이것은 짜증나는 쓰레기로 변했습니다.cfilename.filename.9TcfsaBrsyncBrsyncB

rsync임시 파일을 중지하고 삭제할 수 있나요 ?

고쳐 쓰다: 다른 사람들은 위의 문제를 경험하지 않는 것 같기 때문에 내 컴퓨터에 나타나는 현상을 보여주기 위해 출력이 포함된 스크립트를 제공했습니다.

스크립트 rsynctest.sh:

#/!bin/bash
mkdir -p A
mkdir -p B
echo "Creating a 1 GB file in A..."
dd if=/dev/zero of=A/bigfile bs=1M count=1000 >& /dev/null
echo "Now press CTRL-C to interrupt rsync."
rsync -a --backup --suffix=.$(date +"%Y%m%d%H%M%S")  A/ B/

스크립트를 두 번 실행하면 출력됩니다.

$ ./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.0]
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at io.c(521) [generator=3.1.0]
$ ./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.0]
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at io.c(521) [generator=3.1.0]
$ ls -a B
.  ..  .bigfile.KvDV0T  .bigfile.MbalWJ
$

마지막 ls명령 에는 B두 개의 임시 파일이 포함되어 있는 것으로 보입니다.

답변1

답변: 이는 rsync3.1.0의 버그입니다.

이것은에서 온 것입니다3.1.1. 출시 노트,

중단 시 부분 전송 임시 파일이 삭제되지 않는 문제를 수정했습니다(그리고 rsync가 부분 파일을 저장하지 않았습니다).

.rsync

예전의 것들

방금 내 시스템에서 이것을 테스트했습니다.

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

따라서 정확히 동일한 버전은 아니지만 rsync동일한 주요 버전입니다.

Ctrl예상대로 + 를 클릭하면 c정리 rsync가 이루어지고 임시 파일이 남지 않습니다.

A/및 를 만들고 일부 파일을 B/채운 다음 한 번 실행하여 . 그러다가 달려 들어 다시 달렸다 .A/rsyncB/touchA/rsync

처리 중인 파일을 볼 수 있도록 하나를 추가했지만 -v-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

임시 파일이 없습니다. 그러니까 아마도 내용이 바뀌지 않았기 때문에 rsync임시 파일을 만들 필요는 없을 것 같습니다.

이번에는 대용량 파일을 가지고 왔습니다 A\.

tony@trinity:~$ ls -l A/
total 561528
-rw-r--r-- 1 tony tony 574996664 Apr 15 14:52 bigfile.tgz

나는 동기화한다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

그런 다음 bigfile.tgz완전히 다른 것으로 교체하십시오.

tony@trinity:~$ ls -l A/
total 572576
-rw-r--r-- 1 tony tony 586311642 Apr 15 14:57 bigfile.tgz

이것은 동일한 파일 크기를 구성하기 위해 계속해서 복사된 다른 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 -l B/
total 561528
-rw-r--r-- 1 tony tony 574996664 Apr 15 14:52 bigfile.tgz

임시 파일이 없습니다.

다시 시작하세요. 새 파일입니다.

tony@trinity:~$ ls -l A/
total 433908
-rw-r--r-- 1 tony tony 444315604 Apr 15 15:02 bigfile.tgz

동기화 대상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

이제 A/bigfile.tgz다른 콘텐츠로 다시 만들어 보세요.

tony@trinity:~$ ls -l A/
total 545312
-rw-r--r-- 1 tony tony 558392040 Apr 15 15:04 bigfile.tgz

이번에는 를 실행 rsync하여 --partial변경 사항을 확인하세요. 이 스위치는 일반적으로 rsync일부 파일을 지우는 대신 강제로 남겨 둡니다.

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

이번에는 rsync임시 파일(bigfile.tgz라고 함)을 생성했고 이전 파일에 새로운 확장자가 부여되었습니다.

편집: 일련의 테스트를 다시 사용합니다 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

따라서 B/동기식입니다.

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

교체 A/bigfile.tgz하고 다시 동기화하세요.

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

임시 파일이 없습니다.

basic 을 사용하여 설명하는 동작을 재현할 수 없습니다 rsync.

귀하의 rsync명령이 설명과 정확히 일치하고 어딘가에 있는 다른 명령에 대한 별칭이 지정되지 않았습니까?

고쳐 쓰다:

다른 컴퓨터에서 스크립트를 사용하세요.

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

이번에는 순수한 데비안 대신 우분투(Ubuntu)라는 또 다른 머신입니다.

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

관련 정보