dd是linux系统中一个用于数据复制和转换的命令行工具,它可以直接在文件、磁盘、分区等设备之间进行原始数据块的读写操作,不依赖文件系统的逻辑结构,因此可以实现很多底层数据操作功能。

dd的基本语法
dd的基础命令格式如下:
dd if=输入源 of=输出目标 [参数]
其中核心参数说明:
- if:指定输入文件或设备,默认是标准输入
- of:指定输出文件或设备,默认是标准输出
- bs:指定每次读写的块大小,可搭配单位如k、M、G
- count:指定复制的块数量
- conv:指定数据转换规则,比如转换大小写、同步写入等
dd的常用场景
1. 磁盘或分区备份
可以将整个磁盘或分区备份为镜像文件,示例如下:
# 将/dev/sda磁盘备份到backup.img文件,块大小设为4M dd if=/dev/sda of=/home/backup.img bs=4M
2. 制作启动盘
将系统镜像写入U盘制作启动盘,示例如下:
# 将ubuntu镜像写入/dev/sdb U盘,块大小设为1M dd if=ubuntu.iso of=/dev/sdb bs=1M
3. 数据擦除
用随机数据覆盖磁盘空间,实现数据彻底擦除,示例如下:
# 用随机数据覆盖/dev/sdc磁盘 dd if=/dev/urandom of=/dev/sdc bs=4M
4. 创建指定大小的文件
生成固定大小的空文件,示例如下:
# 创建大小为100M的testfile文件 dd if=/dev/zero of=testfile bs=1M count=100
使用dd的注意事项
dd的操作是直接对底层数据读写,错误的参数可能造成不可逆的数据丢失,使用时需要特别注意:
- 操作前务必确认
if和of参数对应的设备路径,避免把数据写到错误的磁盘 - 对正在使用的磁盘或分区进行操作时,建议先卸载对应设备,避免数据不一致
- 如果要复制大容量设备,合理设置
bs参数可以提升操作效率,块大小不是越大越好,需要根据设备性能调整 - 操作完成后可以通过
sync命令确保数据全部写入存储设备
dd和其他复制工具的区别
和cp命令相比,dd不依赖文件系统,可以直接操作块设备,适合底层数据操作;而cp是基于文件系统的文件复制工具,更适合普通文件拷贝。和rsync相比,dd不支持增量复制,每次都是全量操作,但可以实现更底层的数据控制。