首页/安全/取证与溯源速查/dd 采集镜像与关键参数
证据与报告57 条

dd 采集镜像与关键参数

dd 是通用的块级采集工具,配合合适块大小与错误处理参数可完成基础镜像;采集后必须立刻计算并记录哈希。

取证与溯源速查安全更新于 2026-10-13

dd 在取证里做什么

dd 是 Linux/Unix 上的块级复制工具,按偏移与长度从源设备读取字节并原样写出,因此可以把整块磁盘、单个分区或分区内的一段区域复制成镜像文件,不经过文件系统层,也就不会因为文件被删除、隐藏而漏掉内容。它是证据固定环节最基础的工具,但默认参数只是「能拷完」,要用于取证还需要显式处理读取错误、显示进度并立即做完整性校验。

基本信息

适用平台Linux、macOS、BSD;Windows 侧可用 WSL 或同类工具
核心参数if= 输入、of= 输出、bs= 块大小、count= 块数、skip/seek= 偏移
容错参数conv=noerror,sync 遇读错误继续并做填充
进度显示status=progress(较新 coreutils);旧版本收到 SIGUSR1 也可打印进度
权限要求读取裸设备需要 root 或 disk 组
前置条件源盘已卸载或只读,且未被自动挂载

典型使用场景

  • 把可疑硬盘整盘固定成镜像,之后所有分析都针对副本
  • 只采集单个分区或分区起始一小段,用于快速验证
  • 采集移动存储介质,保留删除文件的可恢复性
  • 为后续工具(fls、psteal、fsstat)准备原始镜像输入
  • 在写阻断器不可得时,用只读方式尽快完成一次性复制
  • 把镜像写回另一块同规格磁盘以复现现场

采集与记录

采集与记录
# 先确认设备名与容量,核对序列号避免拷错盘
lsblk -o NAME,SIZE,SERIAL,MOUNTPOINT
# 卸载源盘并让其只读(能配写阻断器时优先用硬件阻断)
sudo umount /dev/sdb* 2>/dev/null; sudo blockdev --setro /dev/sdb
# 采集:4M 块大小,遇错继续并填充,显示进度
sudo dd if=/dev/sdb of=/evidence/sdb.dd bs=4M conv=noerror,sync status=progress
# 立刻计算并记录镜像哈希
sha256sum /evidence/sdb.dd | tee /evidence/sdb.sha256
# 源盘仍在位时,可比对源与镜像哈希(大容量耗时较长)
sudo sha256sum /dev/sdb
# 事后校验:把记录值交给 sha256sum 复核
sha256sum -c /evidence/sdb.sha256

常用参数逐项读法

参数作用注意事项
if=/of=指定输入与输出允许是设备或普通文件;写错 of 会覆盖目标盘
bs=一次读写多少字节影响速度与日志粒度,4M 是常见折中;改块大小要重新评估读取错误
conv=noerror,sync遇读错误不中止,用零填充补齐坏块被零填充后镜像长度与源一致,报告必须注明
status=progress运行时输出进度与速率长任务必备,便于判断是否卡死在坏道上
skip=/seek=按块跳过输入或输出偏移单位是块不是字节,与 count 配合做局部采集
count=限制复制块数用于只取分区头部或抽样验证
采集前先停掉自动挂载(udev/udisks 会在设备接入瞬间挂载并写日志),否则源盘可能被写入。软件只读挡不住内核自动挂载,物理写阻断器与 udev 规则配合使用更可靠。
dd 本身不记录操作日志。规范流程里更推荐带哈希与日志功能的 dc3dd,或对坏道介质使用可续跑的 ddrescue;用 dd 时至少手工记录起止时间、命令、块大小与读取错误数。

易错点

  • if 与 of 写反会直接把镜像覆盖到源盘,造成不可逆的数据破坏,执行前务必核对设备名与序列号
  • conv=sync 用零填充坏块,若不做记录,后续分析会把填充区当成真实内容
  • 默认不指定 bs 时按 512 字节读写,大容量盘耗时成倍增加,长任务更易被误中断
  • 源盘未卸载就开始采集,文件系统缓存与后台写入会造成镜像前后不一致
  • 采集完不立即算哈希,源盘一旦归还或改写,完整性就再也无法证明,只能依靠现场留下的记录

数据来源与参考

  • GNU coreutils(dd 手册)
  • NIST SP 800-86(磁盘采集)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌