rsync 在继续损坏的副本时使用哪些临时文件?

rsync 在继续损坏的副本时使用哪些临时文件?

在“源端”我正在运行:

rsync -azP file.txt username@target:/root/

我必须中断一次(CTRL+C),但是随后发出相同的命令,所以 rsync 正在继续,就在它离开的地方(据我所知)。

在“目标端”我可以看到这些文件:

username@target:/root> ls -lah|grep -i file.txt
-rw-r--r-- 1 username group 120G May  3 16:32 file.txt
-rw------- 1 username group 342G May  8 12:47 .file.txt.yISk8R
username@target:/root> 
  • file.txt:我认为(?)它是在中断 rsync 一次之前已经传输的部分。

  • .file.txt.yISk8R:我认为(?)这是在一次性 rsync 中断发生后传输的部分。

  • 在 SLES12 上使用 rsync-3.1.0-12.1.x86_64

q:目标端的这两个文件到底是什么?

那么当 rsync 完成时,它会将“.file.txt.yISk8R”附加到“file.txt”吗?

还是更复杂?:

我可以看到“.file.txt.yISk8R”的开头看起来与原始“file.txt”相同,因此规则可能有所不同......:

source:/root # head -1 file.txt|strings|head -1
A_.o
source:/root #

username@target:/root> head -1 .file.txt.yISk8R|strings|head -1
A_.o
username@target:/root>

username@target:/root> head -1 file.txt|strings|head -1
f/o*d
username@target:/root> 

我可以看到“.file.txt.yISk8R”在仍在进行的传输过程中不断增长。

即使从https://linux.die.net/man/1/rsync

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-z, --compress              compress file data during the transfer
-P                          same as --partial --progress
->
    --partial               keep partially transferred files
    ->
        --partial
            By default, rsync will delete any partially transferred file if the transfer is 
            interrupted. In some circumstances it is more desirable to keep partially 
            transferred 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.

最初的目的是将这些文件从“目标”转发到另一个“目标2”,同时它们仍在复制到“目标”。我应该开始复制“.file.txt.yISk8R”文件吗?那为什么“file.txt”有120G大小呢?或者数据以某种方式重复?

2019 年 5 月 13 日更新:天哪,我可以看到这些几乎是重复的数据...所以当您复制 600 GB 文件并在 ex.: 500 GB 处中断时,您将需要在目标端至少 1100 GB 存储,因为 rsync 与“- azP”将创建几乎重复的文件(.file.txt.xxxxx 与 file.txt)。为什么它不对较小的块进行一些哈希处理,然后根据最后一个块没有相同的哈希值继续进行?

答案1

该过程的一些背景可以阅读:https://rsync.samba.org/how-rsync-works.html(特别是在“接收者”部分)。

目标端的这两个文件到底是什么?

在您开始(最近的)同步之前,第一个文件已经存在。也许您之前已经同步过?假设使用默认选项,它将一直保留在那里,直到rsync认为同步已完成。

第二个文件是最近同步期间使用的临时文件。使用默认选项,它将在下次运行时在该点拾取。

那么当 rsync 完成时,它会将“.file.txt.yISk8R”附加到“file.txt”吗?

不会。它将删除现有的“file.txt”,然后将临时文件重命名为新的“file.txt”。

我可以看到“.file.txt.yISk8R”在仍在进行的传输过程中不断增长。

是的。文件传输不是原子的。这就是使用隐藏文件名的原因。在正常情况下,您不想访问该文件,因为它可能正在更改或不完整。

如果您要继续处理,则应该忽略临时文件。只需复制“file.txt”即可。该文件应始终一致且完整(如果不是始终是最新的)。

相关内容