为什么有多个rsync线程?

为什么有多个rsync线程?

我使用单个 rsync程序来备份文件系统。

通过ps,我发现有四个rsync线程或进程,两个处于 R 状态(运行),两个处于 S 状态(挂起?):

$ ps aux | grep rsync
root     14144  0.0  0.0   6008  1868 pts/1    S+   03:16   0:00 sudo rsync -azvv /windows-d/ ./2015.03.07_03:16:05/
root     14145 47.2  0.5  62424 46108 pts/1    R+   03:16 226:44 rsync -azvv /windows-d/ ./2015.03.07_03:16:05/
root     14146  0.6  0.2  80052 20584 pts/1    S+   03:16   2:59 rsync -azvv /windows-d/ ./2015.03.07_03:16:05/
root     14147 11.4  0.2  49324 20264 pts/1    S+   03:16  55:02 rsync -azvv /windows-d/ ./2015.03.07_03:16:05/
ting     16986  0.0  0.0   4392   820 pts/4    S+   11:16   0:00 grep --color=auto rsync

通过pstree,我发现有三个rsync进程或线程:

$ pstree | grep rsync
     |                |-bash---sudo---rsync---rsync---rsync

为什么我有多个rsync线程或进程,而我只运行一个程序?

从标准输出输出来看,它似乎不是并行传输多个文件(这似乎需要额外的努力?通过同时/并发文件传输加速 rsync)?

但我检查目的地,发现有一些目录(例如dir1)仅包含一些但不是所有文件已传输,而rsyncstdout 的输出表示它正在另一个单独的目录中传输文件(例如dir2,其中包含相同的父目录dir1)。在我看来,稍后它将输出到标准输出,表示它将传输目录中的剩余文件(例如dir1),其中一些文件但不是所有文件已经传输。

答案1

rsync 程序需要做很多事情,其中​​包括:

  • 查找与远程服务器不同步的文件
  • 决定需要传输哪些部分
  • 传输增量,以便可以更新“另一侧”

通常,但并非总是,传输部分是带宽的限制因素。

Rsync 不并行传输补丁数据。但它确实会生成其他数据和交换,从而积累有关其他三角洲可能需要转移的知识。它在传输期间使用线程来执行此操作,以便当特定增量的传输完成时,下一个增量(希望)准备好传输。

更简单的方法是等待增量传输完成,然后开始比较下一个文件是否有必要的传输。由于可能需要一段时间才能找到下一个不同的文件,因此在此期间不会利用传输带宽。

相关内容