rsync 是怎么实现多进程(假)分块上传的?多开 rsync 的时候是如何复制的文件? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Licsber
0.04D
V2EX    问与答

rsync 是怎么实现多进程(假)分块上传的?多开 rsync 的时候是如何复制的文件?

  •  
  •   Licsber 2020-12-19 22:17:06 +08:00 2944 次点击
    这是一个创建于 1762 天前的主题,其中的信息可能已经有所发展或是发生改变。

    事情是这样的,我这里网络环境比较特殊,单线程只能够跑到大概 2MB/s 的网速,但是多线程可以到 50MB/s 。

    在 rsync 同步的时候,速度比较慢,一开始我写了个 py 脚本,实现自动 split 文件到 tmp 目录,同时开启多个 rsync 拷贝多个文件,到远端再合并。

    机缘巧合之下,我同一个 rsync 命令运行了两次,然后第二个命令以很快的速度加载到第一个命令的进度,两者又同时开始了同步,速度相同。

    发现这个现象之后,我又用 urandom 新建了一个随机文件,同时开启 20 个 rsync 进程,我发现同步的速度增加了 20 倍,而且各个进程结束的时间不是完全一致的,最终用 rsync -c 参数重新 check 了一遍,也是成功通过校验,说明完成了同步。

    查阅手册看到,rsync 好像是不支持多线程参数的,所以我称之为多进程同步,现在就想知道这个原理,是我误打误撞还是本身就有这个用法而我没看到。

    因为 rsync 一开始不可能知道我想多开几个进程,所以不可能事先分块传输(我的人工方案),也就不可能协商出来分块方案来同步进度。

    而且查阅资料,其默认采用大小+修改时间的校验方法,并且默认新建临时文件,那么多个 rsync 进程之间获取到的临时文件大小肯定也不会一样,以此为起点也不太可能,我没加 inplace 参数,所以最后合并肯定还是由一个进程去做的,这就令我很迷惑。

    最后,我参数里还带了压缩,对流的压缩就更不可能分块传输了吧,难不成是另有玄机?我这里多开了客户端,服务端那里究竟起了几个 rsync 进程来接收文件,这也是我实验没做出来的。

    求大佬路过给小弟一个解释,实在迷惑。

    附录:

    我用的参数:

    rsync -avhzP --exclude ".DS_Store" --exclude ".*" --append-verify 

    最后校验:

    !! -c 
    4 条回复    2020-12-20 15:29:37 +08:00
    msg7086
        1
    msg7086  
       2020-12-19 23:14:47 +08:00
    rsync 主要是断点续传。
    append-verify 我倒是不太清楚会不会有奇怪的作用(或者副作用)。
    但是我感觉应该会有重复传送的现象。你可以再测量一下实际传送的流量。

    服务器上起了几个 rsync 进程的话,应该和客户端 rsync 进程数相同。
    oott123
        2
    oott123  
       2020-12-20 11:43:56 +08:00 via Android
    你掐了秒表吗?
    应该是每个 rsync 进程都做了一遍重复的事情。
    Licsber
        3
    Lisber  
    OP
       2020-12-20 15:27:46 +08:00
    @msg7086 #1 确认断点续传应该是没什么问题的
    后面的 append-verify 是参考阮一峰对 rsync 的介绍 -P 参数加一个这个可能更安心一点?
    我重复测试了一下 好像只是心理作用 确实占用的带宽大了不少 但是应该重复的数据传了好几遍

    服务端那里也是逐个起的进程
    Licsber
        4
    Licsber  
    OP
       2020-12-20 15:29:37 +08:00
    @oott123 #2 看了一下流量计 确是带宽跑的很多 就是每个干的还是重复的事情
    看来还是我一开始的解决方法好用 就是不知道为什么官方没有给出类似的实现
    在网上搜索也没有找到对单个大文件加速传送的例子 只有按照递归深度起多个线程对目录传送

    此贴差不多可以结贴 谢谢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5391 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 07:49 PVG 15:49 LAX 00:49 JFK 03:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86