dd 磁盘镜像与校验
dd 按块复制数据,可以把整块磁盘或某个分区原样写成镜像文件,是取证与迁移的常规手段。它不带校验功能,所以取证场景通常配 dcfldd(可边写边算哈希)或事后对镜像再算一次 sha256。使用前必须做两件事:确认目标写完不会影响来源设备(来源只读挂载或物理只读),以及反复核对输入与输出设备名——dd 把输出写错位置就是数据覆盖,无法撤销。
基本信息
| 基本命令 | dd if=/dev/sda of=disk.img bs=4M conv=noerror,sync |
|---|---|
| 参数含义 | if 输入、of 输出、bs 块大小、conv 转换选项、status 进度显示 |
| 容错选项 | conv=noerror,sync 遇到读取错误继续并把块补零,适合坏盘 |
| 带哈希工具 | dcfldd if=... of=... hash=sha256 hashlog=... 采集即算哈希 |
| 速度与进度 | bs 通常取 1M 到 16M;status=progress 可观测进度 |
| 写保护 | 源头只读挂载,或使用硬件写保护器,避免改动原始介质 |
典型使用场景
- 取证时固定磁盘或分区内容,供后续离线分析
- 复制旧盘数据到新盘,或迁移系统盘
- 为可疑主机做完整镜像,避免在原始介质上操作
- 制作模板盘的原始副本用于批量部署
- 对坏盘做容错读取,尽量抢救可读数据
制作镜像并校验
制作镜像并校验
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE # 1 先确认设备名与容量的对应关系
blockdev --getsize64 /dev/sda # 2 记录来源设备容量,便于事后核对
dd if=/dev/sda of=/evidence/disk.img bs=4M conv=noerror,sync status=progress # 3 制作镜像
sha256sum /evidence/disk.img | tee /evidence/disk.sha256 # 4 计算镜像哈希
dcfldd if=/dev/sda of=/evidence/disk2.img bs=4M hash=sha256 hashlog=/evidence/disk2.sha256 # 5 替代方案
ls -l /evidence/disk.img; du -h /evidence/disk.img # 6 核对文件大小参数读法
| 参数 | 含义 | 使用注意 |
|---|---|---|
| if | 输入源 | 写错会读到无关数据,先 lsblk 确认 |
| of | 输出目标 | 指向已有设备会立刻覆盖,必须反复核对 |
| bs | 每次读写的块大小 | 太小极慢,太大占用内存,常用 1M 到 16M |
| conv=noerror,sync | 读取出错继续并补零,保持偏移对齐 | 取证常用,但会产生零块需在报告里说明 |
| status=progress | 显示进度 | 长时间执行时用于判断是否卡住 |
| count 与 skip | 限制长度与跳过偏移 | 只取部分区域时使用,需在记录里写明范围 |
执行前反复核对 if 与 of,并再次确认设备名没有写反:dd 不会询问确认,of 指向的磁盘内容会被直接覆盖且无法恢复。在取证机上,建议先对来源设备做只读挂载或用硬件写保护器。
镜像文件体积等于磁盘容量,动辄数百 GB:事前确认目标盘剩余空间,事后把哈希、容量与执行时间一起登记进保管记录,作为镜像与来源一致性的证明。