dd 命令添加 status=progress 参数可实时显示复制进度、速率和耗时;需 coreutils 8.24+ 支持,旧版本可用 pv 替代。

在 Linux 中使用 dd 进行大规模数据迁移(如磁盘克隆、镜像写入)时,加上 status=progress 可以实时显示已复制的数据量、速率和耗时,无需额外工具或中断操作。
确认 dd 版本支持 status=progress
该参数从 coreutils 8.24 版本起引入(对应较新的发行版默认包含)。可运行以下命令验证:
$ dd --version | head -1
dd (GNU coreutils) 9.4
若版本低于 8.24(如 CentOS 7 默认为 8.22),需升级 coreutils 或改用其他进度监控方式(如 pv)。
基本用法:直接添加 status=progress 参数
只需在常规 dd 命令末尾加上 status=progress,例如:
$ dd if=/dev/sda of=/dev/sdb bs=4M status=progress
执行后会持续输出类似内容(每秒刷新一次):
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 12.456 s, 172 MB/s
注意:不加 oflag=sync 或 conv=fdatasync 时,显示速率含缓存影响,实际落盘速度可能略低。
配合常用选项提升实用性
-
固定刷新频率:默认约每秒更新一次,如需更平滑,可加
iflag=fullblock避免短读,提升速率稳定性 -
避免干扰输出:重定向 stderr 可保存日志(进度信息走 stderr),例如:
dd if=image.img of=/dev/sdc bs=4M status=progress 2>> dd.log -
与 conv=fsync 结合:确保每次写入都刷盘,速率更真实(但会显著降低性能):
dd if=data.bin of=/mnt/usb/file bs=1M status=progress conv=fsync
替代方案(旧系统或需图形化进度)
若 status=progress 不可用,推荐安装 pv(Pipe Viewer):
$ sudo apt install pv # Debian/Ubuntu
$ sudo yum install pv # RHEL/CentOS
然后通过管道监控:
$ pv image.img | dd of=/dev/sdb bs=4M
pv 支持更丰富的显示(如 ETA、进度条),且兼容所有 dd 场景。

















