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的注意事项

  1. 危险性:如果目标是 /dev/sda 或其他真实设备,写错会导致系统损坏。
  1. 性能受限:默认使用缓存,想得到真实磁盘速度建议加 direct 或 dsync
  1. 速度不代表全部:dd 测试的是顺序读写速度,不能反映随机 IO、延迟、IOPS 等实际使用性能 → 这时候 fio 更合适。

总结:dd是什么时候最有用?

使用场景
是否适合 dd
测试顺序写速度
✅ 非常适合
快速测试吞吐量
✅ 简单快捷
磁盘镜像、备份
✅ 合适
随机读写性能
❌ 不适合,建议用 fio
多线程并发测试
❌ 不适合,建议用 fio

 
上一篇
du
下一篇
常见 GPU性能
Loading...
文章列表

加载中