题 显示rsync的总进度:是否可能?


我已经搜索过这个选项,但只找到了涉及的解决方案 自定义修补。事实上,它没有显示在--help和没有更多的信息可以找到可能表明答案是'不',但我想看到这确认。

是否有可能表现出来 总文件传输进度 用rsync?


195
2018-01-05 15:26




从rsync 3.1.0开始,现在包含了基本的文件传输总进度。见答案 serverfault.com/a/441724/107793 详情。 - Florian Feldhaus
请更改已接受的答案。 @David的回答完全没用。 - Navin


答案:


danakim是对的。没有简单的方法来添加总进度指标。

原因是当rsync查看要同步的文件列表时,它不知道哪个文件需要更改。如果您正在进行增量转移,则必须提前计算增量本身,以便全面了解需要完成的工作。

换句话说,计算要做多少工作的最简单方法就是实际做到这一点。


33
2018-01-06 04:10



你仍然可以有一个简单的指标,如(数据传输+数据跳过)/(源文件中的总数据),或(#file传输或跳过)/(源文件中的#file)。它不会特别准确,但它会给出一个想法。适合当你在一天结束时进行大转移时,你想知道是否要等待并关闭电脑,或者让它在晚上运行...... - naught101
我不相信这个结论是对的。我认为@naught101对这个问题更加公平,我认为可以预测不使用的答案 --size-only等等是进一步不准确的。 - Evan Carroll
在我写回复时,它是准确的 - rsync没有一个总进度指示器的机制。是的,你可以写自己的,但很少有人愿意。 - David Mackintosh
对新人的评论:现在可能: serverfault.com/a/441724/422003 - imposeren


现在有一种官方方法可以在rsync中执行此操作(版本3.1.0协议版本31,使用Ubuntu Trusty 14.04测试)。

#> ./rsync -a --info=progress2 /usr .
    305,002,533  80%   65.69MB/s    0:00:01  xfr#1653, ir-chk=1593/3594)

我试着用我的 /usr 文件夹,因为我想要这个功能转移整个文件系统,和 /usr 似乎是一个很好的代表性样本。

--info=progress2 给出一个很好的整体百分比,即使它只是一个部分值。事实上,我的 /usr 文件夹超过6演出:

#> du -sh /usr
6,6G    /usr/

rsync 花了很多时间扫描一切。因此,几乎所有的时间我看到的百分比大约是90%完成,但是很高兴看到有些东西被复制了:)

参考文献:


312
2017-10-24 11:13



请注意,这已落在3.1.0。同样重要的是要注意,从时间角度来看,这不一定准确。它实际上显示了已经验证存在于远程端的数据量。并且速率是在远程端上学习数据正确的速率(无论是那种方式还是新数据被传输并使其正确)。因此,虽然非常有用,但您需要了解警告。 - Kevin Cox
要在OSX上使用自制软件,“brew tap homebrew / dupes; brew install rsync” - Matt Carrier
值得注意的是 --info=progress2 不起作用 -v - sanmai
添加 --no-i-r 切换,等等 rsync 在复制之前不会逐步但完全扫描,并且知道+显示剩余的工作量。 - Alex
请注意,您可以使用 --human-readable (要么 -h)以MB / GB为单位查看总大小。 - Nux


你可以用'pv'(apt-get install pv 与Debian和ubuntu)。我建议监视传输的文件数,因为传输的数据量与文件大小无关,而是与源和目标之间的增量相关。计数文件将计算一个大三角洲的相同进度和另一个具有小三角洲的进度。这意味着在任何情况下,ETA估计可能都很遥远。基于大小的ETA仅在目的地为空时才有效,在这种情况下delta ==源的大小。

一般的想法是从rsync“传输”每个文件发出一行,并用'pv'计算这些行:

rsync -ai / source remote:/ dest | pv -les [文件数]> / dev / null

我倾向于备份整个文件系统(有几个原因),在这种情况下你可以使用便宜得多 df 获取文件数量(而不是 du 要么 find 在rsync完成之后,它将再次遍历您的源层次结构)。 -x选项似乎确保rsync保持在相同的源文件系统上(并且不遵循其他内部安装):

rsync -aix / source remote:/ dest | pv -les $(df -i / source | perl -ane'print $ F [2]如果$ F [5] = ~m:^ /:')> / dev / null

如果要以一般方式计算/ source中的文件,请使用 find /source|wc -l (再次警告:I / O可能很慢而且很重)。


42
2018-06-10 10:22



正如zerodeuz指定的那样,只有在你整个分区时才使用“df”,如 df -i /source 从/ source所在的所有分区获取inode(文件)的数量。否则使用 'find'计算目录中的文件 在“$()”表达式中。 - lepe
替代 du 要么 find  - 假设您正在完成一个不完整的副本或使用删除进行就地更新 - 即可使用 rsync -ai --dry-run 获取相同的文件列表,主要运行将传递给 pv - Izkata


对于长时间的转移,我很满意跑步 du -s 在双方。甚至 watch -n1 du -s如果我感到非常焦虑

watch 执行命令(du -s 这里)定期(这里每1秒)并显示输出全屏。


28
2018-01-05 16:30



谢谢你的例子 watch 命令! - Cam
//,聪明!根据linfo.org的说法:“du(即磁盘使用情况)命令报告目录树​​的大小,包括它们的所有内容和单个文件的大小。这使得它有助于追踪空间生猪,即目录和文件在硬盘驱动器(HDD)或其他存储介质上占用大量或过量空间。“ - Nathan Basanese
我不知道你做什么样的长期转会,du是可行的。当结果将在TB和M文件中时,du很慢。 - Nobody
对于我的“长时间传输”,du操作大约需要一个小时才能完成,在此期间rsync的运行速度要慢得多,因为他们正在争夺对磁盘的访问权限。 - Abhi Beckert


随着 --info = progress2 你也可以 禁用增量递归。 这将在开始时构建整个文件列表,从而使您更好地了解整体进度(至少在文件数量方面,我认为它不会扫描文件大小)。有一个权衡。这更耗费内存,并延迟了实际传输的开始。可能最适合在慢速链接连接中使用,对于文件的gajillions来说肯定不是很好。

以下是来自rsync手册页下的详细信息 -r --recursive

可以使用。禁用增量递归 --no-INC递归 选项或更短 --no-I-R 别名。

(资源: http://rsync.samba.org/ftp/rsync/rsync.html )

此外,如果指定--delete-它将在开始时强制执行完全递归,这是为了删除孤立文件(存在于dest中但不在源中的文件)所需的。


20
2017-10-16 19:56



多亏了这个,其他答案导致%年龄持续上升和下降! - artfulrobot


基本上没有。您只能使用--progress标志显示每个文件的进度,但这是关于它的。

我猜你可以写一个包装器或使用你已经找到的任何补丁,但你必须问自己是否真的值得,你真的需要rsync的总进度吗?


11
2018-01-05 15:50



这是一个包装脚本,它将总进度和文件进度显示为一个很好的进度条: gist.github.com/JohannesBuchner/4d61eb5a42aeaad6ce90 - j13r
你可以改变方式 --progress 工作使用 --info=progress2,它将向您展示全球进步。您需要禁用增量递归算法才能使其有用,所以 --info=progress2 --no-inc-recursive - mat
@ j13r你也可以分享这个要点作为答案!它的绝佳选择! - skywinder


我还搜索了如何用rsync显示总进度,我从这篇文章中找到了一个有用的答案: https://stackoverflow.com/questions/7157973/monitoring-rsync-progress

基本上,你可以使用 --info = progress2 在rsync的开发版中 3.1.0。这是什么的 DOC 说:

还有一个--info = progress2选项,它根据整个传输而不是单个文件输出统计信息。使用此标志而不输出文件名(例如,如果你想看看转移是如何进行的,而不是用很多名字滚动屏幕,请避免-v或指定--info = name0。(你不需要指定 - 进度选项,以便使用--info = progress2。)


7
2017-07-04 14:30



--info=name0 是黄金 - ipatch