为什么rsync会自行分叉?以及为什么这样一个分叉的过程几乎是闲置的(如iotop所示)?


11

这是指这里所述的问题,我也遇到了同样的问题。

在我的一台服务器中,我运行了一个rsync,将一个巨大的目录(大小大于300 Gb)备份到安装在同一台计算机上的另一个磁盘上。正在同步的目录包含数千个目录和文件。我发布了一个带有'nohup'的rsync命令,然后使用'&'命令将其推送到后台。在远程bash shell上给出的完整命令(使用腻子)为:

nohup rsync -avh /some/local/dir /backup/ >> /opt/rsync.dec22.log &

然后只是为了检查以什么速率复制数据,我使用了“ iotop”命令,发现有3个rsync运行着相同的参数。在搜索时,我发现上面的链接说这很正常。

但是,通过做一个iotop来仅监视那些以及系统上运行的rsync进程,我看到一个进程正在读取文件,一个正在写入文件,但是一个处于空闲状态。行为似乎很好,因为一个进程一次只做一件事,但是第三个进程在做什么(在下图中显示为中间的一个)?

我使用的iotop命令是:

iotop -p22250 -p22251 -p22252

这是iotop命令输出的屏幕截图:

iotop命令输出显示3个rsync进程

我问这个原因,我经常使用rsync,并且想了解它的行为以获得长期利益。我什至都读了手册,但是却没说什么。

Answers:


9

rsync是一个旨在作为客户端和服务器的程序。服务器读取,客户端写入。想象一下,您不是通过一台计算机,而是通过网络拥有计算机,我敢肯定,如果您这样想的话,那就更加清楚了。

然后是控制器。由于IO操作往往会带来一定的风险,因此IO问题不应该导致完全阻塞或崩溃。因此,它为每个连接创建一个分支,并位于后台。


感谢您的知识。我从网络上单独的计算机的角度理解它,每台计算机都是同步进行工作的一部分。但是,您是否也可以参考我的行为文档,在其中可以阅读更多有关rsync和概念的内容?还想知道读取过程中读取的数据如何传递给正在写入的过程?是否使用了IPC的概念?
Gautam Somani 2012年

3
@GautamSomani官方的rsync页面将是您的最佳来源。rsync.samba.org另外,它的工作方式也可以在这里找到:rsync.samba.org/how-rsync-works.html如果您想要更多的详细信息,则可能必须深入研究源代码。
脾气暴躁的

原始作者在本地启动rsync。他没有连接到rsyncd,因此守护程序无法分叉它的孩子。而且没有网络连接。因此,为什么在本地执行rsync时会派生一个问题。答案是误导和错误的。
drookie

@drookie不管是本地的还是通过网络的。它的工作方式相同。我还在您的评论上方的我链接的官方文档中也解释了这种行为,该文档还说:“在本地传输中,通过远程外壳或通过网络套接字。”
脾气暴躁的
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.