pv 是什么
pv(Pipe Viewer)是一段插在管道中间的监控程序:数据从它流过时原样输出,同时把已传输数据量、速率、进度百分比与预计剩余时间打到终端。备份、压缩、异地复制这类动辄几小时的操作原本没有任何反馈,pv 让过程可见,便于判断备份窗口够不够、瓶颈在哪一段。
基本信息
| 适用平台 | Linux/Unix,多数发行版需单独安装 pv |
|---|---|
| 用法 | 插在管道中间:生产者 | pv [选项] | 消费者 |
| 常用参数 | -s 预估总字节数、-p 百分比、-r 速率、-t 已用时间、-e 剩余时间 |
| 安静模式 | -n 只输出数字,适合写日志或脚本解析 |
| 命名 | -N 给监控点起名,多段管道时区分 |
| 权限要求 | 普通用户即可,读写目标文件仍需对应权限 |
典型使用场景
- 判断大目录打包与压缩还需要多久,提前决定是否延长窗口
- 异地复制时观察实际吞吐,确认是否受限于网络或磁盘
- 压缩比未知时看传输的字节数,而不是盯着跳动百分比
- 多步骤流水线里定位瓶颈段:在每一段之间插一个命名监控点
- 把长任务进度写进日志,事后复盘窗口占用是否合理
进度可视化
进度可视化
# 先估算总字节数,打包压缩时显示百分比
tar -cf - /data | pv -s $(du -sb /data | awk '{print $1}') | zstd -T0 > /backup/data.tar.zst
# 走 SSH 异地复制,显示实时速率
tar -cf - /data | pv -r -t | ssh backup@10.0.0.5 'cat > /backup/data.tar'
# 只关心速率,百分比会误导(输出体积未知)
tar -cf - /data | pv -r > /dev/null
# 多段管道给每个监控点命名,便于区分
tar -cf - /data | pv -N pack | zstd -T0 | pv -N compress > /backup/data.tar.zst输出字段读法
| 字段 | 含义 | 正常/异常 |
|---|---|---|
| 已传输量 | pv 从流中读过的数据字节数 | 长时间不动说明上游阻塞或卡住 |
| 速率 | 当前平均速率与单位 | 远低于链路或磁盘能力时排查瓶颈段 |
| 进度百分比 | 仅在 -s 给定总量时出现 | 没有 -s 时不会有百分比 |
| 已用/剩余时间 | -t 与 -e 输出 | 剩余时间持续变大说明速率在下降 |
| 监控点名称 | -N 指定的标签 | 多段管道未命名会分不清是哪一段 |
pv 会把数据读进自己的缓冲区再写出,等于多一次拷贝,并有管道缓冲带来的额外延迟。超大文件传输前先用小样本测一次吞吐,避免进度显示本身成为瓶颈。
总量估算不准会让百分比跳动:du 统计的是当前占用(稀疏文件会小于逻辑大小),而 tar 打包出来可能是逻辑大小。估不准就固定看速率与已传输量,判断更实际。