rsync - чи створюється тимчасовий файл під час передачі?


37

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

Це повинно означати, що він створює файл десь у тимчасовій директорії та копіює файл у цільовий каталог, коли він закінчений.

По-перше, це правильно?

Якщо вірно, чи можливо для rsync встановити не використовувати тимчасовий каталог, а натомість створити файл у цільовому каталозі та просто продовжувати писати до нього, поки він не завершиться?

Відповіді:


46

Так, він створює тимчасовий файл.

Відповідно до сторінки man ви можете вказати каталог, у якому зберігається тимчасовий файл з параметром -T, як у

-T, --temp-dir = DIR створити тимчасові файли в каталозі DIR

Відповідь на другу частину вашого запитання також можна знайти там:

--на місці

Цей параметр змінює, як rsync передає файл, коли дані файлу потребують оновлення: замість методу за замовчуванням створити нову копію файлу та перемістити її на місце після її завершення, rsync замість цього записує оновлені дані безпосередньо до місця призначення файл.


4
Важлива примітка! Питання передбачає, що rsync "копіює файл на місце", тоді як документація на rsync вказує, що rsync насправді "переміщує її на місце", що є ВАЖЛИВИМ РІЗНАННЯМ . Це гарантує, що файл з'являється в місці призначення атомним способом. Це корисно для запобігання перегоновим умовам, коли інша програма чекає появи пункту призначення та негайно відкриває його для читання, але файл не копіюється.
Псалом Огре3333

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


5

rsync створює тимчасові файли в цільовому каталозі. Цей файл названий як джерело, але з розширенням. Це могло бути так:

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

Розширення видаляється після перевірки файлу на точну копію джерела. Під час процесу перейменування права власності встановлюються дозволи та час модифікації. Тому можливо, що ви не бачите файл через дозволи. Переконайтесь, що у вас є достатній дозвіл на перегляд усіх файлів, а також тих, які не належать вам, щоб побачити файли temp.


Процес створює файли з дозволами користувача, який ним керує . Неможливо побачити файли через дозволи в цьому випадку.
Ярослав Рахматуллін

@ ЯрославРахматуллін rsync може також працювати в демон-режимі. Або це може бути заплановано як кронштейн. У будь-якому випадку можливо, що користувач, під яким працює rsync, - це не той користувач, який хоче переглянути файл temp. У такому випадку можливо, що це питання дозволу.
Саймон

1
Файл temp може починатися з ".". У цьому випадку це .foo.bar.hzmkjt7.
interskh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.