rsync - создает ли временный файл во время передачи?

37

Насколько я вижу, rsync не создает файл в целевом каталоге, пока он не будет завершен.

Это должно означать, что он создает файл во временном каталоге и копирует файл в целевой каталог после его завершения.

Во-первых, это правильно?

Если это правда, возможно ли для rsync установить не использовать временный каталог, а вместо этого создать файл в целевом каталоге и просто продолжать запись в него до его завершения?

гепард
источник

Ответы:

46

Да, он создает временный файл.

В соответствии со страницей руководства вы можете указать каталог, в котором хранится временный файл, с параметром -T, как в

-T, --temp-dir = DIR создавать временные файлы в каталоге DIR

Ответ на вторую часть вашего вопроса также можно найти там:

--на месте

Этот параметр изменяет способ, которым rsync передает файл, когда необходимо обновить данные файла: вместо метода по умолчанию создания новой копии файла и перемещения его на место после завершения, rsync вместо этого записывает обновленные данные непосредственно в место назначения. файл.

superuser0
источник
4
Важная заметка! Вопрос предполагает, что rsync «копирует файл на место», тогда как документация rsync указывает, что rsync фактически «перемещает его на место», что является ВАЖНЫМ ОТЛИЧИЕМ . Это гарантирует, что файл появится в месте назначения атомарным способом. Это полезно для предотвращения состязаний, когда другое приложение ожидает появления файла назначения и сразу же открывает его для чтения, но файл еще не завершен при копировании.
Огр Psalm33
15

Он создает временный файл по умолчанию в целевом каталоге и по имени .<FILE_NAME>.<RANDOM_STRING>. Поэтому, если вы копируете foo.txt, он создаст файл tmp с именем .foo.txt.GV4H3( GV4H3случайная строка, которая будет отличаться при каждом запуске). Вы можете контролировать это поведение, используя следующие rsyncпараметры:

   --partial
          By default, rsync will delete any partially transferred
          file if the transfer is interrupted.  In  some  circum‐
          stances  it  is more desirable to keep partially trans‐
          ferred files. Using the --partial option tells rsync to
          keep  the  partial  file which should make a subsequent
          transfer of the rest of the file much faster.

   --partial-dir=DIR
          A better way to keep partial files than  the  --partial
          option  is  to  specify a DIR that will be used to hold
          the partial data (instead of writing it out to the des‐
          tination file).  On the next transfer, rsync will use a
          file found in this dir as data to speed up the  resump‐
          tion  of  the  transfer and then delete it after it has
          served its purpose.

Пожалуйста, прочтите соответствующие части rsyncсправочной страницы (ниже приведен лишь небольшой фрагмент большого раздела о том, как использовать --partial-dir).

terdon
источник
5

rsync создает временные файлы в целевой директории. Этот файл называется как источник, но с расширением. Это может быть так:

source: foo.bar 
target temp: foo.bar.hzmkjt7 (hzmkjt7 is just an example) 

Расширение удаляется после проверки того, что файл является точной копией источника. Во время процесса переименования определяются права доступа и время модификации. Так что возможно, что вы не видите файл из-за разрешений. Убедитесь, что у вас достаточно прав для просмотра всех файлов, а также тех, которые вам не принадлежат, для просмотра временных файлов.

Саймон
источник
Процесс создает файлы с разрешениями пользователя, который его запускает . В этом случае невозможно увидеть файлы из-за разрешений.
Ярослав Рахматуллин
@ ЯрославРахматуллин rsync также можно запустить в режиме демона. Или это может быть запланировано как cronjob. В любом случае возможно, что пользователь, под которым работает rsync, не является пользователем, который хочет видеть временный файл. В этом случае возможно, что это вопрос разрешения.
Симон
1
Временный файл может начинаться с "." В данном случае это .foo.bar.hzmkjt7.
интерсх