最可靠方式是使用--info=progress2,它显示整体进度百分比、已传/总大小和实时速度,而--progress仅显示单文件进度且易造成终端刷屏;二者互斥,且--info=progress2必须配合-v才生效。

直接看 rsync --info=progress2,这是目前最可靠、最通用的方式。其他方法要么依赖额外工具(如 pv),要么只能间接推断(如 watch -n1 du -h),还容易误判。
rsync 怎么显示整体同步进度而不是每个文件的滚动日志
用 --info=progress2 替代 --progress。前者只输出一行总进度,后者每传一个文件就刷一次,几百个文件时终端直接糊掉。
-
--progress:适合单个大文件,能看到当前文件的实时速度和剩余时间 -
--info=progress2:适合目录同步,显示「已传 12.4G / 48.7G (25%),速度 32.1MB/s」这种聚合信息 - 两者不能共存;
-P是--progress --partial的简写,不等价于progress2 - 必须搭配
-v(verbose)才生效,单独用--info=progress2无输出
正在运行的 cp 进程还能补加进度监控吗
可以,但仅限本地拷贝,且需用 progress 工具抓取 cp 的 lseek 偏移量来估算进度。它不适用于 rsync 或网络同步。
- 安装:
sudo apt install progress(Debian/Ubuntu)或sudo yum install procps-ng(RHEL/CentOS) - 新开终端执行:
progress -M,它会自动扫描所有cp、mv、dd进程 - 注意:
progress依赖/proc/PID/fd/下的文件偏移,如果目标文件被 truncate 或硬链接干扰,进度可能跳变甚至卡住 - 无法获取速度,只显示「已写入 XX MB / 总大小」,没有 MB/s 数值
pv 能不能用于已有进程或远程同步
不能。pv 必须在数据流起点介入,也就是命令一开始就得用它串起管道。对已启动的 rsync 或 scp 进程无效。
- 正确用法示例:
pv large.iso | ssh user@host "cat > /tmp/large.iso" - 错误尝试:
pv加到正在运行的rsync后面?不行——pv不是调试器,没法 attach 到现有进程 - 替代思路:用
iotop -p $(pgrep rsync)看磁盘读写速率,但这只是 IO 速度,不等于文件同步有效吞吐(比如压缩、校验会拖慢) -
pv默认单位是字节,加-h才显示 KiB/MB,不加会输出一长串数字,容易看错数量级
真正麻烦的是跨网络同步——rsync 的 --info=progress2 虽然能报速度,但这个“速度”是 TCP 层收包速率,不是磁盘落盘速度;而 progress 和 iotop 只能盯本机,对方机器的瓶颈你根本看不到。这时候别信单点数值,得结合两端日志+网络延迟+目标磁盘 iowait 综合判断。











