文档首页> 技术教程> 用 dd 测磁盘裸写速度(附风险提醒)

用 dd 测磁盘裸写速度(附风险提醒)

发布时间:2026-03-13 11:10        更新时间:2026-03-14 02:17
dd 是 Linux 自带的块设备读写工具,配合 oflag 参数可以绕开系统缓存,测出磁盘的真实写入能力。命令只有一行,风险也在这行里:of 指到哪,数据就抹到哪。 一、测试前的准备 先确认要测的盘,别把系统盘当靶子: ``` lsblk df -h ``` lsblk 能看清盘符与挂载关系,比如 vdb 尚未分区、没有挂载点,就是干净的目标。这块盘上如果还有数据,先备份——dd 直写等价格式化级别的破坏。 二、执行写入测试 挂载一块空盘后,用文件方式测: ``` dd if=/dev/zero of=/mnt/testfile bs=1M count=4096 oflag=direct status=progress ``` 三个关键参数: - oflag=direct 绕过页缓存直写磁盘,测的是裸写速度。不加这个参数,数据先落在内存里再慢慢落盘,测出来的数字会虚高不少。 - bs=1M 块大小,机械盘用 1M,NVMe 固态可以试 4M。块尺寸给得太小,比如 4k,顺序写速度会被严重拉低,测顺序性能就用 1M 起。 - status=progress 输出实时进度,结束后给出平均速度。 同一块盘,加与不加 oflag=direct 的结果可能差两到三倍,这正说明缓存对测速的影响。测裸写之外,顺手记一份不加参数的数字放在一起,磁盘的真实能力和缓存的作用一眼可见。测完删掉测试文件释放空间:rm -f /mnt/testfile。 三、读速度顺便一起测 ``` dd if=/mnt/testfile of=/dev/null bs=1M iflag=direct status=progress ``` 先写后读,用同一个测试文件,结果才有对照意义。 四、两个常见的坑 一是写错盘。of=/dev/vdb 和 of=/dev/vda 差一个字母,前者毁数据盘,后者毁系统盘。执行前把命令完整读一遍,养成先 lsblk 再回车的习惯。二是把缓存当性能。看到几百 MB/s 别急着下结论,先检查有没有加 oflag=direct;对比云盘官方标称值时也要注意口径,标称值通常是裸盘顺序读写,与带缓存的测试数字不可直接比。 dd 只反映顺序读写,数据库这类随机小 IO 场景差距很大。想测得更细,可以用 fio 跑 4K 随机写: ``` fio --name=t --rw=randwrite --bs=4k --size=1G --direct=1 --numjobs=1 ``` 一条命令就能模拟真实负载,比 dd 更接近业务形态。测试结果异常偏低时,先确认是否触发了云盘的突发性能额度,再考虑提交工单。