rsync-在传输过程中会创建一个临时文件吗?


36

据我所知,rsync直到完成才在目标目录中创建文件。

这必须意味着它在某个地方的临时目录中创建文件,并在完成后将文件复制到目标目录中。

首先,这是正确的吗?

如果为true,是否可以将rsync设置为不使用临时目录,而是在目标目录中创建文件并继续对其进行写入,直到完成为止?

Answers:


45

是的,它确实创建了一个临时文件。

根据手册页,您可以使用-T参数指定临时文件的存储目录,如下所示:

-T,--temp-dir = DIR在目录DIR中创建临时文件

您可以在以下位置找到问题第二部分的答案:

- 到位

此选项更改了当需要更新文件数据时rsync传输文件的方式:代替创建文件新副本并在完成后将其移动到位的默认方法,rsync而是将更新后的数据直接写入目标文件。


4
重要的提示!该问题假定rsync“将文件复制到适当位置”,而rsync文档指定rsync实际上是“将其复制到适当位置”,这是IMORTANT DISTINCTION。这样可以确保文件以原子方式出现在目标位置。这对于防止争用情况很有用,因为在这种情况下,另一个应用程序正在等待目标文件的出现,并立即将其打开以进行读取,但是并没有完成文件的复制。
Ogre Psalm33

15

确实会在目标目录中创建一个临时文件,默认情况下命名为.<FILE_NAME>.<RANDOM_STRING>。因此,如果您要复制foo.txt,它将创建一个名为.foo.txt.GV4H3GV4H3是随机字符串,每次运行时都会不同)的tmp文件。您可以使用以下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) 

该文件已被验证为源的精确副本后,该扩展名即被删除。在重命名过程中,将设置权限和修改时间。因此,由于权限的原因,您可能看不到文件。确保您具有足够的权限来查看所有文件以及不属于您的文件,以便查看临时文件。


进程在运行该文件的用户的权限下创建文件。在这种情况下,由于权限的原因,不可能看不到文件。
ЯрославРахматуллин

@sync可以在守护程序模式下运行。或者可以将其安排为cronjob。无论哪种方式,运行rsync的用户都可能不是想要查看临时文件的用户。在这种情况下,可能是权限问题。
西蒙(Simon)

1
临时文件可能以“。”开头。在这种情况下,它是.foo.bar.hzmkjt7。
interskh 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.