加载中
dd
dd 是一个功能强大而低级的命令行工具,主要用于在类 Unix 系统中进行块级数据拷贝、转换和性能测试等操作。它常用于:
- 磁盘读写性能测试
- 制作启动盘、备份/恢复磁盘
- 数据擦除
- 文件转换(如字节顺序、编码)
基本语法
其中:
- if=:input file(输入源)
- of=:output file(输出目的地)
默认是从标准输入 (stdin) 读,写到标准输出 (stdout)
常用参数详解
参数 | 含义与说明 |
if=FILE | 输入文件(如 /dev/zero, /dev/sda) |
of=FILE | 输出文件(如 test.img) |
bs=SIZE | 一次读/写的块大小(如 1M, 4k) |
count=N | 拷贝的块数量(总大小 = bs * count) |
seek=N | 输出跳过 N 个块(适合定位写入位置) |
skip=N | 输入跳过 N 个块 |
status=progress | 显示实时进度 |
conv=xxx | 转换操作,如 sync、noerror、notrunc |
oflag=xxx | 输出标志(见下文) |
iflag=xxx | 输入标志(见下文) |
实用示例
测试写入性能
- 向 testfile 写入 1GB 全零数据
- oflag=direct:跳过缓存,更接近真实写入速度
测试读取性能
- 从 testfile 读 1GB 数据,但不写入,只测读速度
显示写入进度
- 会在终端中实时显示写入了多少字节
制作磁盘镜像
- 把整个磁盘 /dev/sda 做成镜像文件(需要 sudo)
恢复镜像到磁盘
- 恢复 .img 到目标磁盘,注意会完全覆盖
特殊设备说明
设备名 | 说明 |
/dev/zero | 无限输出 0(用于测试写入) |
/dev/null | 写入后立即丢弃(用于测试读取) |
/dev/random | 输出随机数据(慢) |
/dev/urandom | 输出伪随机数据(较快) |
/dev/sdX | 磁盘或分区设备 |
oflag和iflag说明(提升测试准确性)
oflag可选值:
参数 | 含义 |
sync | 每次写入后强制同步写盘 |
direct | 绕过缓存直接写入磁盘 |
dsync | 每个块写入后同步(比 sync 更慢,但更真实) |
推荐测试写入时用 oflag=direct 或 dsync 得到更真实性能
iflag可选值:
参数 | 含义 |
direct | 直接从磁盘读取数据,绕过缓存 |
skip_bytes=N | 跳过字节而不是块 |
常用于安全擦除(慎用)
- 会将整个磁盘写满 0,用于简单的数据擦除
- 写入随机数据,提高擦除安全性(非常慢)
使用dd的注意事项
- 危险性:如果目标是 /dev/sda 或其他真实设备,写错会导致系统损坏。
- 性能受限:默认使用缓存,想得到真实磁盘速度建议加 direct 或 dsync
- 速度不代表全部:dd 测试的是顺序读写速度,不能反映随机 IO、延迟、IOPS 等实际使用性能 → 这时候 fio 更合适。
总结:dd是什么时候最有用?
使用场景 | 是否适合 dd |
测试顺序写速度 | ✅ 非常适合 |
快速测试吞吐量 | ✅ 简单快捷 |
磁盘镜像、备份 | ✅ 合适 |
随机读写性能 | ❌ 不适合,建议用 fio |
多线程并发测试 | ❌ 不适合,建议用 fio |
上一篇
du
下一篇
常见 GPU性能
Loading...