Intereting Posts
ddrescue диск Команда du показывает больший размер, чем n и стираемый размер блока в ubifs. Как проверить точный размер в убифи? NTFS Junctions и Unix Hard Links Помощь с потерянным программным обеспечением RAID5 на CentOS 6.5 Установка Linux Mint 11 LXDE x64 поверх ubuntu-минимального Вывод сообщений о завершении работы на несколько консолей Могу ли я создать файл хостов для конкретных пользователей, чтобы дополнить / etc / hosts? «Не удалось подключить« veth87VSIJ »к мосту« virbr0 »: нет такого устройства" предотвращать параллельную работу резервного копирования Передача параметров автозапуска в FreeBSD Два загрузчика установлены параллельно (вызывают проблемы) Как начать сеанс удаленной командной строки? Использование grep с шаблоном, который содержит переменную, подлежащую расширению Где находится информация о формате файловой системы, хранящемся на внешних жестких дисках Почему ] вместо ]?

Остановка rsync без сохранения временных файлов

При копировании файлов из каталога A в B с использованием rsync

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

файл с именем filename в A будет временно называться в форме .filename.9Tcfsa в B при передаче. То есть, rsync добавляет некоторые случайные символы к имени, пока передача не будет завершена.

Если я прерываю rsync с помощью Ctrl + c при передаче filename , временный файл .filename.9Tcfsa остается в B Поскольку моя команда rsync никогда не удаляет файлы из B , каждое прерывание rsync оставляет в B еще один временный файл. Это становится раздражающим подстилкой.

Можно ли остановить 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 содержит два временных файла.

Ответ: Это ошибка в rsync 3.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/ с некоторыми файлами, а затем запустил rsync один раз, чтобы заполнить B/ . Затем я просто нажал touch A/ и снова запустил rsync .

Я добавил a -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 и 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 

Нет временного файла.

Я не могу воссоздать поведение, которое вы описываете, используя базовый 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, а не чистый Debian.

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