随机
Enter 搜索 ↑↓ 切换 Esc 清空

dd

命令

底层数据拷贝工具

dd

底层数据拷贝工具

补充说明

dd命令 用于复制文件并对原文件的内容进行转换和格式化处理。dd命令功能很强大的,对于一些比较底层的问题,使用dd命令往往可以得到出人意料的效果。用的比较多的还是用dd来备份裸设备。但是不推荐,如果需要备份oracle裸设备,可以使用rman备份,或使用第三方软件备份,使用dd的话,管理起来不太方便。

建议在有需要的时候使用dd 对物理磁盘操作,如果是文件系统的话还是使用tar backup cpio等其他命令更加方便。另外,使用dd对磁盘操作时,最好使用块设备文件。

语法

dd(选项)

选项

bs=<字节数>:将ibs(输入)与obs(输出)设成指定的字节数;
cbs=<字节数>:转换时,每次只转换指定的字节数;
conv=<关键字>:指定文件转换的方式;
count=<区块数>:仅读取指定的区块数;
ibs=<字节数>:每次读取的字节数;
obs=<字节数>:每次输出的字节数;
if=<文件>:输入文件;
of=<文件>:输出到文件;
seek=<区块数>:一开始输出时,跳过指定的区块数;
skip=<区块数>:一开始读取时,跳过指定的区块数;
--help:帮助;
--version:显示版本信息。

dd 通用参数说明表

所有命令统一使用最优安全参数:bs=4M + status=progress + conv=fsync

参数 全称 作用说明
if= Input File 输入源 数据读取来源:文件/硬盘设备
of= Output File 输出目标 数据写入目的地:硬盘/镜像文件
bs=4M Block Size 块大小 单次读写4MB,大幅提升读写速度,兼顾稳定性
status=progress 进度显示 实时打印速度、已写入大小、百分比进度
conv=fsync 强制刷盘 任务结束前强制清空内存缓存,数据完全写入物理硬盘才退出,防止文件损坏

四大常用操作

场景1:制作 Ubuntu 系统安装启动盘

执行命令

sudo dd if=ubuntu-24.04.iso of=/dev/sdb bs=4M status=progress conv=fsync

关键说明

  1. if=ubuntu-24.04.iso:输入为官方系统ISO镜像
  2. of=/dev/sdb:写入整块U盘(不能写分区 /dev/sdb1,否则无法引导

前置要求


场景2:全盘系统硬盘备份(硬盘 → img镜像)

执行命令

sudo dd if=/dev/sda of=/backup/sda.img bs=4M status=progress conv=fsync

硬性规则

  1. 必须在 Live 离线系统下执行,不能备份正在运行的系统盘
  2. 备份存储空间 ≥ 原硬盘总容量
  3. 输出为裸磁盘 .img 镜像,仅用于系统还原,不是安装ISO

场景3:系统镜像还原(img镜像 → 整块硬盘)

执行命令

sudo dd if=/backup/sda.img of=/dev/sda bs=4M status=progress conv=fsync

重要提醒

  1. 离线Live环境执行,目标硬盘所有数据会被全覆盖清除
  2. 硬盘容量不能小于备份时原硬盘容量
  3. 结束后建议手动执行 sync 兜底刷盘

场景4:dd 安全擦除/清零整块硬盘

方式1:快速清零(日常数据销毁)

# 整块硬盘 /dev/sda 全部写入0,彻底清空所有分区与数据
sudo dd if=/dev/zero of=/dev/sda bs=4M status=progress conv=fsync

方式2:高安全随机覆写(隐私/涉密硬盘)

# 用随机数覆写整块硬盘,防专业数据恢复
sudo dd if=/dev/urandom of=/dev/sda bs=4M status=progress conv=fsync

⚠️ 高危警告

  1. 盘符绝对不能选错,误擦系统盘会直接清空整机所有数据
  2. 擦除操作不可逆,大容量机械盘全盘覆写耗时很长

四大场景总览对照表

操作场景 输入源 if 输出目标 of 核心用途 数据影响
制作安装U盘 ubuntu.iso /dev/sdb(U盘) 系统重装、装机 清空U盘全部数据
系统全盘备份 /dev/sda系统盘 /xxx/sda.img 整机系统备份迁移 不改动原硬盘数据
镜像还原系统 sda备份.img /dev/sda目标盘 灾难恢复、整机迁移 全覆盖清空目标硬盘
硬盘安全擦除 /dev/zero /随机数 /dev/sda闲置硬盘 报废硬盘、隐私销毁 整块硬盘数据彻底清除

补充:坏道硬盘容错通用模板

备份 / 还原 / 擦除 遇到坏扇区中断时,添加容错参数:

sudo dd if=xxx of=xxx bs=4M status=progress conv=noerror,sync,fsync

常用实例

基础示例

[root@localhost text]# dd if=/dev/zero of=sun.txt bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s

[root@localhost text]# du -sh sun.txt 
1.1M    sun.txt

该命令创建了一个1M大小的文件sun.txt,其中参数解释:

块大小计量单位表

单元大小 代码
字节(1B) c
字节(2B) w
块(512B) b
千字节(1024B) k
兆字节(1024KB) M
吉字节(1024MB) G

生成随机字符串

使用 /dev/urandom 设备配合 dd 命令获取随机字符串:

[root@localhost ~]# dd if=/dev/urandom bs=1 count=15|base64 -w 0
15+0 records in
15+0 records out
15 bytes (15 B) copied, 0.000111993 s, 134 kB/s
wFRAnlkXeBXmWs1MyGEs

测试磁盘写入速度

[root@localhost ~]# dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=direct
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 7.10845 s, 151 MB/s

测试磁盘读取速度

[root@localhost ~]# dd if=/tmp/testfile of=/dev/null bs=1G count=1 iflag=direct
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 6.53009 s, 164 MB/s