首页/安全/应急响应速查/ddrescue 坏盘镜像取证

ddrescue 坏盘镜像取证

故障盘镜像用 ddrescue:多轮小步读取、mapfile 续传,先把好区域取下来,再逐轮回补难读区。

应急响应速查安全更新于 2026-10-13

ddrescue 的用途

故障盘做镜像用 ddrescue:它支持多轮小步读取与 mapfile 续传,先把易读区域取下来,再逐轮回补难读区。与 dd 相比,它不会因为一个坏块就整体失败,也不会反复摩擦同一区域。

核心目标是不加剧损伤

每多一次上机读取,坏盘进一步恶化的概率就更高。因此策略是尽快生成完整镜像,之后所有分析与提取都在镜像副本上进行,原件只在必要时再读。

基本信息

基本命令ddrescue -d -r1 /dev/sda disk.img disk.map
mapfile记录读取状态,支持断点续传与多轮复读
读取策略先快后慢,逐轮提高重试次数
设备访问-d 直接访问设备,绕过系统缓存
完成后计算 sha256 并登记证据清单
适用平台Linux 上的 GNU ddrescue(Debian 系包名 gddrescue)

典型使用场景

  • 故障盘的取证镜像
  • 坏道分区上的数据抢救
  • 需要多次上机读取时保留进度
  • 评估可读区域与坏道分布
  • 为后续恢复与取证提供稳定副本

两轮读取故障盘

两轮读取故障盘
ddrescue -d -r1 /dev/sda /evidence/disk.img /evidence/disk.map
ddrescue -d -r3 /dev/sda /evidence/disk.img /evidence/disk.map
ls -la /evidence/disk.img /evidence/disk.map
head -n 20 /evidence/disk.map      # 查看读取率与坏区分布
sha256sum /evidence/disk.img | tee /evidence/disk.img.sha256

输出逐列读法

字段含义正常/异常
rescued 比例已成功读取的占比长时间停滞说明难读区需要换策略
bad areas坏区数量与大小集中分布说明盘面存在局部损伤
errsize出错涉及的数据量用于评估数据可恢复程度
状态字符? 未读、* 坏区、+ 已读按状态规划下一轮读取范围
故障盘上机时间越短越好:先取镜像,任何文件系统修复都在镜像副本上做;直接在故障盘上 fsck 或挂载会加剧损伤并改写原始数据。
多轮读取之间可以让盘静置一段时间再继续;磁头不稳的盘可考虑更换读取设备或控制环境温度,但前提是不加剧损伤,且要记录每次尝试的条件。

在镜像副本上做后续处理

在镜像副本上做后续处理
losetup -r /dev/loop0 /evidence/disk.img       # 只读回环
mount -o ro,noload /dev/loop0 /mnt/evidence
ls /mnt/evidence | head
cp -a /evidence/disk.img /backup_disk/          # 至少留一份异地副本

镜像完成后的收尾

  • 计算并保存镜像与 mapfile 的哈希
  • 把镜像复制到第二块介质上
  • 记录盘序、设备号与采集时间
  • 把 mapfile 一并归档,说明读取轮次与条件

易错点

  • 直接在故障盘上 fsck 或挂载:加剧损伤,还可能改写原始数据
  • 不用 mapfile:无法续传,反复摩擦同一区域
  • 只跑一轮就收工:难读区需要多轮与不同策略回补
  • 镜像只存一份:介质故障会让取证工作前功尽弃
  • 完成后不计算哈希:后续无法证明镜像未被修改

数据来源与参考

  • GNU ddrescue 手册(mapfile 与多轮读取)
  • 故障盘取证处理实践建议

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌