监控Rsync进度
我正在尝试写一个Python脚本,用来监控rsync文件传输,并大致估算进度百分比。在我的第一次尝试中,我查看了rsync --progress
这个命令,发现它会打印一些信息,比如:
1614 100% 1.54MB/s 0:00:00 (xfer#5, to-check=4/10)
我为这些信息写了一个解析器,并利用“待检查”的部分来计算进度百分比,在这个例子中,进度是60%完成。
不过,这里有两个问题:
- 在大文件传输中,“待检查”部分的数字似乎并不是一直在减少,所以进度百分比可能会出现倒退的情况。
- 并不是所有文件都会打印这样的信息,这意味着进度有时会突然跳跃。
我也查看了其他可能的消息格式,但还没有找到合适的。有没有人有什么好主意呢?
提前谢谢大家!
4 个回答
需要注意的是,即使使用 --info=progress2
这个选项,它也不完全可靠。因为这个进度百分比是基于 rsync 在显示进度时所知道的文件数量。这并不一定是需要同步的所有文件的总数,比如说,如果它在一个很深的文件夹里发现了很多大文件。
为了确保 --info=progress2
在显示进度时不会出现回跳的情况,可以在开始同步之前强制 rsync 递归扫描所有目录,而不是默认的增量扫描。这可以通过添加 --no-inc-recursive
这个选项来实现。不过要注意,这个选项会增加 rsync 的内存使用和运行时间。
你可以通过加上参数 --no-inc-recursive
来关闭增量递归。这样,rsync 会先扫描整个目录结构,这样它就知道需要检查多少个文件。
其实,这种方式是它以前递归的做法。现在默认的增量递归是为了提高速度而添加的。
当前版本的rsync(编辑时为3.1.2)有一个选项--info=progress2
,这个选项可以让你看到整个传输的进度,而不是逐个文件的进度。
来自手册页的说明:
还有一个
--info=progress2
选项,它会输出基于整个传输的统计信息,而不是单个文件的信息。使用这个选项时,不需要输出文件名(比如避免使用-v,或者如果你想查看传输进度而不想让屏幕上出现很多文件名,可以指定--info=name0
。使用--info=progress2
时,不需要指定--progress
选项。)
所以,如果你的系统允许的话,可以考虑把rsync升级到包含这个选项的最新版本。